From 682b90be03a98f9e5a38ef3df679bd7986340599 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 11 Jun 2023 21:21:17 -0400 Subject: [PATCH 01/80] Docs changes from #480 --- .github/workflows/CI.yml | 3 +- .readthedocs.yaml | 22 +++ .readthedocs.yml | 19 -- Dockerfile | 69 +++++--- doc/conf.py | 8 +- doc/library/Evolve/evolve.md | 38 ++++ doc/library/Evolve/systematics.md | 252 +++++++++++++++++++++++++++ doc/library/images/FullPhylogeny.png | Bin 0 -> 74439 bytes doc/library/images/phylogeny.jpg | Bin 0 -> 39648 bytes doc/library/index.md | 1 + doc/requirements.in | 16 +- doc/requirements.txt | 92 +++++----- include/emp/config/config.hpp | 2 + include/emp/matching/MatchBin.hpp | 3 +- 14 files changed, 421 insertions(+), 104 deletions(-) create mode 100644 .readthedocs.yaml delete mode 100644 .readthedocs.yml create mode 100644 doc/library/Evolve/evolve.md create mode 100644 doc/library/Evolve/systematics.md create mode 100644 doc/library/images/FullPhylogeny.png create mode 100644 doc/library/images/phylogeny.jpg diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e8c7d0e902..e2eee81a06 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -7,6 +7,7 @@ on: - '**' schedule: - cron: '0 0 * * 0' + workflow_dispatch: jobs: tidy: name: Enforce Tidyness @@ -106,7 +107,7 @@ jobs: - uses: mmore500/actions-setup-docker@94429ebc8d9edb4e8c8afb2667bce1e89435f74f - run: docker build -t devosoft/empirical . - run: docker ps -a - - run: sudo docker run --name empirical devosoft/empirical /bin/bash -c "set -o pipefail && cd /opt/Empirical/doc && make html coverage | ./headtail.sh && python /opt/Empirical/doc/parse_documentation_coverage.py /opt/Empirical/doc/_build/doc-coverage.json >> /opt/Empirical/doc-coverage.json" + - run: sudo docker run --name empirical devosoft/empirical /bin/bash -c "set -o pipefail && cd /opt/Empirical/doc && make html coverage | ./headtail.sh && python3 /opt/Empirical/doc/parse_documentation_coverage.py /opt/Empirical/doc/_build/doc-coverage.json >> /opt/Empirical/doc-coverage.json" - run: sudo docker cp empirical:/opt/Empirical/doc-coverage.json . - uses: sylvanld/action-storage@v1 if: github.ref == 'refs/heads/master' diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..675e23b0d1 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,22 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.10" + + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: doc/conf.py + +# Optionally declare the Python requirements required to build your docs +python: + install: + - requirements: doc/requirements.txt diff --git a/.readthedocs.yml b/.readthedocs.yml deleted file mode 100644 index e862e52db5..0000000000 --- a/.readthedocs.yml +++ /dev/null @@ -1,19 +0,0 @@ -# .readthedocs.yml -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -#Required -version: 2 - -# Build documentation in the docs/ directory with Sphinx -sphinx: - configuration: doc/conf.py - -# Optionally build your docs in additional formats such as PDF -formats: [] - -# Optionally set the version of Python and requirements required to build your docs -python: - version: 3.7 - install: - - requirements: doc/requirements.txt diff --git a/Dockerfile b/Dockerfile index a06368ac46..6879625359 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Pull base image. -FROM ubuntu:bionic-20210416 +FROM ubuntu:focal-20230412 COPY . /opt/Empirical @@ -8,6 +8,7 @@ SHELL ["/bin/bash", "-c"] # Prevent interactive time zone config. # adapted from https://askubuntu.com/a/1013396 ENV DEBIAN_FRONTEND=noninteractive +ENV SPHINXBUILD="python3.10 -m sphinx" RUN \ echo 'Acquire::http::Timeout "60";' >> "/etc/apt/apt.conf.d/99timeout" \ @@ -31,22 +32,21 @@ RUN \ && \ rm -rf /var/lib/apt/lists/* \ && \ - find /etc/apt -type f -name '*.list' -exec sed -i 's/\(^deb.*-backports.*\)/#\1/; s/\(^deb.*-updates.*\)/#\1/; s/\(^deb.*-proposed.*\)/#\1/; s/\(^deb.*-security.*\)/#\1/' {} + \ - && \ apt-get update -y \ && \ - apt-get install -y software-properties-common=0.96.24.32.1 \ + apt-get install -y software-properties-common \ && \ add-apt-repository -y ppa:ubuntu-toolchain-r/test \ && \ + add-apt-repository -y ppa:deadsnakes/ppa \ + && \ apt-get update -y \ && \ apt-get install --no-install-recommends --allow-downgrades -y \ - dpkg-dev \ - libc6=2.27-3ubuntu1 \ - libc6-dev \ - libc6-dbg \ build-essential \ + dpkg-dev \ + g++-11 \ + libc6 \ xvfb \ x11vnc \ x11-xkb-utils \ @@ -60,21 +60,14 @@ RUN \ libnss3 \ lsb-release \ xdg-utils \ - g++-8=8-20180414-1ubuntu2 \ - gcc-8-base=8-20180414-1ubuntu2 \ - cpp-8=8-20180414-1ubuntu2 \ - gcc-8=8-20180414-1ubuntu2 \ - gcc-8-base=8-20180414-1ubuntu2 \ - libgcc-8-dev \ - libstdc++-8-dev \ cmake \ - python-virtualenv \ - python-pip-whl \ - python-pip \ - python-setuptools \ + python3-distutils \ python3-setuptools \ python3-virtualenv \ python3-pip \ + 'python3\.10' \ + 'python3\.10-distutils' \ + 'python3\.10-venv' \ nodejs \ npm \ tar \ @@ -84,7 +77,7 @@ RUN \ doxygen \ curl \ perl \ - perl-base=5.26.1-6 \ + perl-base \ git \ htop \ man \ @@ -162,12 +155,14 @@ ENV DISPLAY :99 RUN echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/userns.conf RUN \ - update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 90 \ + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 90 \ && \ npm install -g n \ && \ n 14.17 \ && \ + hash -r \ + && \ export python="/usr/bin/python3" \ && \ npm install source-map \ @@ -175,12 +170,32 @@ RUN \ echo "finalized set up dependency versions" RUN \ - pip install wheel==0.30.0 \ + curl -sS https://bootstrap.pypa.io/get-pip.py | python3 \ + && \ + curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10 \ + && \ + pip install --upgrade --force-reinstall pip virtualenv \ + && \ + pip3 install --upgrade --force-reinstall pip virtualenv \ + && \ + python3.10 -m pip install --upgrade --force-reinstall pip virtualenv \ && \ - pip3 install wheel==0.30.0 \ + python3 -m pip install --upgrade --force-reinstall pip virtualenv \ + && \ + pip install wheel==0.30.0 six==1.16.0 \ + && \ + pip3 install wheel==0.30.0 six==1.16.0 \ + && \ + python3.10 -m pip install wheel==0.30.0 six==1.16.0 \ + && \ + python3 -m pip install wheel==0.30.0 six==1.16.0 \ && \ pip3 install -r /opt/Empirical/doc/requirements.txt \ && \ + python3.10 -m pip install -r /opt/Empirical/doc/requirements.txt \ + && \ + python3 -m pip install -r /opt/Empirical/doc/requirements.txt \ + && \ echo "installed documentation build requirements" RUN \ @@ -190,13 +205,19 @@ RUN \ && \ git submodule init \ && \ - git submodule update -f \ + echo "nameserver 8.8.8.8" > /etc/resolv.conf \ + && \ + n=0; until [ $n -ge 3 ]; do git submodule update -f && break || ((n++)); sleep 5; done; if [ $n -eq 3 ]; then echo "Update failed after 3 attempts."; else echo "Update successful!"; fi \ && \ echo "initialized submodules" RUN \ cd /opt/Empirical \ && \ + curl -sS https://bootstrap.pypa.io/get-pip.py | python3 \ + && \ + python3 -m pip install virtualenv \ + && \ make install-test-dependencies \ && \ echo "installed test dependencies" diff --git a/doc/conf.py b/doc/conf.py index 93843550ce..baddcbfc42 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Empirical documentation build configuration file, created by @@ -22,6 +22,7 @@ import sphinx_rtd_theme import subprocess import sys +import textwrap # -- General configuration --------------------------------------------- @@ -60,7 +61,10 @@ # TIP: if using the sphinx-bootstrap-theme, you need # "treeViewIsBootstrap": True, "exhaleExecutesDoxygen": True, - "exhaleDoxygenStdin": "INPUT = ../include" + "exhaleDoxygenStdin": textwrap.dedent(""" + INPUT = ../include + EXCLUDE_SYMBOLS += internal __impl_* *impl *IMPL *_IMPL_* *Impl + """) } # Tell sphinx what the primary language being documented is. diff --git a/doc/library/Evolve/evolve.md b/doc/library/Evolve/evolve.md new file mode 100644 index 0000000000..d0e2a65743 --- /dev/null +++ b/doc/library/Evolve/evolve.md @@ -0,0 +1,38 @@ +# Evolution tools + +## World + +```{eval-rst} +.. doxygenfile:: emp/Evolve/World.hpp + :project: Empirical + :no-link: +``` + +## Systematics Manager + +```{include} systematics.md +``` + +### Systematics API + +```{eval-rst} +.. doxygenfile:: emp/Evolve/Systematics.hpp + :project: Empirical + :no-link: +``` + +## NK + +```{eval-rst} +.. doxygenfile:: emp/Evolve/NK.hpp + :project: Empirical + :no-link: +``` + +## Selection + +```{eval-rst} +.. doxygenfile:: emp/Evolve/World_select.hpp + :project: Empirical + :no-link: +``` diff --git a/doc/library/Evolve/systematics.md b/doc/library/Evolve/systematics.md new file mode 100644 index 0000000000..354f5096c2 --- /dev/null +++ b/doc/library/Evolve/systematics.md @@ -0,0 +1,252 @@ + +The systematics manager tracks phylogenetic relationships among organisms within a digital +evolution system. For asexual systems, these relationships forma phylogenetic tree +(phylogeny). Systems with recombination (i.e. sexual reproduction systems) are not +yet supported. One of the major benefits of doing *in silico* evolution experiments (instead of or in addition to laboratory or field experiments) is that they allow perfect measurement of quantities that can only be inferred in nature. Once such property is the precise phylogeny (i.e. ancestry tree) of the population. + +![An example phylogeny](../images/phylogeny.jpg) + +At face value, measuring a phylogeny in *in silico* evolution may seem very straightforward: you just need to keep track of what gives birth to what. However, multiple aspects turn out to be non-trivial (see below). The Empirical systematics manager is designed to handle these challenges in a flexible way such that it can be easily plugged into any digital evolution system. It flexibly handle all aspects of recording phylogenies in *in silico* evolution. + +Note: A python wrapper for systematics manager exists in the form of the [Phylotrackpy library](https://phylotrackpy.readthedocs.io/en/latest/). + +### Features + +#### Flexible taxon definitions + +One of the central decisions when creating a phylogeny is choosing what the taxonomic units (i.e. the nodes in the tree) are. In a traditional phylogeny, these nodes are species. However, the concept of species is so murky that it is impossible to generically apply to computational evolution systems (we'd argue that it's questionable whether it could even be applied to biological data recorded at perfect temporal resolution, but that's a separate conversation). One alternative would be to make a phylogeny in which all nodes are individuals, but these trees are usually so large that they are impractical to work with. + +Increasingly, biologists have embraced the idea of building trees in which the taxonomic units are not species. Often, these are denoted by referring to them as an "X tree", where X is the taxonomic unit of interest. A traditional phylogeny, then, is a species tree. This terminology is particularly common in cancer evolution research, in which species trees are often contrasted with "clone trees" or "gene trees", in which the taxonomic units are genotypes. + +We can generalize this concept - any phylogeny of individuals can be abstracted by lumping individuals together based on a shared feature (see figure). This feature could be something simple like a phenotypic or genotypic trait, or it could be something more complex. For example, to approximate something more like a traditional biological species concept, you could choose to define an individual as being a member of a new taxonomic unit if it fails to produce successful offspring when recombined with an individual prototypical of its parent species (although note that the stochasticity inherent in this definition could have some unexpected side effects). The broader the grouping, the smaller the phylogeny will be (e.g. a genotype tree will be larger than a phenotype tree). + +![Illustration of different ways taxonomic units could be defined](https://raw.githubusercontent.com/emilydolson/interpreting_the_tape_of_life/master/figs/dolson.lineage_metrics_cartoon.png) +(Figure from "Quantifying the tape of life: Ancestry-based metrics provide insights and intuition about evolutionary dynamics" published in the proceedings of [ALIFE 2018](http://2018.alife.org/)) + +So how does the systematics manager handle this problem? By giving you the power to define taxonomic groupings however you want! When you construct a `Systematics` object, you give it a function that it can use to determine the taxonomic unit of an organism. Later, when organisms are born, you will pass them to the `Systematics` object and it will run that function on them. If the result matches the result of calling that function on the new organism's parent, then the organism will be considered to be part of the same taxonomic unit (taxon) as its parent. If the results do not match, the new organism will be considered to be the start of a new taxon descended from the parent's taxon. + +Note that multiple taxa may evolve that are the "same" (i.e. running the function on organisms in each yields the same result); each unique evolutionary origin will be counted as a distinct taxon. For example, let's imagine we are building a phylogeny of real animals in nature and grouping them into taxa based on whether they spend more than 50% of their lives in water. Fish and whales would be parts of two different taxa. Even though they both live their whole lives in the water, there would be a "land" taxon in between them on the line of descent. + +Example: + +```cpp +#include "Systematics.hpp" + +// Assuming that the org_t class has a member variable called genotype that stores +// its genotype, this will create a phylogeny based on genotypes +// The org_t template parameter is the type of the organisms living in your world. +// The info_t template parameter is the type of the piece of information you will +// return to indicate which organisms count as the same taxon. +// e.g. here, info_t should be whatever the type of org.genotype is. +sys = emp::Systematics sys([](const org_t & org){return org.genotype;}); +``` + +#### Pruning + +Phylogenies can get very large. So large that they can cause you program to exceed its available memory. To combat this problem, phylogenies can be "pruned" so they only contain extant (i.e. not extinct) taxa and their ancestors. If the `store_outside` variable for a systematics object is set to `False` (the default), this pruning will happen automatically. If you truly want to keep track of every taxon that ever existed, you can do so by setting `store_outside` to `True`. If you want to keep track of some historical data but can't afford the memory overhead of storing every taxon that ever existed, an intermediate options is to periodically print "snapshot" files containing all taxa currently in the phylogeny. + +#### Phylostatistics calculations + +Phylogenies are very information-dense data structures, but it can sometimes be hard to know how to usefully compare them. A variety of phylogenetic summary statistics (mostly based on topology) have been developed for the purpose of usefully making high-level comparisons. The systematics manager has many of these statistics built-in and can automatically output them. It can even keep running data (mean, variance, maximum, and minimum) on each statistic over time in a highly efficient format. + +Available statistics include: + +- Mean/max/min/sum/variance pairwise distance +- Colless-like index (a variant of the Colless index adjusted for trees with multifurcations) +- Sackin index +- Phylogenetic diversity + +#### Efficiency + +Tracking phylogenies can be computationally expensive. We have sought to keep the computational overhead as low as possible. + +We also provide the option to remove all taxa that died before a certain time point (the `remove_before` method). Use this with caution, as it will inhibit the use of many phylogenetic topology metrics. In extreme cases it may be necessary to keep your memory footprint sufficiently low, though. + +If you need substantially higher efficiency (in terms of time or memory) or are working in a distributed computing environment (where having a centralized phylogeny tracker can pose a large bottleneck), check out the [hstrat library](https://github.com/mmore500/hstrat), which lets you sacrifice some precision to achieve lower computational overhead. + +#### Flexible output options + +At any time, you can tell the systematics manager to print out the full contents of its current phylogeny in a "snapshot" file. These files will be formatted according to the [Artificial Life Phylogeny Data Standard format](https://alife-data-standards.github.io/alife-data-standards/phylogeny.html). By default they will contain the following columns for each taxon: 1) unique ID, 2) ancestor list, 3) origin time, and 4) destruction time. However, you can add additional columns with the `add_snapshot_fun` method. + +You can also print information on a single lineage. + +### Useful background information + +There are certain quirks associated with real-time phylogenies that you might not be used to thinking about if you're used to dealing with reconstructed phylogenies. Many of these discrepancies are the result of the very different temporal resolutions on which these types of phylogenies are measured, and the fact that the taxonomic units we work with are often at a finer resolution than species. We document some here so that they don't catch you off guard: + +- **Multifurcations are real**: In phylogenetic reconstructions, there is usually an assumption that any multifurcation/polytomy (i.e. a node that has more than two child nodes) is an artifact of having insufficient data. In real-time phylogenies, however, we often observe multifurcations that we know for sure actually happened. +- **Not all extant taxa are leaf nodes**: In phylogenetic reconstructions, there is usually an assumption that all extant (i.e. still living) taxa are leaf nodes in the phylogeny (i.e. none of them are parents/offspring of each other; similar taxa are descended from a shared common ancestor). In real-time phylogenies it is entirely possible that one taxon gives birth to something that we have defined as a different taxon and then continues to coexist with that child taxon. +- **Not all nodes are branch points**: In phylogenetic reconstructions, we only attempt to infer where branch points (i.e. common ancestors of multiple taxa) occurred. We do not try to infer how many taxa existed on a line of descent between a branch point and an extant taxa. In real-time phylogenies we observe exactly how many taxa exist on this line of descent and we keep a record of them. In practice there are often a lot of them, depending on you define your taxa. It is unclear whether we should include these non-branching nodes when calculating phylogenetic statistics (which is why the systematics manager lets you choose whether you want to). + +![An example of a full digital evolution phylogeny](images/FullPhylogeny.png) + +The above image represents an actual phylogeny measured from digital evolution. Each rectangle represents a different taxon. It's position along the x axis represents the span of time it existed for. Note that there are often sections along a single branch where multiple taxa coexisted for a period of time. Circles represent extant taxa at the end of this run. + +### Glossary + +Some useful terminology that might be useful in understanding the documentation (and especially the code base) for the systematics manager, particularly in light of the fact that different sub-fields of evolutionary biology tend to use different words in many of these contexts. + +- **Taxon**: a generic word for a specific taxonomic unit. We use "taxon" as a generic term to represent a node in a phylogeny. For example, species are a common type of taxon to use when depicting portions of the phylogeny of life on earth. However, sometimes people choose to use higher-order types of taxa (e.g. genus, family, order, class, etc.) when they are trying to depict a larger swath of the whole phylogeny. +- **Taxa**: Plural of taxon. +- **Multifurcation/polytomy**: A node in a phylogeny that has more than two child nodes +- **Bifurcation**: A node in a phylogeny that has exactly two child nodes. +- **Non-branch node**: A node in a phylogeny with only one child node. +- **Leaf node**: A node in a phylogeny with no children. +- **Most Recent Common Ancestor (MRCA)**: The most recent node in a phylogeny that is a common ancestor of all nodes associated with extant taxa. If the phylogeny is pruned, there won't be any branch points before the MRCA (because any branches not leading to the MRCA would lead to taxa that are now extinct). +- **Coalescence events**: Occur when the most recent common ancestor changes (i.e. all descendants from one side of the deepest branch of the phylogeny have gone extinct). In the absence of diversity-preserving features coalescence events are expected to occur by chance with a frequency dependent on population size and spatial structure (but be careful of distributional assumptions). Observing coalescence less frequently than you would expect by chance can be an indication that ecological interactions are present (we have discussed this more [here](https://direct.mit.edu/artl/article/26/1/58/93272/Interpreting-the-Tape-of-Life-Ancestry-Based) and [here](https://direct.mit.edu/artl/article/25/1/50/2915/The-MODES-Toolbox-Measurements-of-Open-Ended)). + +### Quickstart + +#### Installation + +The Systematics manager is part of Empirical. Because Empirical is header-only, you can include whichever parts of it you want. To just use the Systematics manager, you just need to include the Systematics.hpp header. Note that the Systematics manager depends on the result of Empirical, so you will need to download the entire library. Currently, we recommend using the mabe-systematics branch: + +```bash +git clone --recursive git@github.com:devosoft/Empirical.git +cd Empirical +git checkout mabe-systematics +``` + +Then in your C++ file: + +```cpp +#include "Evolve/Systematics.hpp" +``` + +To compile your code using the systematics manager, you will need to tell you compiler where to find Systematics.hpp with the `-I` flag (the below assumes you are compiling from the directory you cloned Empirical into; if you aren't, you will need to include the full path to Empirical): + +```bash +g++ -IEmpirical/include/emp my_source_file.cc +``` + +#### Usage + +##### Creating a systematics object + +The first step in tracking a phylogeny with the systematics manager is to make a systematics object. The most important decision to make at this point is how to define taxa in your phylogeny (for more information, see the "flexible taxon definition" section under "features"). You can do so by passing a function to the systematics constructor which takes an organism object and returns a string that specifies a taxon. + +For example, to build a phylogeny based on genotypes, you could do the following: + +```cpp +#include "Evolve/Systematics.hpp" + +struct MyOrg { + std::string genotype; +}; + +// The first template argument is the type of your organisms +// The second template argument is the type of the piece of information you +// are using to differentiate taxa (here its a string because the genotype +// member variable of our organism struct is a string) +sys = emp::Systematics sys([](const MyOrg & org){return org.genotype;}); +``` + +There are a couple of other decisions that you also need to make at this point. The first is which set of taxa to store in the systematics manager. The defaults here are most likely what you want to use, but in case they aren't, the systematics manager can be told to store or not store the following sets of taxa: + +- **active**: the taxa that still currently have living members. You almost certainly want to store these (without them you don't really have a phylogeny), but can technically disable them by setting the `store_active` keyword argument in the constructor to false. +- **ancestors**: the taxa that are ancestors of active taxa. You almost certainly want to store these too (without them you don't really have a phylogeny), but can technically disable them by setting the `store_ancestors` keyword argument in the constructor to false. +- **outside**: the taxa that are not in either of the other two groups (i.e. taxa that have gone extinct and all of their ancestors have gone extinct). If you store these, your phylogeny will get very large very fast, so doing so is generally not recommended. It is occasionally useful, though, so you can enable storing these taxa by setting the `store_all` keyword argument in the constructor to true. + +The second decision is slightly trickier. Once you start adding organisms to the systematics manager, it will create `Taxon` objects associated with each one to keep track of which taxon it is part of. You will need to use these taxon objects when adding future organisms, to specify which taxon their parent was part of. If you have control over your organism class, it is likely that the easiest option is to add a `self.taxon` attribute and store the taxon there. However, if you cannot add arbitrary data to your organism class, keeping track of taxon objects can get annoying. For this reason, the systematics manager gives you the option of letting it manage them. To do so, it needs a way to map individuals to taxa (since its possible there are duplicate taxa, simply running the organism to taxon function again won't work). It achieves this mapping by keeping track of each organism's position in the population. Thus, to have the systematics manager keep track of taxon objects itself, you must set the `store_pos` keyword argument in the constructor to true. You must also use the position-based versions of add_org and remove_org, and make sure to notify the systematics manager if any organism ever changes position during its lifetime for any reason. + +Once you have created the systematics object, you just need to do two things: 1) notify it when something is born, and 2) notify it when something dies. + +##### Notifying the systematics object of births + +You must notify the systematics manager of births using the `add_org` family of functions. These functions require that you provide the newly born organism as well as either the taxon object of its parent or the position of its parent (if the systematics manager is tracking positions). + +Example of tracking taxa as object attributes (assume we're building on our example above, and already have created a systematics manager called `sys`): + +```cpp +// Do whatever you would normally do to create your first organism +// Here, we're assuming we can just call a constructor called Organism() +MyOrg my_org; + +// Notify systematics manager of this organism's birth +// This is the first org, so it doesn't have a parent +// so we do not pass a second argument/ +// add_org will return a pointer to this organism's taxon object, which we +// store for future reference +emp::Ptr > taxon = sys.AddOrg(my_org); + +// Assume stuff happens here that leads to my_org having offspring +// Here, we'll pretend that our organism class has a Reproduce method that +// returns a new offspring organism. You should handle this however you +// normally would +MyOrg org_2 = my_org.Reproduce(); + +// Notify the systematics manager of org_2's birth. Since it has a parent, +// we pass the taxon of that parent in as the second argument +sys.AddOrg(org_2, taxon) + +``` + +An example of tracking positions is coming soon. For now, feel free to contact us with questions! + +#### Notifying the systematics object of deaths + +You must notify the systematics manager of deaths using the `remove_org` family of functions. + +As an example (again, building on the previous examples): + +```cpp +// Assume stuff happens that causes my_org to die + +// We notify the systematics manager that this has happened by calling remove_org +// Note that remove_org takes the taxon of the dead organism as an argument, not +// the organism itself +sys.remove_org(taxon) + +``` + +#### Taxon properties + +Taxon objects maintain the following information: + +- taxon ID# ``GetID()`` +- details of organisms in the taxon ``GetInfo()`` +- pointer to the parent group (will return a null pointer if the species was injected) ``GetParent()`` +- how many organisms currently exist in the group and how many total organisms have ever existed in the group ``GetNumOrgs()`` or ``GetTotOrgs()`` +- how many direct offspring groups exist from this group and how many total extant offspring that exist from this taxa ``GetTotalOffspring()`` +- how deep in the tree the node you are examining is ``GetDepth()`` +- when did this taxon first appear in the population ``GetOriginationTime()`` +- when did the taxon leave the population ``GetDestructionTime()`` + +#### Systematics manager properties + +A systematics manager object maintains the following information: + +- Are we tracking a synchronous population? ``GetTrackSynchronous()`` ``SetTrackSynchronous()`` +- Are we storing all taxa that are still alive in the population? ``GetStoreActive()`` ``SetStoreActive()`` +- Are we storing all taxa that are ancestors of the living organisms in the population? ``GetStoreAncestors()`` ``SetStoreAncestors()`` +- Are we storing all taxa that have died out, as have all of their descendants? ``GetStoreOutside()`` ``SetStoreOutside()`` +- Are we storing any taxa types that have died out? ``GetArchive()`` ``SetArchive()`` +- Are we storing the positions of taxa? ``GetStorePosition()`` ``SetStorePosition()`` +- How many living organisms are currently being tracked? ``GetTotalOrgs()`` +- How many independent trees are being tracked? ``GetNumRoots()`` +- What ID will the next taxon have? ``GetNextID()`` +- What is the average phylogenetic depth of organisms in the population? ``GetAveDepth()`` +- To find the most recent common ancestor (MRCA) use ``GetMRCA()`` or ``GetMRCADepth()`` to find the distance to the MRCA. + +#### Phylogeny metrics + +Many different metrics can be used to quantify th topology of a phylogeny. For more information, see (Winters et al., 2013; Tucker et al. 2017). + +The Empirical systematics manager can calculate + +- Phylogenetic diversity (Faith, 1992) +- Taxon Distinctiveness (From Vane-Wright et al., 1991) +- Evolutionary Distinctiveness (Isaac, 2007) (mean, sum, and variance) +- Mean pairwise distance (Webb and Losos, 2000), which is equivalent to Average Taxonomic Diversity (Warwick and Clark, 1998, Tucker et al., 2016) +- Sum pairwise distance +- Variance pairwise distance +- Out-degree distribution +- Average origination time +- Colless-like Index (Mir, 2018, PLoS One) +- Sackin Index (Sackin, 1972; reviewed in Shao, 1990) +- Depth of most recent common ancestor +- Phenotypic volatility (Dolson et al., 2019) +- Unique taxa on lineage (Dolson et al., 2019) +- Mutation count along lineage (Dolson et al., 2019) +- Tree size +- Maximum depth diff --git a/doc/library/images/FullPhylogeny.png b/doc/library/images/FullPhylogeny.png new file mode 100644 index 0000000000000000000000000000000000000000..af33ec5f4751a8a4d49b8d5a0ca4b7babf15d181 GIT binary patch literal 74439 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

LLvJV<>ugp!{DYy{7b;a?2+wq~u{ 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

-;@a|~ltLPBtTJVCu(!dKD?qC= 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�hTg{KCotvuZ;@-I3Hg-wV!cKFU~sCGvhHN9=QAY%m#-^N?kp#atjkzb%@nMMPeE_hwyr_%Q)Me+RF@ z^O3m5;HHYCwh;;A>w?p`Oci(ZUv)a=yO^)JvA?DF<yo1QC;Oy3$Gr9*k{UzC3t+>F z$kX;?O=1x2dOUVhiXeA*?N^LXCVDj1>3626qA5eNZjJLo%4?dOgM(ZHjVM*ONCk8r_jQf~Hr%Jo10x>b zkt#z`o5@M){9s=^-`q%$uxag(-@~XXFK=)VWoxi7fp(jTNyeu&7zHq|AVM{- zALgL^LKS6M;Qzm0v3uxE5pbiugbe|TIhs-QjdvF-Iq-&3{rpa7kL9SIoABJ&w_E|H z6>J_{p0nz^M;SmH24Op;5Ekh@b^U5(nxx#@v#hUt z|C|xeoQ<4l6dzZJha0NW#7O>qXP+dfiBt$9W^g@HY5_E42v^A&ra2^=41Qe8X{IFikY!xTt4qBeljzbumoJ+W zA%HdN^EO!YtU zu3Ria%V3R&9mQ!kK#Nv#mCQ+jYYZH5d2^Wa+$q{CKR=F*ZaV z7ppdO(fhk=m)JUHJo^_vx@ZS9a2lg}n z?e7kd-$1$xe9QbDCA@~)m(DU=Iy)SAC3CV^lauz~{mSo9(QF;gZzu!~D0JI`lY$^-Bj$RHd9~l!IoJ!mAd5-R5&uV5kZXAQHNaCO1 zN9E3-{WfwEuYg+c->|gkIY=yILZ?7_=rtv8J-^Y}k@pu&mi?9LKEFTR^~!SPoR63= z2H7%*6uqL#VZl!0nd_q?ytE==r!T{6MrX=?x+cA2%|tnFCU9hwH&nXQ%tLP{%J*@C zX)R*g9)B=Tk+xd$Xw~8=U)dCZ7Z0PibX{U%~wG;*BZ9+EafS?$@zps$y>=Qh9W z3T@P7U0Fnwgm~3`)@wC<8|J80kjqg2eYH|^*9493S>cZC7SJzkH)RrC8Yg3Q%)Mji z0_QeGaD`Td-VeM(Ife~=o9@NU`&@Olfm_?1PG82*FnTL#QS%90P-4rCKdMN$#&*T zF2XmiXdAIFGfVOo2J(fJ&Sq53u2r~57?W?$ViwA$9ChB@=}iu(5y%lRE#9>; z&)K=`8@mL3>EFIRksMo_R(5A4SN*1a$hw-{cqW~r=_8d+hP$V_`p5nI)enm2=X1Jt z=i1p9Td+HVi_gz57}f72gVLRys)Ksqr!W6rps%r&x81ZR#h#bCL)HEs;a-FCRBz{F zz5I!puKmyRp$i(L+G}f^Hg(BiE%h3G+rMW+LA6-7TyIn&4X2oPe6U!6;8WJlWpnH0 z-TI1h;e%g|K>~OF20C~RC8P%Gp{#g#C(0xrK2QN2UW;=&-S(y-Bcm6H)Ft^hYlbfZk8q$OX2McQt;>a3wS;Cb5a90l)1g@W-(QO7E1(&8zk%RyN(c{_;QIBy zf7x*Ue%s&wXdrGvU4Acv{`6(_HuiF%$!_w0XTxL0V|@AdGa4uU#w5^+g8w&+_WLV4G;hC^T5l)`@8(W;QaqOK?C-T4#)NtWz$<+xU))1$UQ6& IGkEcT06ndyd;kCd literal 0 HcmV?d00001 diff --git a/doc/library/images/phylogeny.jpg b/doc/library/images/phylogeny.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3652ff4d6abfb6a00d514ab812f97ecdddf99aea GIT binary patch literal 39648 zcmeFZ2|QGN-#)hbDf7_!V&D%q1nmN{)GWI`xpvL%VhF3U{z z5VG$LgY22Hj#73ty-~qqE z+YyNK!ibgJ*I+}O7y0cq_usb8E>2gK+-z=Mz3S|C-Q^bejVS@*McAZHS2}etzFN3&HWJW?%ch=-?gjx zS99O-ul;a7B7|43h*%N9%d;J^LYRkFn1@q=K!P*j1J{9jDgN@qvx0Xe-zsoO0)pTT zxf{UY^YX3$2g|n-oH&m!_ttcp4sotOBkHj3NQyN`MKxC zv%&*xyuvH_w(VOba^yV!C0Ehy`|qt5I~p3FS-M76)rcy7`DT;AM!5q6J80Zf`*CLf z+=<=)x6bUZC-&QUbtBgD@_@EOW^TS-xG~f1Mn{;ezU&zh@!-hL8(5>G)v<%GQLHP|Y&4FQcAkS+*~vkK zQ>Yl`BAIc_6_YN`L<-wp*sst^J?L{_hs=ffw(o5j-@o>mv&u`gl!7ReN{&6!A*pMa zx*HR(yiAnvR@^~z47-R7;~;3^qI!WIEeW*hTl1eyS`DZBP7NP zQzi$|kN=Y$#Qx^}NZKk6V*IMbGzW1XtIt7Ho#i0fJUNKkT;#9cg-I7X50f~E)*YxK z7y(sCaS*8yE+lx(k_rbQsmVc@3~~?(tJhK`O}aGi`NnL z0Iq#!&p}*o_es~pcx(2!(bC}knnGU@7df-$^3iv3eFlhlti zgcHDVn;1@f!>axECLFy^h*1Es-k~Sc#h?l!4&u#bj0X!G?|EokA!U9RwV5=y2Q@yx zLCj?8vaSZOEm5$k;(}=)in1GOU8lmm3~xyD;>L_6{1Xf<5;=c^gIF?4{Ob{kGZjxD zX=0@DRZ)E$1OnBHVFaeKeHyC>zkW3c3&~3y1X_rLhzMjyB;e?Qn0a1(?i3=&RoEvk zz(m_YnUqwxZL@NW>zzBU%%3ircOP#t)M~b;Rj;*QV|z_Y;qDqaDuR$s>JKO9TW8X4 zdqe(S^BKu$_FhhYUsF^b5#|Gm;zoVrZ&!U9wHOxhTlvZJNVS&lB_^2YngZ5O97LuI zIFM#@#aRrz8qYz<`$8PV<-QI$B%fgS&C_|?z~r^<#LZ&ECmXc#FLq5N6Gz;K?%>Z8 z!bdjQA4ofW`ZX@bN;zj@@jI4q{)9N)j`8&T2{FX~^2Wmr#6K*ur4wMV-@g)aBCUGv zto+qru@jwVVhsDalJCGKj3P|D=dkocVNNCm5Oo@L(>EfV$!0JgJ^1>XPp11u6g@G6s+gd z(u6%jU%#D$2>s6A2HTF$i=D@W_$OFST{FQVXvOB&X+YqO7K3{2|{`lHhA^Lpy2SS4oefxKuI-Y4s z*23A>`W(8oPx|vsPDATVB|lCld_I ziU>m37ScMF*#)~e6xC{WZ^I||G+WnFtv5a)JpCbUl*{`q%K~U`&g#4mV>OL6eSYr_ z`I+vY3xiU7o6dFGn=+DQoYE^agl(lLHzx3JQqw-$rCjr{X1w|nr176Xp}aE~cugkA z?v?$d#c9%*pE2zQSJd8}bPUK{bQ!Vt8K{~g*rVj|K$FR2(v=M;Kq>G(uQXOx@`ALQxkJ$>qYBb zy;>5Qr&Zjs>ZIBcE3I{2F}l-V*j5>~6vHYUKWj@1v4cVu^MuOPhdmU>y&jszS2Hy` zops9PItCg@90cDQb}GqX%E&-NmnQKW5146bFO-)|7wf;}i(q$&e#WDww-OR?E1Jrc9UCPCu=;3v&x|c*!SPbM zT@v=8k0Xf6Ngn~ag;>+|LjTOc^rKpDE0eko+;HX~?CtWD$qP?WgBWq_7Zmk|L?!O= zzFu>>ihdIoIX1f@?SKP2{>?5eDE;Z`YMIa#nwuA0?jxzrw*GVYog)+^PR-!jS;@&9 zP4{d+!^JbrF1DB(kFXI75+8ANd5==4tMHo?L4eMGBEL1AYJ9HPlvsQco~he+`zX}e zt^GDJc)+oUE;jrqdP0dLrNW8`$SF0V8;8%rq+>JagK)chC-m>AATf-|agzdu<6jwq!F^jGiETH0-n)$e(0Ww+jVCLjjIzPC}oVC&t>+ z2aCduKWtqU=Tw(NMDQZ`03{Zmm_t8!>3U6LuPcr^Abr6mIX#5k=X^{25`LR%y{>cNY-g;-SEzJ9>ADb)rEf+{nMTZ@ zr07^-ZuY5tvo}Pn*a6P3Y@)AtK~o0QyEtW3aJSFCEtgUGhK~E@`j9Sl-J~m{1bujW z!~VBuE)LGDUd1SpIWYd+cY6}mi9Wl3bX51$XGM!tHdh_0I^2Dlal4K5 zg=sM`QehxLseZ6W>)1fwQL;(X{6SWo!*j#hev#E9PfPEu+_K@w$`y+CL_k39tBo7m zqp}RhF|I2o_#ZhZ;%b6wL)2zoIr0g-^7&kyV&pKfnN_D#mw5NH;?I=t@jJu4dy-j= zd9|51i3cfV-!x=8)72!MKH3tQd7~+?R)*%i zX!g&9nrZsZg+w_HB5(SENhIJozMaB`tUHz-ylRYc06-&NU;Q=N68TOqt#fi=jzME$ zWr4d0jfUO#19!bz@w-hZ77)7xB=tPB4qGa-B0p@L%yg+_P*4jxA-Ej9d_=t}v{K;| z@~c}}h-B1^VI>E#iFAFMt}qfJ*PPyAO*1IIsmMXtjGgz5(rvkkJsBRlxqn3D>~N8D zdLvySFNZ9J>VHjCXr3laD}6rf7kTeG@l>RyS^L58`<7cIJe~%-yJ2$4ygGbz%z`W3 z_BCCOiH1n_s6otsAMBmMTwnE?0jsK=-ToC{ypcYxTRs zmuy_&rs)OwQUYC$A3zl9rAuMR72WhO#-3{v6(V^FSE}C`GI6#0Fb3x_vd>+wIRv?M zo7&yR6_VD$9tZ7h(ptY_Zu_YS(Ou3`BO|0kB2v2SBKHRCy4bBK7lTfmL$LU)5(1Y- zcJ_6B0uXzvz^;V5f49*|u%Ne-GsJCK8rIxv7=5GNAR%Qi1I2 zgk=Ytv;cz$eTiZ$kmgd6kLiH#Zr@CvXJ8m7_9g@>&So!sO!%Yr#!K~B_*RsSp({)W znhccKkp@(9r6R{nRG+)fOv+R1u{3o5^iEX#Q}MaK+Q!`z}(JL)+)e@qm6MC(l0anfjhI2 zhoCFIKb2)AfX~o#uL$EujVl%1MMe0!W43ZBB5CMLt`JkwnKXAI*VotFHSfj3Zpb(K zMk6cm4de%i5@wHg{C}8}@DB^IL?0X_=CJcvQgV47=c@?5QJ&@(pm^C62ceu$xH2$O1RVvhz4I8yk2+S=`s913(8FL?*Z_7$fsl+TC z?1m01E)q${2XTvM_}SjfSa?y~g_oJ~W8qzD zz}C5TzK7ixB76Y5;Vag^gR(^l`o1-f2aD) z=t>mTlC-2gEdZ!!EuNw8ig7?!VyKpPQx;sP8I*EZ;lijY2ceuVKFmyWpLCc8Ly?GBrLt9|S^+j5IM?J|yafUWUA&117X_yD3 zd}We0i6!n2uYpnJR|gD6~4fg8ve2h8*zL7 zd==v9${1FRhaWU~)sVfTfRLL;`TY=~AGx$^FNwmIoGms7Wgrm7zg0)|KPJyyzZk#{ z&c`secN2+(r_k?*-W8Bx-A)26`|KvLR854afIKS>8+!iP(fm)1vp|x&?>yGA0q*&_ z*7p9@bBkSj9`XPI5%bPuS;>)se2j)$QlON2?*h+z1?iePcb+~ou?!gp~8 zG*(3+nLGT6-a-0J?uc6n{Z8$8w_GH#Hn59O!%8{|AlX#4ER|wP=II(tH@o-XqVieM z&OCWzUIid(R5yNiq!s(p;6ug6cG4ZiIb{uK^4FY*{52=W{Z}~=qFUZr3uQxouKDoE z3*)aih`RLZbl+5r7|7?K;12Z^D*`C50F5bC`a(QV&5>UK=1WTBk{B8Q%xo@~eOklZ zHokHStenV+SG=&9g%`Rbmzx~_&rDeuxLgLfB^?z2eM!C`A~nPrO_&H2^{jcaOOHiq zPp)5q)#8Uo2dX_7;?;}Kgg$qS=VJXRX9#~I-{;?R%{yTZwQxZQ`{*wO3jF#bfhr~R z;E$EyVF425MPhcLCp54(SLbp?<&Cw64pk{GMv_)T&f31|00ySX?9QKc-+=^knbBI* zgWQQ6=xOOuW0qjzU31~oyCfD9z!Z=m{{mAQ4gaMCIf$YwMTK(^Yo`Yw&B+*OK=zDp zVto%j+pwi>1Z91giSD=|l?VAjUqQxXnG&9LSYzI*K)(l$m>nP*Bz^GoEA_`}n97ax zQ{PF0zh&cn zL38VXUN#`d`(kOBx9&?Q5T0MNLR5M@O5f#2&TLpDD+JVV5JwB<&neE|Cmo^5o~Z@0 zx0TXD5_Vs|1M!3fOwvz>D}NA&!G#;kV0d2Yu?0X7pXJcg;A$zu5kBnVa%r>a;2^sN z^d+r1h*NPHSE)vG9K_Zibfot0Xy4z`KzcST7~tH2$`0@|Ib#C|;Os%nl6%4Yc4Eu2 zq<}Q^s*HmOnzLhj3DR!j*f^wS&`6> z9Ew@{8&awM48A9!af<1|vNxmJ<{@G{HF7*PZ-Xsg zMt*yi+K|+C*nY;jMybbJ4r>nm0cE1#k6#bB6t81i(dE%?%Cfnc%rox~WU03WH@fWE zWj4oqD=5r!1?gwSIg|*6gUGQnOnjX?_l#8UJ2C+CF<1`Gl$?13Px z(uCKn#Lw&^j4={z;MD+B?DTsBb=HB7OM+6`#P|~bGJ|zbKz{fAh1=tPI5!k&T)7)UmzdDcy zub~oCDUwkN%JXaZp5!xY6K@4;Ki`%ysc!L@z}lr=G)Y{HpL>DgA32m9$1k*7ej)uj z$f!nHEW;0J64glIVidLUlm@)LFY@{>RZHwZa_)&x5~D27~B{G|H_CO@pFHgExr4eY?o%ul0z+F?6Yqutr`~GL9HIB zFJ6Ep431SX60RCgesXer0OcNdAm^R1S0|S`U5UbxH$nZ0paw;XA< z*=>96@EWj7%Epl94gRKEoNqH5$W!~|zvhH!s+2lB3<6r;iz&9( zj&XNm3RZNWsBT*VO`LHdHEXWWkb~d}b|yA0wSkMZMt0D}AL6^!XK|K@tLSDIU!Av7 zXhuaN?yTsYkGb9-yaIYC6Tv@O50-)|EoBnU9M##GA5(c)`o+vj4Wmtj$rZHRD_g@P zm?7);BCf6=ol~sAqOcXvdf>R|k}K>u0A)>xD3hlQwBbgNNwfZU&&QaRj_V^PfA%a3 z*^X!xI(zNvD95X_A6?cF7*=vKt zEMbtJCEQYZk+;sZzr@>+w(fn6g?`h5X8dUUhbOoXyXOef56;oYm{RpQ8o|Z#4uUr_ zo+!uG$9?p_2a4=`MnKsiYt+};eWwAAQsN+V!RjO#m*XB=9tkI&-BFiZOBx>5CTVQs zAg1O=vBl>xv3NmJex=p?y_VKQnH#>YM=SB13;bmnAMZU|5m8 zMI$=7!_Ot@<4mrnPr)o%bldfhiMUvb$r#b*aT*EXd* zIv37VT||Cmcg%$AJWhB!+TDkLH22Bn7PHP`Li1kX?x|t(%TK-1c5j8n?TMH5Qm*+< zUP=0p_!eZp&?A2lhWM8u1!b6?fD@T9us|y1MN&!hAs|mE=jxb+hs_2hW!u^4PCK&+-18K2v2wqIC+3#8R_?42`veS`5+7Syv6w}L)j zEm+!KD!DaVU>>3?qi|~aH7wEo31klYUSbTo_&76M=lHo1cCP^k;mbs)LZw_Bk6X{$ zMOR9okAH7aoZjRa-7|%8c)=@un7^Sj0a27uB64mKR z&mEk4mKEW3q!zSs$R+4#xVxC}4JL0m!#2c;J-`kCr(`jGe3Amyt}>7zbD z4x(^S_6xe5oVmyn-(OCNOS2sy$&@-IOhlc1-#xzfsv}_wRlHQLVra3($dF1E>bOY6 z*-_T*_f}+Dcu#01?W^ajxO^(vxOM;gtvDM@G?{8d=p^XV*JO+l<*3g@j>J#QYKe@E zOSV_t(C`TeA1tQK7G)ap^89P%~XmlSVKxa~UL%!CbcSTAvPZfB(%3bqTW z*6drKu~EsbIWEtjd%W9uF)-+&m73dJRUnmXz4NHl)~AprGvj+5g!XjDh0WNx)hYYb z96x@?v1=$lvL?*ysiD`R0INs(VVs1p)`7(b4&TSIBhRi~m|ZKr$9>23*1#}BcXw}; z+Iyfe)Ou|LDTu$HJoR}2tcLk%vG0Y&=BNRcoTZH$(1!wuG*;ST7>OU{>>_Lrk_^>^ zEY?%)dqM^4korSPrnlhFIK>c^3&F%hr#gnZJabBPO@beH$pDhuoK z)@+hqiDOb_D(Hw-F zx;YFiKlyRlC&bY8$S2DxDn8!e;zon&C_Df$g@oAh(Zn(W4(iXw%pBDMi|o<>py;#c z<{JM6q|HBCHI$dZE? zEl?b{uM32RTpn={qKCD#!8f@8=5I{_`P`Ggi+fC5K};nQn@!T%0>!FhJ5!`{)hE22XGDE=Y%XScv1^%V_H2QuSVL3aJf0_>}u3mQiQJuPi+?r znn2!w;L(hT##VQ*Z$1D>3fkACz?Tz(K zRz?l`k!V|asf2Vz8TE)C^!&g;gyY-$@HohW|A8i+&}S4~Ie-;~TLtC@!9k22k61)b z$^tgxLhXP*ZX`4Kd;nD7`vT^J)=y?4knCMy#6k8$Xs90E4E9;k!$JH+c>NhQWOA&7 z)z}59`6)*N3m{P!?Q38?yg*4V$IArhi?E;?h&@?AhZkg!3_~?vKa31W*4Icw4?Qt( zc{#B8eIq3G0}t(%FY|0kDsd-Nvo9F5GXcE{;G!CX7w_jA;h_7(*Mvx@|0#aP z-UGED1BRP!pj+FbfGYNhEDZ0wXeYYKBsEyf{Eae{ErS z|JuR;EvMzW73fb8^@QF=Oqb|6#m&_mgt$_NU@Y_|Z+<7S_+7y-N$Kx(aonxtRLlR) z7z>Cp_Xq9rCCJh&nM?W6KNqf9nXs{%aXcKId+rGYjzwOZ9FF1u1Xf=Xsd z9E0_%A3&1`XfEM26Sp7?CQyS87S+#!F6{E35M!` z&lwQMHj>;Wnk?%EuUP{EJ;e=VuL(R`g3s3gvj+sjHq=n-cW6=@j3@LHQqz{O_0Y#+ddNotnou&SM2ROzv6YC z-#2uZ6?4;<9fiQE{e#AvxopmPu-xcXpi9r_R6FIl3wv08_Xq_)|HJN$YuL#sKNF*J8N10}&0Z+Jf z$}w;mqw*{ayKat|9K}ubgx@<1Ap4#Hc*h`>km4{5aP_STSLPn8{pDK(*(Gi>@t09; zEHqwMZ9K*s;#^iyALLOp zWn7FD3iSt03&Nke1H!k2g06d%rDnh((Ek2ma4>hxXW=q2gV$nJL8I?2asY%sx=v>F z&-%ar<~Yw%z&|cnk5K&|OzTnA5WmyD;Op|!r@+*zhb&8` z5})e|0L#J)Oc+x`oJ23pBGFLn;`u;Oj<2w;ESEtQhg9f$+-ong)=`V}T-JR&JSuf% z4_KwTQTS&MFxDNPFjTXNXSsB#f!kqUrS7_aQU7Gd1LIUsyH^pzL1A@0)-h*WPLBW) z-k{1-1TlAVnkAw$;0#?2iaceLkC~bX&Dvi9r3El6@a@D`geX#f=%Sz-H{y;-1BBsX z`6M(_5!?ndEdpI+_-9gZOH!9n6%9BcARoqpY}io%){6C-1#aG1PAe$I^t`Si!vZyw zsJ``N`WdD5Yu^f)Y1*nW+c5F8YUXQRxC9Q>wyf??9)r2FI1=z|x%|u>6Q>!nBvfF7 zqB7FL{uDT@7v0@Pb74uW;wxas7AvG5xFJN>+wlEH#Sh=qIRg-Kb`_g2G;HwFcaV)k zPe6ukoAK1+(@O`Gj=@zH1hz2f*P}m?s3$y4g}S89nM5B70FkD9b5%7X$YmPgF!8ny zSfKtWlbS6a{ikHlKM{GC*;nXuBVBo8nlhf&Q#!G^M}2B#__v;FP%dzf4{tQal@a^c ze#3Tv#ghZp_Z(CAb3EH7pfmmRLF5q(n2J)@uYB}r0B{Z;N9x$ia#KGtcf_BI2=L-pF36k4pgF9+rdlAW#?t!)cdqS zGJQ`6>nTnUU^h=_Osj1!76~#^vRri@s0 zcbZM|%bx|o1%p;?sDbwa`#c1%ewRs@40?0NK$gJGS%rLDQ`VJ^4)+-hOE_+h4A&Gs z^dBFeg%vbIzgezDF@mrwYdI&GkN{lT~hy4QVT%!7b0h@ zwWI)|;sppt1l0!%)dWz=kG^^Qz^evuXA z{O-f&gG>1j80hI8zxVw81;GDTp1(hO`r4Oi>5=Y2zqa%mXn$$xbpjysJFRkg{SsP2 zUM5x5AN)-|i1-i42STu5JfIeXrKAM}igA92Z#8o@sOm8+z`x$}<-_+d>!H$HsG(v{ z4frEJC^vG10~*Sp@IIkXfwLQ2O@qem@WptnD(a1c7&F7Ruc-@3ppb;}Z2 zZa4Uc5%|*1c;+Fxx$Je5sESAAk{8>Nv4c#JqV+rRdNfCwY-?3yufo++$N zt!5SWf^NPvkY1>HuuBtOyYe<%L%@>Xs)Mdr&~3v@OgVeuPhYa3GQC@FThg`zPL%gO zDUk7v2q5VF-KSfypQ0bAs%o(0@-4&hTpydYsg@Ho)oa2*y!^#7YO(Z-#qfVz7RO$J zN^dH)yM(|(eOl)Rk7ylqhMMK(RuRc;KMC7OcWUpdwW}UD?mvtS`!@uszXA6Dmj$W& zqtz{`Ja-xoRU|&}B!W1LX174jA=_G=H60tN; ztH4vktkyLjx>g$cwLDC% zVph^-#@P)3K2!=}n(*r=Mx?biqAh&@HmUs)Hq8pLM2x;E61tqn;`8+{zz$E3us|9m=4wHkI0Tw_ zR;ga5%4ble`6=3}_1Gzp!W_x}s&sAzE-L91lH0=TmWw{XK|BoIYZH7*53sLOc-(d@eqf*O1h(ls+fY%!KQt!$g4)tV{m|uY;lxY5?%M6oz^t!Vh)D_t>W} zb6N0VVG}Q8|JEw~BY!S2U(RT$Y@JTw3rkYqzUfM~;%zp=P4}I4cSVP5l=sTG1pymf;)6<4AOIwrz$y~;BwnVIFq!M?lImdk;GD~bzJr0^rhF)I2E_H7MqI4D+zEuO zG@Tf?{naw@HgX}i-@Y3+$GwtF9kh2x<+~cB(B2QcsAekMH=Io1-cP^N_s{V6zdQa< z;r2(Q{(=P+576Klz9`=FDs;9sm8(WTo`Fp71@U7NlOEK*v%MJ)9M`YDw5Y8sKKJ3T zl7xzQ4fLk#B0S5*VrE<{hO6R&pB2B~{?B1CfY$O)#>kPVrbw|*o5?P$of`vI-CEZ! zQ!z3}_!`I-3PCb={sW!C2cnS{7HOtYgC!RF)Zy3RHa5wUXoyheq>KJtwpF`5t(wbpqI}9jg?_T)_;qfqqlXGNd136_>^G`}BFV;mwnK#$MXwSH!6ru;6MU{Uv!l=xgV$nDVKOS0;8M`;yFi=j!r^4XY(Kyz3AFTW1!D-;it8@wc ziezdm?AaK0AZ;)3;+_ju42>vvd`j|})8@lIYqG8uqPzRoswy1HlM+RDH-$a3aJ8Q( zbcNd6wPF`5dadoE+UpbtQWZ=t56V3Y&z@`zU6RTGFc_($Zh`L|(~&L|W(DSTzg<@@ zH?kPx>)mcp%@R2_n6p<^#n18DRms)S^{>A%uKk2k#bg5CaxO|DyFl?~3pNvU&g3BN z#`4~*v#b{DC(w-iAewbJYH)P#EG&s}t|mks znxCG=WVM=-X`8YGl2VNvSgJq}`%I#28LqRB(4hk%ocmdtvkRd7#OqdI=m#DEEe9yJ zYws~nUnh@d(mkp}lPvlCSvfW&zAM$(wjYmlk#Lis4UD0lk(Rb{5RbecVAk2=y@04f zOMxX97h0>fnB}tC|ow(m^V@Mb5OHx=L8wLveyxJ~Q}f0aG=0g`?B{o4lKSvd zs*PZDExPpv;AG0%%P)^osI474)aR@mnPlh4R_d%{=+HcMe((J2rPq;!`r9ZQfaPEa zW%1twa|BKLW2U*!A-d@mE8EKM;~v7)_VyX}+X2J)kgcCl8x$4V#+q?z=DP?QE}thq z4tEwi8QMHZRtTHg^a1r@r`HbMJKpPG+9_35WcKuY^w*OMy`N;iN)J4}X3J1VHAx)m z&)9r2F3f_iQJ#PCS?4zAdG(oX{H-S+W(%clBg7V8q7f+7Q+{vtFL!K?OSMn@?5k6% z6(n_a%lGh2=MwR8rU&N-3Lx5KfI=!sy7W?>8-!TGrP7);i)}@!`!49_&n7On(h~lN$$Xr4 z@C<8v7AbPQJJ@Ywwd>Gn3%b_^p|gk2vxDyAshNr+F0+`Y90W!B#&>yk^+7+z?we$A zSV1hIE_+2S-6~1bh4?AksWM+m7jPbPDPdh z3z&a|?;dqnooe+BU*P9mzkSGZYa_JNAc<#k(zSDrkgX%g@}}aZfR%8Hz&~-jur2U? zh_Q^RzDLz4gVE5B0e$jxKgdBu-AMynM-Ud2hIH^$)v{@q17B1fUTu6* z8>Z8!vIST=KzB87mj#K7I+e-eRr|q%z<@;K2x4Pfl*?p_TMK-wLwh|m94kJ*!>0ty zP)JEM=<1slhTXXmZ3wy*g(vs84wv_Kw5s96pie!*&^KFjKsyIvN;L%rpC6iy=p+}i z2mzO3V54O?m)}JBOPjnS0e+(ydSxc>+m^XOX@^C75`_FhezLLQ3HFNeM*Db$wf|ZE<+d-PB&^v49;h>8EV_IS(W8Wt@5ZqvbdV)y(gE{-Y&Cdf!p7A-`qa3{#eMxjF%`@!9~u5pw_D)vinz{^f_mE>C$%Fvh&0yu zXik>t_FSTxNH%rHISx zE`&~#Za&Ud=?s7|gY_!qc_^x%r)fjAe)E(Rd*7aTv&+C;^jrY(u|Gd`)1=!3Sy~HV z6d|20U#)*CRoS_{yECq#4~{>k(TaWye+D{bNA=fT;TKv(8(MOz)|xCyh|2t=^U7VP zc>TkU5$x8>zXpLKQ8^-5&EE|J~f^-yR*CmRO0Nur6R)h8&98ADZCBco5fY4=sPf_E|2mw)(QDz%A>Lr#S5F2lD`xsVGPE8T6^d-dkoeKY0NPHiUezGX4=D=j z56#Q!f@>G`4%|Er=wXMvL#i=o3SVRd5^cb`F*v%F9hDJbbp_<3sYZnjLfq#S-UwxM zv_wRSX@2VrV1K*iiA^tmuEs%}{b9rVi$Q^VukbzXYVN(l8iG5Xa_<#3Ew?^OC=H&R8D`dwEtO})@E%03y|8KR}ki+ z3X4S17X!a+fygJ)lsE`G z{9~CNPv0GGn+rJD<6yTrluQ>@D>tri%+)l0IK%=xZwR+DKSWZ*C&#WWW+oUi$53^? z5~>J-P_2m)82Lwx6$XKN37Eq!cN=$3Z?&{!4}&2N8KV{o(t; z@$t=IXW#Z0xD~bqJKN4^B^6b=sbFqT`81<0meNd39;5xP;O)E#wEO|L(Q(BWR1NM! z#Lk{@S?`%r-u-s)WZuKcvs^WR^d5_ zBN;wddUu_5?c2#g@V0&$JxaV9ka*sDf2^qWSv}Q$T&GR{I{ef=TKj;H-hrr#&M~~> z9-pr6)L-1cYxU>#{gThK_YU3FT{(n}9*vg9`{%^?q6~BMGc$9JY*DA4lnvP-z2Z&3 zP_hr`Tdf4@bXYkB$K(}a%S0@)eMb1dq-+t&)&Cmq;d{$=Jnrx{v*_5PRO6V13xhId zb7-`4j}_T>>MGY^Nqon$`^f`M$$L;=l%e7wYy@)+iUGVsw>kzPmdFFxu;(KO@qHZ0aQQ$;u0i$f z!wj(Hur&kkj6b>MgPcfOs7;xS_~A}e|KW6*QDJSA@l=BO>6bFLnMW~iAvWzRWonW7 zuEOr~ZOb^Q!ylT=1`0L;w~uFp;*Ba0lkUJSJ%;KJ%RYvh%)j~NWTq~=$Zh7$R@=IO zw&!r}-2C#|u4m$z9;6w2 z=Lu26#YbiYZHE;;(z;1LigRZ{vAOljosj7-PP{Q9x%_xkj;7WRF2Us!VB?(yOu$;Y z7`M=nTW~!J$hi;G@gC1hbeg?w)fhaOI2|Bchj#ON#iy9W=Je zbdCBxCd6U|;RYnNM7FS?C0Av#M_bZj zNi8^76mTokB-p-{zzn~c)p)qHx!P4}kIW9YV_^$Ln9mF^QPbjTjQX@B z2SF5f=-fp}ODwx{0u>;Hj3d2l{6dAdP}|mRd+=cXEQVoh8`}xj;Dz2HdIm;^ocCWX zj5{;fNkl1hX42R6rys;lmvu`)9Tvxd>UDHg;ke?Ll<@xDEU~R6vd9_jXf4(7CU~RB zGvD2nSbu|ndk3`lJa9-DQ>Tv&Up)DoTn-R``?aY1{YtvuoN<-D$0rfyu*(A`sl&dlh!H?q$}46Z&D~#mk!R@yfJ=T z++sNEK-Jn!T_vItBWQYy9F7^nQ?Mvc7g*o}ZE#>}q-%cNZSn;NH~;*$oae`cuIq{Ed z$T_ZZExDPs^U$Y;{R&$0<#+0aK4qR2_d1$9KXGLWvN+@=U=F)QW;nLrkI=~qFto;d zJ!bAcaR>OWGijC3_369TQZ!swd&8h<9?Cxd%+!5~`t@OxMoo`I8?FA3+)?o*YsGcO zLKi)~YMX=XGU_!|r+1n9*}JA0eBG}{(BG(kmVv*wxXtW4B6R)XM@4xlBOpf zSLux>wE7II+(rd4GrTP|&))nzdf2<_G=?rn8vP+%G|)@z`h~jXy2cj`){!3Xu{i6m z_y4u`UQtap(6%W4pr9ZKihz`;Gz9_aornk+5K!q|q;~}AAyE;KE?v5S)Bus*2^|3e zsgck_lM+ZMAwbA~KleFj-+jm4PxtMPaUb%MjI^)Jwbop7&1Jr({oxPcgPzW;spi?U zx>FtNG&mdBj_H~c>dIGAY*8mMmS>R#BzMGyOHzDJo9$AN6#VjA zR(qi#mkTuB^3o(EJ%EbHlgx(S)@Lz&;2uXqpiPL===?9*Flu{_$o7arm?m)JiYZCE z7gOe7^cjlQ*E9wjNUoWxTxv3G)JeJfu18()BPPlw5|Ega_-VqEX)XVNul(vkjWO{s~bHPWrCw1D@P(Vm~tcv`$3_9U@{&#GI!Ve#ijQQVV zBPbxBNs7F4o?4kIjX}*eC(2A3;1C{rPU?+(PB+ zt<$LgSwU+Y2SdXf!0!NkCx}t)4K{PeL)vxK@%z|LG9)lCPWIJj79~R453Xyn%u)Lf zf4ekBMa9xJL3R>|BsXabb#;x87T<_Zi3%rz#0>yNssaRwPQQG)*}9IWVGjr^yxmvZ z3L-0{2Hw0oW}$8n3fxal<$JY5>kH*P`+MZIVGjW@051@2&AVkz>?qp$CZg0ss#k!So3G@PqOJlH>kYi`q@!2s|?OPk&G$vnt_&@kM~rAY+E!T;iX4bi>@ru?7BsVd!#vk4~evdJ9r) zzn%E|Ty)$w*fLn>1F>&wVSi+k=JP1cho@`$V<~C3L$`!_;VSLSq?R*Pc&7*qC@AdH zl~k8DL(}=jj&2+rRzOs{CGrIB-#9$DE6=gqiJW3030jj`5nb^5@!sWmGdk#f0*hR9 zea5&){bW~64W?=J^QD#R&@Bm7uk!BogUYMDuS!E)KBkzNA86+9PB#Y@p@VsJdBw7& zN7;sX{+w?a;3QvJEk;n24n&CVylT$S5xy{(}Pdijjt# z!KZ$JBNZsdb_HNmco~4HvLSLA=+WP@`@)&r|3d&_prnVb5bIQ6?JKQtF}kIZ?$lD; z($=UQaEGJMbS~^gBCTLsU=n2!Ota#rPtfmZ(vOo4cuGDtR_784Dm(nT_9v4Z7bRzQ zWVoq1G$wn()1)3ynFoLdJBhRC8E+Cc;^R!Zzk@JJ{>{-NjeyN*;I)Y4zX3l#dpY;) z^j|8n&Re*>t<|I>uw((XuK=#DLb^!)OVwe0!n3R%04FOIEa{!!*aQB>A{t;`oc{a! zK{IlDCkJ5i#ebW4gwzcWpMLqJaIo)MHYaU z*FgWk{}cx}QvPnyxNgk`?*y_fm-vXqT9xdjU_BaAPJfTS)4_uB#>~sd-!I?1n*KUZ z*H89wkTE78IPG;Q;S!IpvzEB7vAb0JWf9!miHGzcp=v;Q(7@g<3AR1vqxs_$SjX|; z$Kv(+M;7_3d<;8U?_zk=Cn1dLD<%mq(Zx|OA=VC#J z?7F6bg!M0SYm>Y}RXUIFSK1d;A1J3r5s;(+<4)_-dkftEQlS9StY-`$9gw-hf|-1gLaynyW4Ss3hFifCa8<&FnmlNyBLqcG8u8{7Y3Q zsxd?XyKx{gD(B4ra?*v| zL;^C<`*)3(e=U2K_6qGINC!=Pa;q``IU6K31gT6> zxQ(q3qnrI86I|<96aEwnT6i006oT3fSDC^Bz~JT4f&hWY3KQIgmY3h2Axe_P_t%;v zgqnEsggz+oe0>^Zw{cL3db@;Tl$e7VG61*r%hF)e8Fc~l@TPx=g1HVf%Sgeibciux zZ@S?OM!t?e|LD&Kx}kJ)Z1~n7;!-hpPo{~TJ@12#rNi5|4uB!nPJ0!q09WsB>=5p? z`c|rf@)$Yei8}awFU*J1vxwJ5vcWJ5G;IW#%u1(r(3soatR7QPV(Y|@lDJ-0W9Jub z8ved>iarH|0wNV2y>qnkK7V+{xz(oZ_jlP}=9?czre~T@9MptsV<&D4;a2T(vRE6z zAMw6x;XT+g-EaOe#!HxJ?G3&FC7nJKw`j4zxYv_+s<&28HH1zZJk?vA1x9P60pGLZ zkF8Geb{ts6*Fsuu_S84nz=!mVq8_}mBJ6hokOi>re1%Y6KKnK*4pfy8PJuS_x7Hh z_x5j~Ult>Ypt^?b4SjV$eYd1gJv!yG*WwHKGULw)R&?DpBV9+|T z`*rrnA>NUqY-NK*lI|RL>%73|2=-V#95;>gQ~G7m)22Xus{v`GtXZt$i`66DKA#M9 z2Vr$u7ZMhn`jp;Mq|<8_Ng8t7)2({8iIW)b_@h67Z2wgI4BVY%RMlgcen!V-@R>LcZeTcz+6DGOU_oT&0&M^L!=dPHbJUgX z)cUG)3$sNf@30rCiuSQ=F+4Fomi}bs17a-U0i5R!o(n@nlm&Rc_}-YPC_I{>c%RpD z8O#6WtK2I?uVO#F+eQH~snG>OB(v5*g*u>rI+PLMlcp_Nk!}~TW+s)gcC$`9WO`&^ zMh-FSbGY?C$<}~Yjj33)6=#|{9{GM&--y75nKe!vzs47E+XVA)L_%g)Y(I2>uD{N` zGkHU4J^rr8aDzvrU?~}mHLz%O{Cj@jD;W~E~ivv zvnGvsn2(9;(bMRpCbj#t+>DYjG3W112=?-tvdEtmfwKF-5@ZF$W&8qDA_Q|;QEF#8 z)_IDfU7Vnfd{5>rb2Xj~%K`dwxXu@;``E|0_uFC8B-{=U$t>;A#fQ%R(ddzb>W8Sll zK2kj=(`mTYLboHKrM=hi!SBO9)w@*+5?3If2s|RZ*vc(`z&nB`Rjc3O%BIXo8M7nMWB*NhV`>q<8_%Z@sLJ* zcxegX7G*L`mJMu;&Q^F@c#^kB*1PU@rv*{u?PIOx0>ySJ=ihU4x_}g+_P{aYuP&i`5MXoOsqv zCj0vt8&AzvosONclHX<$Q_oYB=vSf(BR%VIB0PsrWcrE80{4k=L+b@ge(bDUtbgVB z##nUt5ip}?+^NDA+LIx@5hZ1aqWqd*Ih7Z454E0qT22U`uPw;C8sme$9d&xz?kL|? zuA)%Kj<`1n39_7Bvn9+ukrx^iZUIP@)`@HRQEn6bwIX~mRsHM_e)eDa>dW_QKIJzk z2S)qf$XP`t4!9>RF47gw-`ncv*sEbJU-&#vXP{FFFOM8kAV+sW1l2fzgjvj-%!F<= z&vG=rcux^&S7((6)b88Gt9Sl}&t%FB3{JjJpIdX%?vGjOPs?5m#x&*rmc&`(V@RPm zYo~c)N&QLFhzw79WfE~Bxf?IKndSjQ(=I&k-V3_5hI(}$1E(i_`mRbzVVi%1>Ik_A zy(FN0?)I&Y!g+|%Trt@cBYh$TY?IkG>(u_-0@@Aa^W^_U__qUD>W38Ae9&H}viD*K zh3T{NXcs z01gNC=@Y|5ZKK&4G1>L;`r@e^1yc6%V)!l3Sta$#O$F{2N7qG5KF-nn-P=_}4(S6R zwcR5Lvvn;}N8TOhn`$+F+eBq*&i-n&H4(QmZ-`idhr_>*_Ay~TY$*p}N47ZKwOP2W zd)S_Zdj&F5d!%=Agi| zsiYS&rpHu*+}-myw=SOxA7?J1cj}fv@9wvBEpS#%?A9l{_FoFFr!6_KNTWLahqlgt zqATrTtM^?Xn>I`dH+;YJL0Q;@u+DaAilODIi*`#5EChaY7q+$x^X=gRhh{VEm%oun zZc0fLjy={gGB&dmRd)<_I;6O`s&x}HEawL+i$j8KIb~#LXDa%}wp0_q&(M1tJz_J| z%VIrG9nyM0Oi;GB!v_%WQw#BD;@d(cUf?CeeQR7Nfapu-nJ`wU=(O~=4C{;A3BUDx z3o+(f`&!L0TQOtBNrD;cGF~^n5SMuJ+seg0nFtN*BQC49iI$^}_Q9TmBy5~Qxfi}b zCD5tqW!f5Y2|9BIz)zW9>Kkakh5f0HRN}=EMaG6kl&{x~HyK@noC-uO|mcrS9b&1&Z{kvwDEn z%G?&q%P@ls$`0HB>gV3`WoPuV5~GZk!Fu^rVtd29X~j!_-Hr8;0^m3b60Vt0h6(iQ znH)6QMUb0gxCpo7!!i^en|l-f>v(yQOr3#xcCV5|%Ikrc&x(=%0k6UwMQI0SQ8jSV z4b)F^HVFrO4kDW9h-X+3AoTa<(vjdAkv+mv)BX$-KU8hFoW8ckJ+8X)HS50e1!;m_ zOuG=t5z?9}!m@2ReN*D`uyhngQ>^iPrJku7fRFq|yjOVbX$Yz-z`T2ZdwO4{f|u&D zi7Bk-0+`p^pX=?OA$%zt$haYTp{QCg;KYLZv>@@z_oU8~S$b%+P$r*PpPJ8E`pVES z%=YsolTa3uM3aQ~F(DN5{(xo<3&{r~h%`m#dwtxT=B6sK^DR6@pl%8%jMc17U~eMB zx<+w-fcE;9~ zdwFL^vK=Zygp0YU{AZ5D z2Q}vX-&qVzD(8E+a8~BrOst1&T}aaX_&)GV-yn#w90SF`;t-xUlMtI<&Tf^k>m`5t z8hmr5{vxc`7`y`iNMR$T)5Z6|IDh%BzNo$WxJx*@U^XZV#tJ}6k4`r>t!mio1wyZ= z!FANofs7Vb@sV3jH|kY#Fg5-S`Ihy%ZJxE+Y)Gfh_z#qJ37C^#FT89(VCo*?{H!-D znq6AUsagFrKKE?LxI93ZLT`&lSUasu)sEhDk`TX;qy2REj&+|r;A+!k6}uuv;s>tl zf2nSz1}ZVR7yq2OtD~?RY}s`9#49(0V5PkhPr8Hdp0~8DWx5f7c#>Wd*0}F!qxVd7 z(sOuN4=u;UK^QAlJvMg51Kt;hNk30ftjm;JpUYZt@Ii3;VR7duW^@_VzivVn#GZqU znr#|QPr~V2FC;=E{~36{-N5=Mg;acIO&Q2Y+mR%wK_+H<7BRAHUT~-1izXe@)m=9q zm+6gY$qDHV0?K>qirnhlIA5knc#ZXYU))REH>EBaBDKf*tXCY9`()**-zxz)IP`tehpWD(^fAKO(iGWg?Ko!EU)oJp{nTe%8rrA-9HD3ISiJ4omh&D6t(_o~ z|7bL)ue^A>aCIsy4&d}N?}xRIwynFlHy)1&>qd>#ft_^?_FRi98;pfm))Lcf51z%` z+5tNrHG9Uk150MpH{i~X%^j`9ybi!uGiz`er~26V9lfulGpo#(6ML0XiqXXqx(Pi3 zVZZlH?%ysItYlOUdkdoZm&!qeeyMKAs+$j!T5&h|%wkC_wYWr`OEfqUa@^Sq7g$}O zcRZ9V^Jow%&~>pIgSg~RjDuM`=3hdNz`DHzzbgR{Z_5!#rMa&w0@DY=HJm+zoJo=e z%yBAmMQGo^_Wt7Xg8SFqAB=zBy|4d6v8OOPb#Ag9sv$;2XL6=Chn!gTDzSUc^ zKx8q6vGp}-*Piv~YDmPKhV?&IC3%`n<^QUUM$FW#ne~jC43l6tUk{HFMlOd zv$lP!GT%0{2oL7q{}EeF74VzLK()ce%3Wj4LaHHxNGaH0;q!}7u@LUwNgbA-qwMcw zZPz_!V&bh*B)f&u!=yi#yT_z3v$%lN*KlqFRCaMzLwY?7Qei#q2(MLt1Fy7|1AfZZmC!Vi|uCV zTNY3L{zcT@(ZkZ+qd{+d{&c(PR2e}**Y7Q&puN>^-WyqBhf8`?(9H&7`tJ0k- z9ZHNM#N0~5pz7@sYLYmggiGQY*vVA@bl-$Kn5wV^cq?o5E!WYp*3Y{)FrV<&;Pr-b zl&gh*BFJA?JOr>iGAeQwBek0&S%ys@p|s=keuvrZ30IL9XNQI0+K^DZ57rKTgUrnh zD4V{|KVIkjl1wgJqE6URr3rew!8(ObqYPSIZNc}yb8K#nT@HB(SCIQ{^U>xJ1FSW- zh$-mk3Z-~y&Ow$f(WXlNL!GI*yrpUTaAhn)cFR}2fwN`+?xy#9r3+P`*3F7Pj#L?Q ze&cwjal%*FEu=v2OAL!-H!s5_wQeeT2G)q~cHmcpLZv-PS}T_3SdHBC@M;Im+6fTO z`>XOlH9H!-?Ixl@G7sT;_mC6SFp1&)L8hyrh#}gsZ##>w#hyc@vCl*l;xn}MQ%Hh% z>uz9s&tf;XV3!J8%^72CLGM~mSObKY#dOt=BIv*$d89=3kajJ%pIZo6?Lr#HBHUl_ z={#08TOC~wS+^CI**U(N6*_k<7`3XjSZcqie3g;g(pcp;Iz21A*{O zol4ugZnl?@JI8C!V$BWe>uTa4mAi!|Ut?7cTCUw-@_x#C#$VJgrQq8<_b_l;n&lxy zpksi%-AAFObhguxu44J7-8J&cUGN(}8Yj8g%{F54g-Wi*W950Xn60MtGaat=3<~88 zo}OmGt^~NpFT2Uyt#sta3Co>T`M-F+UbisZAXqmJaYa-CQ6Ub7g(3kAlsIp_PBg(6 zqQc(>D~71`!tT{3BXH{cT? zwu7voEP`qc4>QuDFcW8rw<_yG-iYS{#AHat+NF_=*It$*Y+ih_S70Fo?(zApaS7;P zqs1wfZ@xCf9Id_3Pv~d1CmCj9y-)Qp&to=NL-b=Yhb|Z(9nV7I^zcm2 z&!b=p=D(d`e6rUcxRyFM_>KHpFzYi-f&TPDrr4y&-FBpws~lY}CbK$X8$L>J2i6Tg z26j}se7|lsH`DF0o6R_LSN%@gZ&_v4ibawzx|`cr_57;{^aYR7k8wnn-N^(lMP!!FrpCY1Z5RgDzR(JDEM zBA@Oq$#Egw;gHmcaY%*XUV#cg^?xV<5K?ci)iZz7>M|*?#KO6mr=_59z3FYPNDtPl z1909mG`{-`^re1oiF@%Hl##TDMb7kNS&>mnAcW30m+3)U(RWfleNRPhe1aKkU?jfz zQsE!*{sGMbzT-11$Z#+%`3~V9Wuep4ku#lY*XGw)m9-zR#CjxpL`KUv>27R*IlWcu>%x~=_J%4+Z**NCI7eT{>Z&u`nIJSMf|z}t z4HaG~ai{cQj`9MRIA$3LEou^_N+~RTOVxfyRcH5@ zC0Q;D+&QcERzxC8ky^ENQC-t=x8vk&!f4*~-wHFCWT2v2qLS;Vcvx4qyw%sn;XNq2 zS#ZpwLcrwsBo93px~G*{>JbR(oe}iQPucTp@T=bR_a$!tDu|l!!ZUiL36*ug)H!TV_XpOf7MT2Rj&qYW3*`f*5U7v9u z)ao-_1 z&z;H}HV)wij4_gBHiaoXVSOEQmh$L=%BoQ@FcX%EWP}<{-C8yu zLM6{XBAwV7ZN%sOAPdJ<*JQqEiCS2Y7szqE%;h92S+zu^tOLLOCXIQ6y?lr{4Ea(^ zNLMJsU1MNI)UcpEZufYOEDRp5I;u)>GR#VBu_&!A&&d!u4@!hOpGWytfI6xJ1_uxH znqwY$in+fap1g3sy3U(LyTXU0o$&LLv!;Wg7nzlqzN!^DQ~1)|MMigfhy)7>v17HT z<+C9*{cgsyU>4Xdms=Y<{qW`B*LIVCSF+9DkUbr+Rad+KtP`jlJ3@}oBTOGu+J!r< zhC7*jOK489d*!7{`&kudmCIpoDCgbIQ)IODf|!h!eCfJijzFjkBW5jGz`wwBh>78S zy0w#XTjMQqRaC}H7o{?E+n)PNzqSP8#?JdQ`+2C{bY?e>GcgNVG(Hya+Iq;Upsaq9K;j`?WkxR^N6_XRP_|##DN9&?RNW-qv|i zx6%stmsQFv&s>%r_SOn8w@bw03|PsR12&Eyt*A;Fy5^MO13&2h%PD2x9A-90R$c>{=27>})9Qg0Bac zj(;efUek2hXjNQ38)e;2ZFc`C@+L6wcGNvIDUuRes{9VQ0rl|zQof9>M{vj$x~E{) z8kXl5o5*?@1f#c&Ii|6gp2r^IvGtJJJde_1kKN<8Bd{iG14EqZD)T}VB7buOGFBm? z9T+}+<5Rr~af%vTXomdbR6jLyUZJbgD=)0lX)OuhpE}&L_dKpuv3N5>B)hV3MI=Zj z6{DDy8O(kIC;9a2hZ(oBlG`lhkQ1-PXU6M*sT#a=#M>JZtlVku*qk=#t-WF^;7)P4B8MV=Xo* z#=tJiW3s^26{Of(G@-lE4Wk0^?H$ydq_eb!-_6ECZchKC`+Da7%~;a(;>zpVDBZDN z!giumRE)w4U|S?f$njHM?xzgTaLV1bq5{YAXQ|&^s>~}|rzhmE;nKJH<4Q?v!TM!S{}Vu)s7@=`Y^UB`DDka`K8s(4~N z!}z@Qd>_Y(#d*%dj@F7lB~7nG+FTDAy6+B(o0v{z%klHAjU?*19$1D@LiF|>`LPuK z4hO04lZeUWJbos}`!YH8t8an=-F?UVaVhE{!91C^(mlh~oNt}EQO#fNa(@`qaSu0J znL`+&o8=7(kR`k{#s`t-1DuvVZZKKO1iX$d66_ogvf45$JR09r@!?i{c0kuq9Sy!m z$4I}znOmyzn>rlt@E#ORw*9uLKOYjut+mgo*(jb44NK@soBeF=;qy-8jaBa13s^5j z6!4ey3Gq0!$}0`z(e((d!qlZ`Oosmw>5bX&KFdkl%3VE9G??AND2xa}g1*OLD^;xy% zx_HeR$BVY@$&mG@gW%{P45FpTjyI7J{7iU%rY53Ehgv)&7|yLz3?qcw%#R~_7>2HBTntiFkqC}Ldp)r!Z}>f zY}Et8nZkGOoC&1RbA5UhpMURy2JC=2^+8X@DVRbxdgeSyJQmn$tf;IY}PVYYmncL@+`wen?mbbUol5P697cn-m(DPYUgBE*$>oBVn?A zGc}$+u8>C;4WYU%&Xp|aeaPDu0@TSg{=oV43Yh3$td)&`@se`YCZXV^MY_3IEsXge zvjv@(TPijt3Ez8Ji7hHJ_t#1l4S+iobcq9ZiKzaRL@W9M*TH&q<=!QP`q`A-IDR_A~XDTJY7KU zl6`-~gF|jcWp8fTA2m}t$h|9?3#~UfR{8L2u-6E&H^(Um46c6%xnbW`=6v zR#AV>k)I@Y*#;yPq$L@ogbYgy{Gz>L(QSahld)cRH1Fj7ir%#?5Q{Y3E?GS!5NWAV z$l|Wy(41h9wIua1%PxtOaTqI1xx!CSTY`6T!mpD2wl(7>p3SmW{3Ozg^u{RDIFEFF zUD+#O&S~u63B-Vh6Jd-&TI=-8bYC^){${%Jong{-S*E?xe`w#t%<2IDSF6KKTomasc|cIMMibuQ~o;V^UgK*SDd*AKj#Fx)0QK`J*3CVAj|VtkEG!bE$cpNcrCOLcSotSh!ulE z_H;v7W9dSx3gKq&H|=r5h)O`(Wyk^KV~^NjVkBFjCnQGiy1?`6sILK7`sPbdSNROO zv9?gmbd|sHoUZ3hUwc%+JLNEw{Mr=f#uAyGdgC!@qye_@ zXDYHJE?-@!L*jcUjc++UJk07=-6Ran6I#gMp%_YUf1+2y-l2kRz9JmK{JtB@Wf}A) zDXwf&5iE?`|GUU~>+dMle|=Dk^}#NWQSOpFwl&eUL)^C7t(Hk<^Ig@ww{f3? z+T5~>KlalfuOQ~%ahfg%dl3NlbKI31M&XY)8G~{Zn{PcISnrh@ANE~EIj9PMf2_z# z&5f8UDJh8S886y=S$eN`H^~`nke%KgIp`%9HP-X`UYAeYc(T6hSe@_wl?t1JnN6KL zb#?Xi5=%`{w=)S@j?_8D2M8%+k%j&|e_(^ne{Q0_Fi5r`aW6ArXuCwdk|w&Fts|vU z;o`5_K7y0aWeY<7EYidds&?`!Wh}vH;GIgq7}~H3KLvxge)l$8%*5ivzeZd7sJC5% zDfO6%S2H1DpShDaPa1c_*igw&;6^r`L1O5a!Z! zm(9Hfg={a}1#hgjaaXn<+Je@SR=cm)*dX zK#>Lgt#uj8Mf?M_zq)gD$8yzkqDk4CtYFA}v8JLR6D2>v%V5{AQXy{)!9#3MM^dme z=i(TJ#|csF6y#o+?(nT4&PEE83^7J<6nW@Z(T1%y6*bcFohzB2-TJOyrtR*kmN16=02rX-06j}$G zgcb0=28vtCROO2|Norbzy$FxmSWlhmsoIvc8Rfz`VJV52ReO_bUXOTxy>r!ya<1Kt z`nY!ae&E{QM6^LgtFN;<7XW3T6fcbS-(XVNlEEA#NL7 za=E_BpW;|OLzX_nj=h)_slAWjn&J;C|I7}9K0@V-|KPk@?9-_sZ-kC8<4umj30XJ$ z0xPGZ(A&RrZI9s2qIzpB4fDY~Y(!n!ZLlTrArUn?#N$c6f+jzXx>u?H>n|`ekJ)P& zJs<3*Vg9Thpb2=(0s5{BWPLz;iW?dYKNXwBs0q{Y=Pb;8+4rIGejxZqpLOqsu?C34 znsF9zHQRHTqO24!#q`+Bz7<#r*}U>8 zW57=>G3p+K-%e)M-vJ!i4sueFN|l|KQU)0XXz;qu%5B_}%%P`_3&d8b+@p*DGqq#O zneL!o9=35`cZDH}^6NzIa5Q?*u3IyU0mmy>ITF>X4Ecq?mB?~bA~cUHG_7>PZa zUlilAvz&-@^3C(Ob`Hv@LXvd=xJ$t!2{x#YbKAGHD9b6U{yDP6<6U|M&ghX#4+_V{zf% Gng0v_2IZ0f literal 0 HcmV?d00001 diff --git a/doc/library/index.md b/doc/library/index.md index e072b1036f..642bfc67e9 100644 --- a/doc/library/index.md +++ b/doc/library/index.md @@ -11,6 +11,7 @@ compiler/compiler data/data datastructs/datastructs debug/debug +Evolve/evolve functional/functional io/io math/math diff --git a/doc/requirements.in b/doc/requirements.in index af341d1323..b828b68d43 100644 --- a/doc/requirements.in +++ b/doc/requirements.in @@ -1,10 +1,6 @@ -sphinx==3.2.1 -exhale==0.2.3 -sphinx-rtd-theme==0.5.0 -coverxygen==1.5.0 -breathe==4.22.1 -myst-parser==0.12.9 -# @mmore500 2021-10 -# docutils 0.18.0 crashes docs build due to exception -# AttributeError: 'Values' object has no attribute 'section_self_link' -docutils==0.17.1 +sphinx +exhale +sphinx-rtd-theme +coverxygen +breathe +myst-parser diff --git a/doc/requirements.txt b/doc/requirements.txt index ba5ca8f558..688edaba1f 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,85 +1,84 @@ # -# This file is autogenerated by pip-compile -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # -# pip-compile requirements.in +# pip-compile --resolver=backtracking # -alabaster==0.7.12 +alabaster==0.7.13 # via sphinx -attrs==20.3.0 - # via markdown-it-py -babel==2.9.1 +babel==2.12.1 # via sphinx -beautifulsoup4==4.10.0 - # via bs4 -breathe==4.22.1 +beautifulsoup4==4.12.2 + # via exhale +breathe==4.35.0 # via # -r requirements.in # exhale -bs4==0.0.1 - # via exhale -certifi==2021.10.8 +certifi==2023.5.7 # via requests -charset-normalizer==2.0.7 +charset-normalizer==3.1.0 # via requests -coverxygen==1.5.0 +coverxygen==1.7.0 # via -r requirements.in -docutils==0.17.1 +docutils==0.19 # via - # -r requirements.in # breathe # myst-parser # sphinx -exhale==0.2.3 +exhale==0.2.4 # via -r requirements.in -idna==3.3 +idna==3.4 # via requests -imagesize==1.2.0 +imagesize==1.4.1 # via sphinx -jinja2==3.0.2 +importlib-metadata==6.6.0 # via sphinx -lxml==4.6.3 +jinja2==3.1.2 + # via + # myst-parser + # sphinx +lxml==4.9.2 # via exhale -markdown-it-py==0.5.8 - # via myst-parser -markupsafe==2.0.1 +markdown-it-py==2.2.0 + # via + # mdit-py-plugins + # myst-parser +markupsafe==2.1.3 # via jinja2 -myst-parser==0.12.9 +mdit-py-plugins==0.3.5 + # via myst-parser +mdurl==0.1.2 + # via markdown-it-py +myst-parser==1.0.0 # via -r requirements.in -packaging==21.0 +packaging==23.1 # via sphinx -pygments==2.10.0 +pygments==2.15.1 # via sphinx -pyparsing==3.0.2 - # via packaging -pytz==2021.3 - # via babel pyyaml==6.0 # via myst-parser -requests==2.26.0 +requests==2.31.0 # via sphinx six==1.16.0 - # via - # breathe - # exhale -snowballstemmer==2.1.0 + # via exhale +snowballstemmer==2.2.0 # via sphinx -soupsieve==2.2.1 +soupsieve==2.4.1 # via beautifulsoup4 -sphinx-rtd-theme==0.5.0 - # via -r requirements.in -sphinx==3.2.1 +sphinx==6.2.1 # via # -r requirements.in # breathe # exhale # myst-parser # sphinx-rtd-theme -sphinxcontrib-applehelp==1.0.2 +sphinx-rtd-theme==0.5.1 + # via -r requirements.in +sphinxcontrib-applehelp==1.0.4 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.0 +sphinxcontrib-htmlhelp==2.0.1 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx @@ -87,8 +86,7 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -urllib3==1.26.7 +urllib3==2.0.3 # via requests - -# The following packages are considered to be unsafe in a requirements file: -# setuptools +zipp==3.15.0 + # via importlib-metadata diff --git a/include/emp/config/config.hpp b/include/emp/config/config.hpp index 4f0fe3c93d..dccfcfefbd 100644 --- a/include/emp/config/config.hpp +++ b/include/emp/config/config.hpp @@ -402,7 +402,9 @@ namespace emp { for (auto & x : type_manager_map) delete x.second; } + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend class ConfigWebUI; + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ ConfigEntry * operator[](const std::string & name) { return var_map[name]; } auto begin() -> decltype(var_map.begin()) { return var_map.begin(); } diff --git a/include/emp/matching/MatchBin.hpp b/include/emp/matching/MatchBin.hpp index 22cb215fce..c9199e9e85 100644 --- a/include/emp/matching/MatchBin.hpp +++ b/include/emp/matching/MatchBin.hpp @@ -61,6 +61,7 @@ namespace emp::internal { using query_t = Query; using tag_t = Tag; + #ifndef DOXYGEN_SHOULD_SKIP_THIS template < typename Val, typename Metric, @@ -68,7 +69,7 @@ namespace emp::internal { typename Regulator > friend class emp::MatchBin; - + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ struct LogEntry { query_t query; From 73ddfa5d6c594468dea4287be4bc1c20f3570486 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 11 Jun 2023 22:01:59 -0400 Subject: [PATCH 02/80] Documentation fixes --- doc/conf.py | 2 +- .../emp/base/_emscripten_assert_trigger.hpp | 3 ++ include/emp/data/DataInterface.hpp | 36 +++++++++++++++++++ include/emp/datastructs/SmallVector.hpp | 4 +++ include/emp/prefab/Card.hpp | 2 +- include/emp/prefab/Collapse.hpp | 8 ++--- include/emp/prefab/ValueBox.hpp | 4 +-- 7 files changed, 51 insertions(+), 8 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index baddcbfc42..aadff85f9e 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -102,7 +102,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. diff --git a/include/emp/base/_emscripten_assert_trigger.hpp b/include/emp/base/_emscripten_assert_trigger.hpp index 7dcfd867fa..cc76455c1c 100644 --- a/include/emp/base/_emscripten_assert_trigger.hpp +++ b/include/emp/base/_emscripten_assert_trigger.hpp @@ -19,6 +19,8 @@ #include "_is_streamable.hpp" +#ifndef DOXYGEN_SHOULD_SKIP_THIS + namespace emp { static int TripAssert() { @@ -64,3 +66,4 @@ namespace emp { } // namespace emp #endif // #ifndef EMP_BASE__EMSCRIPTEN_ASSERT_TRIGGER_HPP_INCLUDE +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ \ No newline at end of file diff --git a/include/emp/data/DataInterface.hpp b/include/emp/data/DataInterface.hpp index 14b42e0978..26f01bd54b 100644 --- a/include/emp/data/DataInterface.hpp +++ b/include/emp/data/DataInterface.hpp @@ -21,29 +21,64 @@ namespace emp { public: virtual ~DataInterface() { ; } + /// Returns the number values added to this node since the last reset. virtual size_t GetCount() const = 0; + + /// Returns the number of times this node has been reset. virtual size_t GetResetCount() const = 0; + /// Returns the sum of values added since the last reset. + /// Requires that the data::Range or data::FullRange be added to the DataNode virtual double GetTotal() const = 0; + /// Returns the mean of the values added since the last reset. + /// Requires that the data::Range or data::FullRange be added to the DataNode virtual double GetMean() const = 0; + /// Returns the minimum of the values added since the last reset. + /// Requires that the data::Range or data::FullRange be added to the DataNode virtual double GetMin() const = 0; + /// Returns the maximum of the values added since the last reset. + /// Requires that the data::Range or data::FullRange be added to the DataNode virtual double GetMax() const = 0; + /// Returns the variance of the values added since the last reset. + /// Requires that the data::Stats or data::FullStats be added to the DataNode virtual double GetVariance() const = 0; + /// Returns the standard deviation of the values added since the last reset. + /// Requires that the data::Stats or data::FullStats be added to the DataNode virtual double GetStandardDeviation() const = 0; + /// Returns the skewness of the values added since the last reset. + /// Requires that the data::Stats or data::FullStats be added to the DataNode virtual double GetSkew() const = 0; + /// Returns the kurtosis of the values added since the last reset. + /// Requires that the data::Stats or data::FullStats be added to the DataNode virtual double GetKurtosis() const = 0; + /// Runs the Pull function for this DataNode and records the resulting values. + /// Requires that the data::Pull module was added to this DataNode, and that a pull function + /// was specified. virtual void PullData() = 0; + /// Reset this node. The exact effects of this depend on the modules that this node has, + /// but in general it prepares the node to receive a new set of data. virtual void Reset() = 0; + /// Print debug information about this node to the provided stream + /// Useful for tracking which modifiers are included. + /// @param os The stream to print debug information to virtual void PrintDebug(std::ostream & os=std::cout) = 0; + /// Returns this node's name. Requires that the data::Info module was + /// added to this DataNode, and that a name was set. virtual void GetName() = 0; + /// Returns this node's description. Requires that the data::Info module was + /// added to this DataNode, and that a description was set. virtual void GetDescription() = 0; + /// Returns this node's keyword. Requires that the data::Info module was + /// added to this DataNode, and that a keyword was set. virtual void GetKeyword() = 0; }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS + template class DataInterface_Impl : public DataInterface { public: @@ -128,6 +163,7 @@ namespace emp { }; + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ template DataInterface * MakeDataInterface() { diff --git a/include/emp/datastructs/SmallVector.hpp b/include/emp/datastructs/SmallVector.hpp index 03a9e58df1..f7859f79ab 100644 --- a/include/emp/datastructs/SmallVector.hpp +++ b/include/emp/datastructs/SmallVector.hpp @@ -363,6 +363,8 @@ class SmallVectorTemplateBase : public SmallVectorTemplateCommon { void pop_back() { this->set_size(this->size() - 1); } }; +#ifndef DOXYGEN_SHOULD_SKIP_THIS + /// This class consists of common code factored out of the SmallVector class to /// reduce code duplication based on the SmallVector 'N' template parameter. template @@ -717,6 +719,8 @@ class SmallVectorImpl : public SmallVectorTemplateBase { } }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + template void SmallVectorImpl::swap(SmallVectorImpl &RHS) { if (this == &RHS) return; diff --git a/include/emp/prefab/Card.hpp b/include/emp/prefab/Card.hpp index f4ca1dd6ae..964b1b6b46 100644 --- a/include/emp/prefab/Card.hpp +++ b/include/emp/prefab/Card.hpp @@ -113,7 +113,7 @@ namespace prefab { * A protected constructor for a Card. * @param state indicate whether card should be STATIC, INIT_OPEN, or INIT_CLOSED (default STATIC) * @param show_glyphs should toggle icons show in collapsible card header? (default true) - * @param info_ref a pointer to the underlying ReadoutPanelInfo object for this ReadoutPanel + * @param in_info a pointer to the underlying ReadoutPanelInfo object for this ReadoutPanel * or a pointer to a derived info object (simulating inheritance) */ Card( diff --git a/include/emp/prefab/Collapse.hpp b/include/emp/prefab/Collapse.hpp index 85c7c098be..e1f93156ea 100644 --- a/include/emp/prefab/Collapse.hpp +++ b/include/emp/prefab/Collapse.hpp @@ -150,7 +150,7 @@ namespace prefab { * Adds a controller to the vector of controllers for this CollapseCouple * * @param controller new controller to add to coupling is of type Widget - * @param expaned initial state of the target(s), is it expaned or not? + * @param expanded initial state of the target(s), is it expanded or not? */ void AddController(web::Widget controller, const bool expanded) { internal::CollapseController controller_widget(controller, target_class, expanded); @@ -160,7 +160,7 @@ namespace prefab { /** Adds a controller to the vector of controllers for this CollapseCouple. * * @param controller new controller to add to coupling is of type string - * @param expaned initial state of the target(s), is it expaned or not? + * @param expanded initial state of the target(s), is it expanded or not? */ /* @@ -175,7 +175,7 @@ namespace prefab { * Adds a target to the vector of targets for this CollapseCouple * * @param widget new target to add to coupling is a web element - * @param expaned initial state of the target(s), is it expaned or not? + * @param expanded initial state of the target(s), is it expanded or not? */ void AddTarget(web::internal::FacetedWidget widget, const bool expanded) { if (expanded) { @@ -191,7 +191,7 @@ namespace prefab { * Adds a target to the vector of targets for this CollapseCouple * * @param widget new target to add to coupling is a string - * @param expaned initial state of the target(s), is it expaned or not? + * @param expanded initial state of the target(s), is it expanded or not? */ /* diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index 83c29c33ed..4e77fa388c 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -164,12 +164,12 @@ namespace emp::prefab { ValueControl( const std::string & label, const std::string & desc, - const std::string & inital_value, + const std::string & initial_value, web::Input input, const std::string & id="" ) : ValueBox(label, desc, id), mainCtrl(input) { view << mainCtrl; - mainCtrl.Value(inital_value); + mainCtrl.Value(initial_value); } }; From fbc9d183a2ecfd97c2b8fed413df00317d124855 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Mon, 12 Jun 2023 04:25:15 -0400 Subject: [PATCH 03/80] Docs improvements --- .readthedocs.yaml | 4 +- Doxyfile => doc/Doxyfile | 919 ++++++++++++------ doc/conf.py | 48 +- doc/dev/adding-documentation.md | 1 + doc/dev/guide-to-testing.md | 1 - doc/index.md | 2 +- doc/library/Evolve/evolve.md | 38 - doc/library/base/base.md | 6 +- doc/library/bits/bits.md | 8 +- doc/library/compiler/compiler.md | 10 +- doc/library/data/data.md | 8 +- doc/library/datastructs/datastructs.md | 22 +- doc/library/debug/debug.md | 8 +- doc/library/evolve/evolve.md | 36 + .../systematics_docs.md} | 0 doc/library/functional/functional.md | 8 +- doc/library/index.md | 2 +- doc/library/io/io.md | 6 +- doc/library/math/math.md | 18 +- doc/library/testing/testing.md | 2 +- doc/library/tools/tools.md | 8 +- doc/library/web/web.md | 60 +- include/emp/base/errors.hpp | 2 +- include/emp/bits/BitVector.hpp | 16 +- include/emp/data/DataNode.hpp | 8 +- include/emp/datastructs/SmallVector.hpp | 4 +- include/emp/io/ascii_utils.hpp | 4 +- include/emp/meta/macros.hpp | 3 +- include/emp/meta/meta.hpp | 4 + include/emp/prefab/CodeBlock.hpp | 1 + include/emp/prefab/Collapse.hpp | 4 +- include/emp/prefab/CommentBox.hpp | 2 +- include/emp/prefab/ConfigPanel.hpp | 3 + include/emp/prefab/ReadoutPanel.hpp | 6 +- include/emp/prefab/ValueBox.hpp | 2 +- include/emp/tools/attrs.hpp | 4 +- include/emp/web/TextFeed.hpp | 4 +- include/emp/web/Widget.hpp | 2 + include/emp/web/init.hpp | 6 - third-party/Makefile | 2 +- third-party/download_doxygen.sh | 4 +- 41 files changed, 828 insertions(+), 468 deletions(-) rename Doxyfile => doc/Doxyfile (74%) delete mode 100644 doc/library/Evolve/evolve.md create mode 100644 doc/library/evolve/evolve.md rename doc/library/{Evolve/systematics.md => evolve/systematics_docs.md} (100%) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 675e23b0d1..267e5bd584 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -10,7 +10,9 @@ build: os: ubuntu-22.04 tools: python: "3.10" - + jobs: + pre_build: + - doxygen # Build documentation in the docs/ directory with Sphinx sphinx: diff --git a/Doxyfile b/doc/Doxyfile similarity index 74% rename from Doxyfile rename to doc/Doxyfile index 8fc9188076..946989d919 100644 --- a/Doxyfile +++ b/doc/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.8.10 +# Doxyfile 1.9.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,16 +12,26 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 @@ -32,7 +42,7 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = "Empirical" +PROJECT_NAME = Empirical # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version @@ -58,18 +68,30 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = "doc/doxygen" +OUTPUT_DIRECTORY = doxyoutput -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -81,14 +103,14 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English @@ -179,6 +201,16 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus @@ -199,6 +231,14 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. @@ -222,20 +262,19 @@ TAB_SIZE = 2 # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -264,28 +303,40 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -293,6 +344,26 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN Use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0. and GITHUB Use the lower case version of title +# with any whitespace replaced by '-' and punctations characters removed.. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -309,7 +380,7 @@ AUTOLINK_SUPPORT = YES # diagrams that involve STL classes more complete and accurate. # The default value is: NO. -BUILTIN_STL_SUPPORT = NO +BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. @@ -318,7 +389,7 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. @@ -404,6 +475,27 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -424,6 +516,12 @@ EXTRACT_ALL = YES EXTRACT_PRIVATE = NO +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. @@ -461,6 +559,13 @@ EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -472,14 +577,15 @@ HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO @@ -498,12 +604,20 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = YES @@ -521,11 +635,17 @@ HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. -SHOW_INCLUDE_FILES = YES +SHOW_INCLUDE_FILES = NO # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader @@ -661,7 +781,7 @@ SHOW_FILES = YES # Folder Tree View (if specified). # The default value is: YES. -SHOW_NAMESPACES = YES +SHOW_NAMESPACES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from @@ -678,7 +798,8 @@ FILE_VERSION_FILTER = # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE @@ -689,7 +810,7 @@ LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. @@ -724,34 +845,81 @@ WARNINGS = YES WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. +# The default value is: NO. + +WARN_AS_ERROR = NO + # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -765,17 +933,28 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = +INPUT = ../include # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding +# "INPUT_ENCODING" for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -784,13 +963,20 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, -# *.vhdl, *.ucf, *.qsf, *.as and *.js. +# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, +# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C +# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. -FILE_PATTERNS = *.cpp, *.cc, *.h *.hpp +FILE_PATTERNS = *.cpp \ + *.cc \ + *.h \ + *.hpp # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. @@ -821,22 +1007,19 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = */demos/* -EXCLUDE_PATTERNS += */examples/* -EXCLUDE_PATTERNS += */tests/config/* -EXCLUDE_PATTERNS += */third-party/* +EXCLUDE_PATTERNS = */demos/* \ + */examples/* \ + */tests/config/* \ + */third-party/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* +# ANamespace::AClass, ANamespace::*Test -EXCLUDE_SYMBOLS = EMP_* -EXCLUDE_SYMBOLS += EM_* +EXCLUDE_SYMBOLS = EMP_* \ + EM_* # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include @@ -878,6 +1061,15 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. INPUT_FILTER = @@ -887,6 +1079,10 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. FILTER_PATTERNS = @@ -912,6 +1108,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -939,7 +1144,7 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO @@ -971,12 +1176,12 @@ SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version +# (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -996,7 +1201,7 @@ USE_HTAGS = NO # See also: Section \class. # The default value is: YES. -VERBATIM_HEADERS = YES +VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index @@ -1009,17 +1214,11 @@ VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 4 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = @@ -1098,7 +1297,12 @@ HTML_STYLESHEET = # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1113,10 +1317,23 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generate light mode output, DARK always +# generate dark mode output, AUTO_LIGHT automatically set the mode according to +# the user preference, use light mode if no preference is set (the default), +# AUTO_DARK automatically set the mode according to the user preference, use +# dark mode if no preference is set and TOGGLE allow to user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# this color. Hue is specified as an angle on a color-wheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. @@ -1125,7 +1342,7 @@ HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1143,14 +1360,16 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the @@ -1175,13 +1394,14 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1195,6 +1415,13 @@ GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1220,8 +1447,12 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1251,7 +1482,7 @@ CHM_FILE = HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1278,6 +1509,16 @@ BINARY_TOC = NO TOC_EXPAND = NO +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1296,7 +1537,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1304,8 +1546,8 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1313,30 +1555,30 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1379,16 +1621,28 @@ DISABLE_INDEX = NO # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # @@ -1413,6 +1667,24 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1422,19 +1694,14 @@ EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. -FORMULA_TRANSPARENT = YES +FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1444,11 +1711,29 @@ FORMULA_TRANSPARENT = YES USE_MATHJAX = NO +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1461,22 +1746,29 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1504,7 +1796,7 @@ MATHJAX_CODEFILE = SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1523,7 +1815,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1536,8 +1829,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1588,21 +1882,35 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. @@ -1632,29 +1940,31 @@ PAPER_TYPE = a4 EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that doxygen normally uses. # -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = @@ -1687,18 +1997,26 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# The LATEX_BATCHMODE tag ignals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1711,24 +2029,22 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# https://en.wikipedia.org/wiki/BibTeX and \cite for more info. # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BIB_STYLE = plain +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -1768,9 +2084,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1779,22 +2095,12 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- @@ -1866,6 +2172,13 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- @@ -1884,23 +2197,14 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sf.net) file that captures the -# structure of the code including all documentation. Note that this feature is -# still experimental and incomplete at the moment. +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures +# the structure of the code including all documentation. Note that this feature +# is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -1960,7 +2264,7 @@ ENABLE_PREPROCESSING = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -MACRO_EXPANSION = NO +MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and @@ -1979,10 +2283,11 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = +INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -2000,7 +2305,7 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = DOXYGEN_RUNNING +PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2067,41 +2372,10 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2110,7 +2384,7 @@ HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. @@ -2127,35 +2401,52 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" + +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES @@ -2169,7 +2460,8 @@ CLASS_GRAPH = YES COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. See also the chapter Grouping +# in the manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2192,10 +2484,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2262,10 +2576,17 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2302,11 +2623,12 @@ DOT_PATH = DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2315,13 +2637,18 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + # When using plantuml, the specified paths are searched for files specified by # the !include statement in a plantuml block. @@ -2351,18 +2678,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2375,14 +2690,34 @@ DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/doc/conf.py b/doc/conf.py index aadff85f9e..d84f8d0f1c 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -21,6 +21,7 @@ import os import sphinx_rtd_theme import subprocess +import glob import sys import textwrap @@ -39,34 +40,47 @@ 'sphinx.ext.todo', 'sphinx_rtd_theme', 'breathe', - 'exhale', + # 'exhale', 'myst_parser', ] +myst_heading_anchors = 4 + # Setup the breathe extension breathe_projects = { "Empirical": "./doxyoutput/xml" } breathe_default_project = "Empirical" -# Setup the exhale extension -exhale_args = { - # These arguments are required - "containmentFolder": "./api", - "rootFileName": "library_root.rst", - "rootFileTitle": "Library API", - "doxygenStripFromPath": "..", - # Suggested optional arguments - "createTreeView": True, - # TIP: if using the sphinx-bootstrap-theme, you need - # "treeViewIsBootstrap": True, - "exhaleExecutesDoxygen": True, - "exhaleDoxygenStdin": textwrap.dedent(""" - INPUT = ../include - EXCLUDE_SYMBOLS += internal __impl_* *impl *IMPL *_IMPL_* *Impl - """) +breathe_projects_source = { + "Empirical" : ( + "../include/emp", glob.glob("**/*.hpp") + ) } +# Setup the exhale extension +# exhale_args = { +# # These arguments are required +# "containmentFolder": "./api", +# "rootFileName": "library_root.rst", +# "rootFileTitle": "Library API", +# "doxygenStripFromPath": "..", +# # Suggested optional arguments +# "createTreeView": True, +# # TIP: if using the sphinx-bootstrap-theme, you need +# # "treeViewIsBootstrap": True, +# "exhaleExecutesDoxygen": True, +# "exhaleDoxygenStdin": textwrap.dedent(""" +# INPUT = ../include +# EXCLUDE_SYMBOLS += internal __impl_* *impl *IMPL *_IMPL_* *Impl, +# XML_PROGRAMLISTING = NO +# """) +# } + +breathe_doxygen_config_options = {'PREDEFINED': 'DOXYGEN_SHOULD_SKIP_THIS'} + +# cpp_index_common_prefix = ["emp::"] + # Tell sphinx what the primary language being documented is. primary_domain = 'cpp' diff --git a/doc/dev/adding-documentation.md b/doc/dev/adding-documentation.md index b6c98a47f9..28a00e186f 100644 --- a/doc/dev/adding-documentation.md +++ b/doc/dev/adding-documentation.md @@ -98,6 +98,7 @@ like the following: ```{eval-rst} .. doxygenfile:: potato.h :project: Empirical + :no-link: ``` ``` diff --git a/doc/dev/guide-to-testing.md b/doc/dev/guide-to-testing.md index 019b70f47c..68e80bacb8 100644 --- a/doc/dev/guide-to-testing.md +++ b/doc/dev/guide-to-testing.md @@ -122,7 +122,6 @@ which are detailed within [their documentation](https://github.com/philsquared/Catch/blob/master/docs/tutorial.md). ## Running Tests with Docker -------------------------- A [devosoft/empirical](https://hub.docker.com/r/devosoft/empirical) Docker image has been set up to make recreating a development environment on your machine easier. diff --git a/doc/index.md b/doc/index.md index 833e55e9cd..1a5d241925 100644 --- a/doc/index.md +++ b/doc/index.md @@ -28,7 +28,7 @@ Contents: BuiltWithEmpiricalGallery/index QuickStartGuides/index library/index -api/library_root +library/api_root ``` diff --git a/doc/library/Evolve/evolve.md b/doc/library/Evolve/evolve.md deleted file mode 100644 index d0e2a65743..0000000000 --- a/doc/library/Evolve/evolve.md +++ /dev/null @@ -1,38 +0,0 @@ -# Evolution tools - -## World - -```{eval-rst} -.. doxygenfile:: emp/Evolve/World.hpp - :project: Empirical - :no-link: -``` - -## Systematics Manager - -```{include} systematics.md -``` - -### Systematics API - -```{eval-rst} -.. doxygenfile:: emp/Evolve/Systematics.hpp - :project: Empirical - :no-link: -``` - -## NK - -```{eval-rst} -.. doxygenfile:: emp/Evolve/NK.hpp - :project: Empirical - :no-link: -``` - -## Selection - -```{eval-rst} -.. doxygenfile:: emp/Evolve/World_select.hpp - :project: Empirical - :no-link: -``` diff --git a/doc/library/base/base.md b/doc/library/base/base.md index 14e7d327fe..9dfc5eba44 100644 --- a/doc/library/base/base.md +++ b/doc/library/base/base.md @@ -64,18 +64,18 @@ trigger an assertion error and print the value of a. % ```{doxygendefine} emp_assert % :project: Empirical -% ``` +:no-link:% ``` ```{eval-rst} .. doxygendefine:: emp_assert :project: Empirical - :no-link: +:no-link: ``` ```{eval-rst} .. doxygendefine:: emp_emscripten_assert :project: Empirical - :no-link: +:no-link: ``` ## Empirical pointers diff --git a/doc/library/bits/bits.md b/doc/library/bits/bits.md index a32aa087b6..7f5a7a89d7 100644 --- a/doc/library/bits/bits.md +++ b/doc/library/bits/bits.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitMatrix.hpp :project: Empirical - :no-link: +:no-link: ``` ## BitSet @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitSet.hpp :project: Empirical - :no-link: +:no-link: ``` ## BitSet Utilities @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/bits/bitset_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## BitVector @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitVector.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/compiler/compiler.md b/doc/library/compiler/compiler.md index 6db62d8a36..78214ffe5a 100644 --- a/doc/library/compiler/compiler.md +++ b/doc/library/compiler/compiler.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/DFA.hpp :project: Empirical - :no-link: +:no-link: ``` ## Lexer Utilities @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/lexer_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Lexer @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/Lexer.hpp :project: Empirical - :no-link: +:no-link: ``` ## NonDeterministic Finite Automata @@ -29,7 +29,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/NFA.hpp :project: Empirical - :no-link: +:no-link: ``` ## Regular Expressions @@ -37,5 +37,5 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/RegEx.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/data/data.md b/doc/library/data/data.md index a3c282c8d7..0aea324f7b 100644 --- a/doc/library/data/data.md +++ b/doc/library/data/data.md @@ -34,7 +34,7 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataNode.hpp :project: Empirical - :no-link: +:no-link: ``` ### DataManagers @@ -42,7 +42,7 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataManager.hpp :project: Empirical - :no-link: +:no-link: ``` ### DataInterfaces @@ -50,7 +50,7 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataInterface.hpp :project: Empirical - :no-link: +:no-link: ``` ### DataFiles @@ -58,5 +58,5 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataFile.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/datastructs/datastructs.md b/doc/library/datastructs/datastructs.md index 9323db55c5..3bdd09b56e 100644 --- a/doc/library/datastructs/datastructs.md +++ b/doc/library/datastructs/datastructs.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/Cache.hpp :project: Empirical - :no-link: +:no-link: ``` ## Dynamic Strings @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/DynamicString.hpp :project: Empirical - :no-link: +:no-link: ``` ## Graph Utilities @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/graph_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Graphs @@ -29,7 +29,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/Graph.hpp :project: Empirical - :no-link: +:no-link: ``` ## Index Map @@ -37,7 +37,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/IndexMap.hpp :project: Empirical - :no-link: +:no-link: ``` ## Map Utilities @@ -45,7 +45,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/map_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## RandomAccess Set @@ -53,7 +53,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/ra_set.hpp :project: Empirical - :no-link: +:no-link: ``` ## Set Utilities @@ -61,7 +61,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/set_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Tuple Struct @@ -69,7 +69,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/tuple_struct.hpp :project: Empirical - :no-link: +:no-link: ``` ## Tuple Utilities @@ -77,7 +77,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/tuple_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Vector Utilities @@ -85,5 +85,5 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/vector_utils.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/debug/debug.md b/doc/library/debug/debug.md index 725522d8d6..f9449a2db6 100644 --- a/doc/library/debug/debug.md +++ b/doc/library/debug/debug.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/debug/alert.hpp :project: Empirical - :no-link: +:no-link: ``` ## Debugging Tools @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/debug/debug.hpp :project: Empirical - :no-link: +:no-link: ``` ## Errors @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/debug/errors.hpp :project: Empirical - :no-link: +:no-link: ``` ## Memory Tracking @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/debug/mem_track.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/evolve/evolve.md b/doc/library/evolve/evolve.md new file mode 100644 index 0000000000..eda5f4c0e0 --- /dev/null +++ b/doc/library/evolve/evolve.md @@ -0,0 +1,36 @@ +# Evolution tools + +## World + +```{eval-rst} +.. doxygenfile:: Evolve/World.hpp + :project: Empirical +:no-link: +``` + +## Phylotracklib (Systematics Manager) + +```{include} systematics_docs.md +``` + +```{eval-rst} +.. doxygenfile:: Evolve/Systematics.hpp + :project: Empirical +:no-link: +``` + +## NK + +```{eval-rst} +.. doxygenfile:: Evolve/NK.hpp + :project: Empirical +:no-link: +``` + +## Selection + +```{eval-rst} +.. doxygenfile:: Evolve/World_select.hpp + :project: Empirical +:no-link: +``` diff --git a/doc/library/Evolve/systematics.md b/doc/library/evolve/systematics_docs.md similarity index 100% rename from doc/library/Evolve/systematics.md rename to doc/library/evolve/systematics_docs.md diff --git a/doc/library/functional/functional.md b/doc/library/functional/functional.md index 3c1915a9c8..2e7300390a 100644 --- a/doc/library/functional/functional.md +++ b/doc/library/functional/functional.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: tools/flex_function.hpp :project: Empirical - :no-link: +:no-link: ``` ## Function Sets @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/functional/FunctionSet.hpp :project: Empirical - :no-link: +:no-link: ``` ## Generic Functions @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/functional/GenericFunctions.hpp :project: Empirical - :no-link: +:no-link: ``` ## Memoized Functions @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/functional/memo_functions.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/index.md b/doc/library/index.md index 642bfc67e9..3f9c52606b 100644 --- a/doc/library/index.md +++ b/doc/library/index.md @@ -11,7 +11,7 @@ compiler/compiler data/data datastructs/datastructs debug/debug -Evolve/evolve +evolve/evolve functional/functional io/io math/math diff --git a/doc/library/io/io.md b/doc/library/io/io.md index c133920b3e..7ceb5b8dc3 100644 --- a/doc/library/io/io.md +++ b/doc/library/io/io.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/io/File.hpp :project: Empirical - :no-link: +:no-link: ``` ## Serialization Macros @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/io/serialize_macros.hpp :project: Empirical - :no-link: +:no-link: ``` ## Serialization Tools @@ -21,5 +21,5 @@ ```{eval-rst} .. doxygenfile:: emp/io/serialize.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/math/math.md b/doc/library/math/math.md index af7a163bd2..18357730e8 100644 --- a/doc/library/math/math.md +++ b/doc/library/math/math.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/combos.hpp :project: Empirical - :no-link: +:no-link: ``` ## Constants @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/constants.hpp :project: Empirical - :no-link: +:no-link: ``` ## Information Theory Tools @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/info_theory.hpp :project: Empirical - :no-link: +:no-link: ``` ## Math @@ -29,7 +29,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/math.hpp :project: Empirical - :no-link: +:no-link: ``` ## Randomness Utilites @@ -37,7 +37,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/random_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Random Number Generator @@ -45,7 +45,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/Random.hpp :project: Empirical - :no-link: +:no-link: ``` ## Range @@ -53,7 +53,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/Range.hpp :project: Empirical - :no-link: +:no-link: ``` ## Sequence Utilities @@ -61,7 +61,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/sequence_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Statistics Tools @@ -69,5 +69,5 @@ ```{eval-rst} .. doxygenfile:: emp/math/stats.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/testing/testing.md b/doc/library/testing/testing.md index 6e1d18e9ad..9785507bea 100644 --- a/doc/library/testing/testing.md +++ b/doc/library/testing/testing.md @@ -5,5 +5,5 @@ ```{eval-rst} .. doxygenfile:: emp/testing/unit_tests.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/tools/tools.md b/doc/library/tools/tools.md index 9531d9a11e..be7b6868f0 100644 --- a/doc/library/tools/tools.md +++ b/doc/library/tools/tools.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/tools/timing.hpp :project: Empirical - :no-link: +:no-link: ``` ## Branch and Bound Solution States @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/tools/SolveState.hpp :project: Empirical - :no-link: +:no-link: ``` ## String Utilities @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/tools/string_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Type Tracker @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/tools/TypeTracker.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/doc/library/web/web.md b/doc/library/web/web.md index 8648f435fe..bd9d27161b 100644 --- a/doc/library/web/web.md +++ b/doc/library/web/web.md @@ -11,7 +11,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Animate.hpp :project: Empirical - :no-link: +:no-link: ``` ## Attributes @@ -19,7 +19,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Attributes.hpp :project: Empirical - :no-link: +:no-link: ``` ## Buttons @@ -27,7 +27,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Button.hpp :project: Empirical - :no-link: +:no-link: ``` ## Canvas @@ -35,7 +35,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Canvas.hpp :project: Empirical - :no-link: +:no-link: ``` ## Canvas Utilities @@ -43,7 +43,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/canvas_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## Canvas Actions @@ -51,7 +51,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/CanvasAction.hpp :project: Empirical - :no-link: +:no-link: ``` ## Canvas Shapes @@ -59,7 +59,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/CanvasShape.hpp :project: Empirical - :no-link: +:no-link: ``` ## Color maps @@ -67,7 +67,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/color_map.hpp :project: Empirical - :no-link: +:no-link: ``` ## Commands @@ -75,7 +75,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/commands.hpp :project: Empirical - :no-link: +:no-link: ``` ## Divs @@ -83,7 +83,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Div.hpp :project: Empirical - :no-link: +:no-link: ``` ## Documents @@ -91,7 +91,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Document.hpp :project: Empirical - :no-link: +:no-link: ``` ## Useful functions for emscripten @@ -99,7 +99,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/emfunctions.hpp :project: Empirical - :no-link: +:no-link: ``` ## Event Handling @@ -107,7 +107,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/events.hpp :project: Empirical - :no-link: +:no-link: ``` ## File Input @@ -115,7 +115,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/FileInput.hpp :project: Empirical - :no-link: +:no-link: ``` ## Font @@ -123,7 +123,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Font.hpp :project: Empirical - :no-link: +:no-link: ``` ## Images @@ -131,7 +131,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Image.hpp :project: Empirical - :no-link: +:no-link: ``` ## Initialization @@ -139,7 +139,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/init.hpp :project: Empirical - :no-link: +:no-link: ``` ## Javascript Utilities @@ -147,7 +147,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/js_utils.hpp :project: Empirical - :no-link: +:no-link: ``` ## JSWrap @@ -155,7 +155,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/JSWrap.hpp :project: Empirical - :no-link: +:no-link: ``` ## Keypress Manager @@ -163,7 +163,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/KeypressManager.hpp :project: Empirical - :no-link: +:no-link: ``` ## Listeners @@ -171,7 +171,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Listeners.hpp :project: Empirical - :no-link: +:no-link: ``` ## Raw Image @@ -179,7 +179,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/RawImage.hpp :project: Empirical - :no-link: +:no-link: ``` ## Selector @@ -187,7 +187,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Selector.hpp :project: Empirical - :no-link: +:no-link: ``` ## Styles @@ -195,7 +195,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Style.hpp :project: Empirical - :no-link: +:no-link: ``` ## Tables @@ -203,7 +203,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Table.hpp :project: Empirical - :no-link: +:no-link: ``` ## Text @@ -211,7 +211,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Text.hpp :project: Empirical - :no-link: +:no-link: ``` ## Text Areas @@ -219,7 +219,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/TextArea.hpp :project: Empirical - :no-link: +:no-link: ``` ## Tweens @@ -227,7 +227,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Tween.hpp :project: Empirical - :no-link: +:no-link: ``` ## Widgets @@ -235,11 +235,11 @@ d3/d3 ```{eval-rst} .. emp/web/Widget.hpp :project: Empirical - :no-link: +:no-link: ``` ```{eval-rst} .. doxygenfile:: emp/web/WidgetExtras.hpp :project: Empirical - :no-link: +:no-link: ``` diff --git a/include/emp/base/errors.hpp b/include/emp/base/errors.hpp index f4ab4e8461..9fc005b897 100644 --- a/include/emp/base/errors.hpp +++ b/include/emp/base/errors.hpp @@ -44,7 +44,7 @@ #include #include -/// If we are in emscripten, make sure to include the header. +// If we are in emscripten, make sure to include the header. #ifdef __EMSCRIPTEN__ #include #endif diff --git a/include/emp/bits/BitVector.hpp b/include/emp/bits/BitVector.hpp index 33b8fb7d94..c00fb540cc 100644 --- a/include/emp/bits/BitVector.hpp +++ b/include/emp/bits/BitVector.hpp @@ -1711,11 +1711,11 @@ namespace emp { if (bit) SetRange(num_bits-num, num_bits); } - /// Insert bit(s) into any index of vector using bit magic. - /// Blog post on implementation reasoning: https://devolab.org/?p=2249 - /// @param index location to insert bit(s). - /// @param val value of bit(s) to insert (default true) - /// @param num number of bits to insert, default 1. + // Insert bit(s) into any index of vector using bit magic. + // Blog post on implementation reasoning: https://devolab.org/?p=2249 + // @param index location to insert bit(s). + // @param val value of bit(s) to insert (default true) + // @param num number of bits to insert, default 1. void BitVector::Insert(const size_t index, const bool val, const size_t num) { Resize(num_bits + num); // Adjust to new number of bits. BitVector low_bits(*this); // Copy current bits @@ -1727,9 +1727,9 @@ namespace emp { } - /// Delete bits from any index in a vector. - /// @param index location to delete bit(s). - /// @param num number of bits to delete, default 1. + // Delete bits from any index in a vector. + // @param index location to delete bit(s). + // @param num number of bits to delete, default 1. void BitVector::Delete(const size_t index, const size_t num) { emp_assert(index+num <= GetSize()); // Make sure bits to delete actually exist! RawCopy(index+num, num_bits, index); // Shift positions AFTER delete into place. diff --git a/include/emp/data/DataNode.hpp b/include/emp/data/DataNode.hpp index 031db1ab00..27f4235347 100644 --- a/include/emp/data/DataNode.hpp +++ b/include/emp/data/DataNode.hpp @@ -65,6 +65,7 @@ namespace emp { }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS /// A shortcut for converting DataNode mod ID's to ValPacks. template using ModPack = emp::ValPack<(int) MODS...>; @@ -86,13 +87,14 @@ namespace emp { using type = typename next_type::template append; }; - /// Generic form of DataNodeModule (should never be used; trigger error!) template class DataNodeModule { public: DataNodeModule() { emp_assert(false, "Unknown module used in DataNode!"); } }; + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + /// Base form of DataNodeModule (available in ALL data nodes.) template class DataNodeModule { @@ -650,6 +652,7 @@ namespace emp { template class DataNodeModule : public DataNodeModule { protected: + #ifndef DOXYGEN_SHOULD_SKIP_THIS emp::FunctionSet pull_funs; ///< Functions to pull data. emp::FunctionSet()> pull_set_funs; ///< Functions to pull sets of data. @@ -658,7 +661,8 @@ namespace emp { using base_t = DataNodeModule; using base_t::in_vals; - + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + void PullData_impl() { in_vals = pull_funs.Run(); const emp::vector< emp::vector > & pull_sets = pull_set_funs.Run(); diff --git a/include/emp/datastructs/SmallVector.hpp b/include/emp/datastructs/SmallVector.hpp index f7859f79ab..ceef2466d7 100644 --- a/include/emp/datastructs/SmallVector.hpp +++ b/include/emp/datastructs/SmallVector.hpp @@ -363,7 +363,7 @@ class SmallVectorTemplateBase : public SmallVectorTemplateCommon { void pop_back() { this->set_size(this->size() - 1); } }; -#ifndef DOXYGEN_SHOULD_SKIP_THIS +// #ifndef DOXYGEN_SHOULD_SKIP_THIS /// This class consists of common code factored out of the SmallVector class to /// reduce code duplication based on the SmallVector 'N' template parameter. @@ -719,7 +719,7 @@ class SmallVectorImpl : public SmallVectorTemplateBase { } }; -#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ +// #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ template void SmallVectorImpl::swap(SmallVectorImpl &RHS) { diff --git a/include/emp/io/ascii_utils.hpp b/include/emp/io/ascii_utils.hpp index 5e14132887..8c7f47b4ed 100644 --- a/include/emp/io/ascii_utils.hpp +++ b/include/emp/io/ascii_utils.hpp @@ -23,7 +23,7 @@ namespace emp { /// The following function prints an ascii bar graph on to the screen (or provided stream). template - void AsciiBarGraph( emp::vector data, + void AsciiBarGraph( emp::vector data, ///< Data to graph size_t max_width=80, ///< What's the widest bars allowed? bool show_scale=true, ///< Should we show the scale at bottom. bool max_scale_1=true, ///< Should we limit scaling to 1:1? @@ -47,7 +47,7 @@ namespace emp { /// Take the input data, break it into bins, and print it as a bar graph. template - void AsciiHistogram(emp::vector data, + void AsciiHistogram(emp::vector data, ///< Data to graph size_t num_bins=40, ///< How many bins in histogram? size_t max_width=80, ///< What's the widest bars allowed? bool show_scale=true, ///< Should we show the scale at bottom? diff --git a/include/emp/meta/macros.hpp b/include/emp/meta/macros.hpp index 0504b4632c..63e71fc40c 100644 --- a/include/emp/meta/macros.hpp +++ b/include/emp/meta/macros.hpp @@ -422,7 +422,7 @@ /// @endcond -// @cond MACROS +/// @cond MACROS // ********************** @@ -441,7 +441,6 @@ #define EMP_INTERNAL_CALL_BY_PACKS(C, F, ...) \ EMP_INTERNAL_CALL_BY_PACKS_impl(C, F, EMP_DEC_TO_PACK(EMP_COUNT_ARGS(__VA_ARGS__)), __VA_ARGS__, ~) -/// @cond MACROS // Internal helpers... // P is the pack of call counts the still need to be done diff --git a/include/emp/meta/meta.hpp b/include/emp/meta/meta.hpp index af32c39d37..b24d9d82ba 100644 --- a/include/emp/meta/meta.hpp +++ b/include/emp/meta/meta.hpp @@ -295,6 +295,8 @@ namespace emp { static constexpr int Product() { return I; } }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS + //This bit of magic is from //http://meh.schizofreni.co/programming/magic/2013/01/23/function-pointer-from-lambda.html //and is useful for fixing lambda function woes @@ -324,6 +326,8 @@ namespace emp { return static_cast::function>(lambda); } + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + /// Determine the size of a built-in array. template constexpr size_t GetSize(T (&)[N]) { return N; } diff --git a/include/emp/prefab/CodeBlock.hpp b/include/emp/prefab/CodeBlock.hpp index 35dd32c844..6cc99bcf45 100644 --- a/include/emp/prefab/CodeBlock.hpp +++ b/include/emp/prefab/CodeBlock.hpp @@ -35,6 +35,7 @@ namespace prefab { * * @param code_block string of the code to be placed in code block * @param lang programming language to base syntax highlighting + * @param id the id of the html element for this code block */ CodeBlock(const std::string code_block, const std::string lang, const std::string & id="") : web::Element("pre", id) { diff --git a/include/emp/prefab/Collapse.hpp b/include/emp/prefab/Collapse.hpp index e1f93156ea..caa1a17ece 100644 --- a/include/emp/prefab/Collapse.hpp +++ b/include/emp/prefab/Collapse.hpp @@ -31,7 +31,9 @@ namespace prefab { public: /** * @param controller web element that cause target area(s) to expand/collapse when clicked + * @param controls_class CSS class for controls * @param expanded whether or not the target(s) are initially in an expanded/open state + * @param id HTML id of div for this controller */ template CollapseController( @@ -190,7 +192,7 @@ namespace prefab { /** * Adds a target to the vector of targets for this CollapseCouple * - * @param widget new target to add to coupling is a string + * @param target new target to add to coupling is a string * @param expanded initial state of the target(s), is it expanded or not? */ diff --git a/include/emp/prefab/CommentBox.hpp b/include/emp/prefab/CommentBox.hpp index 2d40fef221..90bd9bd86a 100644 --- a/include/emp/prefab/CommentBox.hpp +++ b/include/emp/prefab/CommentBox.hpp @@ -26,7 +26,7 @@ namespace prefab { * Optionally, it can contain text and other web elements. */ class CommentBox: public web::Div { - friend prefab::ConfigPanel; + friend ConfigPanel; private: // ID for the comment box Div std::string box_base = this->GetID(); diff --git a/include/emp/prefab/ConfigPanel.hpp b/include/emp/prefab/ConfigPanel.hpp index 7c6b5e3916..d217e03d38 100644 --- a/include/emp/prefab/ConfigPanel.hpp +++ b/include/emp/prefab/ConfigPanel.hpp @@ -129,6 +129,8 @@ namespace prefab { public: /** * @param config config object used to construct this panel + * @param open Should card for displaying this config default to being open? + * @param div_name Name to use for html div id for this panel */ ConfigPanel( Config & config, @@ -310,6 +312,7 @@ namespace prefab { /** * Arranges config panel based configuration pass to constructor * @param config the config object used to create this panel + * @param open should the card for the panel start open? * @param id_prefix string appended to id for each setting (unusued) * @deprecated No longer necessary for config panel to function. * This function was a work around to fix a bug. diff --git a/include/emp/prefab/ReadoutPanel.hpp b/include/emp/prefab/ReadoutPanel.hpp index 62a16787ad..8fd221a887 100644 --- a/include/emp/prefab/ReadoutPanel.hpp +++ b/include/emp/prefab/ReadoutPanel.hpp @@ -82,7 +82,7 @@ namespace emp::prefab { public: /** * @param group_name name for this collection of values, displayed in card header - * @param refresh_time the time in milliseconds between refreshes to the live values + * @param refresh_milliseconds the time in milliseconds between refreshes to the live values * @param state initial state of the card, one of STAITC, INIT_OPEN, or INIT_CLOSED * @param show_glyphs whether the underlying card should show toggle icons in card header * @param id a user defined ID for ReadoutPanel div (default is emscripten generated) @@ -117,7 +117,7 @@ namespace emp::prefab { * INIT_CLOSED * @param show_glyphs whether the underlying card should show toggle icons * in card header - * @param info_ref a pointer to the underlying ReadoutPanelInfo object for + * @param in_info a pointer to the underlying ReadoutPanelInfo object for * this ReadoutPanel or a pointer to a derived info object (simulating inheritance) */ ReadoutPanel(const std::string & group_name, @@ -178,7 +178,7 @@ namespace emp::prefab { * parent div to a list of divs to be redrawn at the refresh rate. * @param name the name for this value. * @param desc a description for this value. - * @param value_getter a function that will return the string for this value. + * @param value a function that will return the string for this value. * * @return the readout panel for chaining calls */ diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index 4e77fa388c..df71348471 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -206,7 +206,7 @@ namespace emp::prefab { /** * @param label name for this value * @param desc a more detailed description of what the value means - * @param value the initial value + * @param is_checked is switch initially on? * @param onChange function to be called when the user changes this value * @param id user defined ID for BoolValueControl div (default is emscripten generated) */ diff --git a/include/emp/tools/attrs.hpp b/include/emp/tools/attrs.hpp index b1dcbcaf17..451382f051 100644 --- a/include/emp/tools/attrs.hpp +++ b/include/emp/tools/attrs.hpp @@ -923,6 +923,8 @@ namespace emp { return {std::forward(props)...}; } + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Doxygen is getting tripped up by this + namespace __impl_attrs_merge { constexpr struct { template @@ -935,7 +937,7 @@ namespace emp { /// Creates a new attribute pack which has all the attributes of this /// pack and another pack. Values will be taken from other other pack /// preferentially. - #ifndef DOXYGEN_SHOULD_SKIP_THIS // Doxygen is getting tripped up by this + template constexpr auto Merge(U&&... packs) // This hint is required by some older compilers diff --git a/include/emp/web/TextFeed.hpp b/include/emp/web/TextFeed.hpp index c26363cf39..997c7da8db 100644 --- a/include/emp/web/TextFeed.hpp +++ b/include/emp/web/TextFeed.hpp @@ -26,7 +26,7 @@ namespace web { class TextFeed : public internal::WidgetFacet { friend class TextFeedInfo; protected: - #ifndef DOXYGEN_SHOULD_SKIP_THIS + // #ifndef DOXYGEN_SHOULD_SKIP_THIS class TextFeedInfo : public internal::WidgetInfo { friend TextFeed; protected: @@ -72,7 +72,7 @@ namespace web { public: virtual std::string GetType() override { return "web::TextFeedInfo"; } }; // End of TextFeedInfo - #endif // DOXYGEN_SHOULD_SKIP_THIS + // #endif // DOXYGEN_SHOULD_SKIP_THIS // Get a properly cast version of info. TextFeedInfo * Info() { return (TextFeedInfo *) info; } diff --git a/include/emp/web/Widget.hpp b/include/emp/web/Widget.hpp index 242b0398d5..a14fbc161a 100644 --- a/include/emp/web/Widget.hpp +++ b/include/emp/web/Widget.hpp @@ -82,7 +82,9 @@ namespace web { class Widget { friend internal::WidgetInfo; friend internal::DivInfo; friend internal::TableInfo; protected: + #ifndef DOXYGEN_SHOULD_SKIP_THIS using WidgetInfo = internal::WidgetInfo; + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ WidgetInfo * info; ///< Information associated with this widget. /// If an Append doesn't work with current class, forward it to the parent and try there. diff --git a/include/emp/web/init.hpp b/include/emp/web/init.hpp index 5e4b154a1e..083c3be93d 100644 --- a/include/emp/web/init.hpp +++ b/include/emp/web/init.hpp @@ -233,12 +233,6 @@ namespace emp { #endif -#else // Let doxygen document a non-confusing version of Live - -/// Take a function or variable and set it up so that it can update each time a text box is redrawn. -template -std::function emp::Live(T && val) {;} - #endif #endif // #ifndef EMP_WEB_INIT_HPP_INCLUDE diff --git a/third-party/Makefile b/third-party/Makefile index 4200e208c8..8b913cb6c8 100644 --- a/third-party/Makefile +++ b/third-party/Makefile @@ -15,7 +15,7 @@ download-doxygen: bash download_doxygen.sh build-doxygen: download-doxygen - mkdir -p doxygen/build && cd doxygen/build && cmake -g "Unix makefiles" .. && make + mkdir -p doxygen/build && cd doxygen/build && cmake -G "Unix Makefiles" .. && make prepare-virtualenv: python3 -m virtualenv env diff --git a/third-party/download_doxygen.sh b/third-party/download_doxygen.sh index a49a4ba072..f8ba1505cd 100755 --- a/third-party/download_doxygen.sh +++ b/third-party/download_doxygen.sh @@ -1,8 +1,8 @@ if [ -d doxygen ]; then echo "doxygen directory exists!" else - curl -O -L https://sourceforge.net/projects/doxygen/files/rel-1.8.11/doxygen-1.8.11.src.tar.gz/download + curl -O -L https://sourceforge.net/projects/doxygen/files/rel-1.9.7/doxygen-1.9.7.src.tar.gz/download tar -xvf download rm download - mv doxygen-1.8.11 doxygen; + mv doxygen-1.9.7 doxygen; fi From e6853c1bfc76c10be44fa62d9590bf351802fae9 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Mon, 12 Jun 2023 04:27:37 -0400 Subject: [PATCH 04/80] Docs improvements --- doc/library/base/base.md | 6 +-- doc/library/bits/bits.md | 8 ++-- doc/library/compiler/compiler.md | 10 ++--- doc/library/data/data.md | 8 ++-- doc/library/datastructs/datastructs.md | 22 +++++----- doc/library/debug/debug.md | 8 ++-- doc/library/evolve/evolve.md | 8 ++-- doc/library/functional/functional.md | 8 ++-- doc/library/io/io.md | 6 +-- doc/library/math/math.md | 18 ++++---- doc/library/testing/testing.md | 2 +- doc/library/tools/tools.md | 8 ++-- doc/library/web/web.md | 60 +++++++++++++------------- 13 files changed, 86 insertions(+), 86 deletions(-) diff --git a/doc/library/base/base.md b/doc/library/base/base.md index 9dfc5eba44..fd2405f005 100644 --- a/doc/library/base/base.md +++ b/doc/library/base/base.md @@ -64,18 +64,18 @@ trigger an assertion error and print the value of a. % ```{doxygendefine} emp_assert % :project: Empirical -:no-link:% ``` + :no-link:% ``` ```{eval-rst} .. doxygendefine:: emp_assert :project: Empirical -:no-link: + :no-link: ``` ```{eval-rst} .. doxygendefine:: emp_emscripten_assert :project: Empirical -:no-link: + :no-link: ``` ## Empirical pointers diff --git a/doc/library/bits/bits.md b/doc/library/bits/bits.md index 7f5a7a89d7..0f7b75ec61 100644 --- a/doc/library/bits/bits.md +++ b/doc/library/bits/bits.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitMatrix.hpp :project: Empirical -:no-link: + :no-link: ``` ## BitSet @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitSet.hpp :project: Empirical -:no-link: + :no-link: ``` ## BitSet Utilities @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/bits/bitset_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## BitVector @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitVector.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/compiler/compiler.md b/doc/library/compiler/compiler.md index 78214ffe5a..4ac2965805 100644 --- a/doc/library/compiler/compiler.md +++ b/doc/library/compiler/compiler.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/DFA.hpp :project: Empirical -:no-link: + :no-link: ``` ## Lexer Utilities @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/lexer_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Lexer @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/Lexer.hpp :project: Empirical -:no-link: + :no-link: ``` ## NonDeterministic Finite Automata @@ -29,7 +29,7 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/NFA.hpp :project: Empirical -:no-link: + :no-link: ``` ## Regular Expressions @@ -37,5 +37,5 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/RegEx.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/data/data.md b/doc/library/data/data.md index 0aea324f7b..cca68494a8 100644 --- a/doc/library/data/data.md +++ b/doc/library/data/data.md @@ -34,7 +34,7 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataNode.hpp :project: Empirical -:no-link: + :no-link: ``` ### DataManagers @@ -42,7 +42,7 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataManager.hpp :project: Empirical -:no-link: + :no-link: ``` ### DataInterfaces @@ -50,7 +50,7 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataInterface.hpp :project: Empirical -:no-link: + :no-link: ``` ### DataFiles @@ -58,5 +58,5 @@ for collecting data over the course of a computational experiment. ```{eval-rst} .. doxygenfile:: emp/data/DataFile.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/datastructs/datastructs.md b/doc/library/datastructs/datastructs.md index 3bdd09b56e..0a13ca9580 100644 --- a/doc/library/datastructs/datastructs.md +++ b/doc/library/datastructs/datastructs.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/Cache.hpp :project: Empirical -:no-link: + :no-link: ``` ## Dynamic Strings @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/DynamicString.hpp :project: Empirical -:no-link: + :no-link: ``` ## Graph Utilities @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/graph_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Graphs @@ -29,7 +29,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/Graph.hpp :project: Empirical -:no-link: + :no-link: ``` ## Index Map @@ -37,7 +37,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/IndexMap.hpp :project: Empirical -:no-link: + :no-link: ``` ## Map Utilities @@ -45,7 +45,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/map_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## RandomAccess Set @@ -53,7 +53,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/ra_set.hpp :project: Empirical -:no-link: + :no-link: ``` ## Set Utilities @@ -61,7 +61,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/set_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Tuple Struct @@ -69,7 +69,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/tuple_struct.hpp :project: Empirical -:no-link: + :no-link: ``` ## Tuple Utilities @@ -77,7 +77,7 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/tuple_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Vector Utilities @@ -85,5 +85,5 @@ ```{eval-rst} .. doxygenfile:: emp/datastructs/vector_utils.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/debug/debug.md b/doc/library/debug/debug.md index f9449a2db6..85ee6fb6d0 100644 --- a/doc/library/debug/debug.md +++ b/doc/library/debug/debug.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/debug/alert.hpp :project: Empirical -:no-link: + :no-link: ``` ## Debugging Tools @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/debug/debug.hpp :project: Empirical -:no-link: + :no-link: ``` ## Errors @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/debug/errors.hpp :project: Empirical -:no-link: + :no-link: ``` ## Memory Tracking @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/debug/mem_track.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/evolve/evolve.md b/doc/library/evolve/evolve.md index eda5f4c0e0..c3bb4a65df 100644 --- a/doc/library/evolve/evolve.md +++ b/doc/library/evolve/evolve.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: Evolve/World.hpp :project: Empirical -:no-link: + :no-link: ``` ## Phylotracklib (Systematics Manager) @@ -16,7 +16,7 @@ ```{eval-rst} .. doxygenfile:: Evolve/Systematics.hpp :project: Empirical -:no-link: + :no-link: ``` ## NK @@ -24,7 +24,7 @@ ```{eval-rst} .. doxygenfile:: Evolve/NK.hpp :project: Empirical -:no-link: + :no-link: ``` ## Selection @@ -32,5 +32,5 @@ ```{eval-rst} .. doxygenfile:: Evolve/World_select.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/functional/functional.md b/doc/library/functional/functional.md index 2e7300390a..b2515743f1 100644 --- a/doc/library/functional/functional.md +++ b/doc/library/functional/functional.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: tools/flex_function.hpp :project: Empirical -:no-link: + :no-link: ``` ## Function Sets @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/functional/FunctionSet.hpp :project: Empirical -:no-link: + :no-link: ``` ## Generic Functions @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/functional/GenericFunctions.hpp :project: Empirical -:no-link: + :no-link: ``` ## Memoized Functions @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/functional/memo_functions.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/io/io.md b/doc/library/io/io.md index 7ceb5b8dc3..5a43b32d62 100644 --- a/doc/library/io/io.md +++ b/doc/library/io/io.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/io/File.hpp :project: Empirical -:no-link: + :no-link: ``` ## Serialization Macros @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/io/serialize_macros.hpp :project: Empirical -:no-link: + :no-link: ``` ## Serialization Tools @@ -21,5 +21,5 @@ ```{eval-rst} .. doxygenfile:: emp/io/serialize.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/math/math.md b/doc/library/math/math.md index 18357730e8..035f0bb2c5 100644 --- a/doc/library/math/math.md +++ b/doc/library/math/math.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/combos.hpp :project: Empirical -:no-link: + :no-link: ``` ## Constants @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/constants.hpp :project: Empirical -:no-link: + :no-link: ``` ## Information Theory Tools @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/info_theory.hpp :project: Empirical -:no-link: + :no-link: ``` ## Math @@ -29,7 +29,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/math.hpp :project: Empirical -:no-link: + :no-link: ``` ## Randomness Utilites @@ -37,7 +37,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/random_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Random Number Generator @@ -45,7 +45,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/Random.hpp :project: Empirical -:no-link: + :no-link: ``` ## Range @@ -53,7 +53,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/Range.hpp :project: Empirical -:no-link: + :no-link: ``` ## Sequence Utilities @@ -61,7 +61,7 @@ ```{eval-rst} .. doxygenfile:: emp/math/sequence_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Statistics Tools @@ -69,5 +69,5 @@ ```{eval-rst} .. doxygenfile:: emp/math/stats.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/testing/testing.md b/doc/library/testing/testing.md index 9785507bea..286b527229 100644 --- a/doc/library/testing/testing.md +++ b/doc/library/testing/testing.md @@ -5,5 +5,5 @@ ```{eval-rst} .. doxygenfile:: emp/testing/unit_tests.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/tools/tools.md b/doc/library/tools/tools.md index be7b6868f0..b1417a70c4 100644 --- a/doc/library/tools/tools.md +++ b/doc/library/tools/tools.md @@ -5,7 +5,7 @@ ```{eval-rst} .. doxygenfile:: emp/tools/timing.hpp :project: Empirical -:no-link: + :no-link: ``` ## Branch and Bound Solution States @@ -13,7 +13,7 @@ ```{eval-rst} .. doxygenfile:: emp/tools/SolveState.hpp :project: Empirical -:no-link: + :no-link: ``` ## String Utilities @@ -21,7 +21,7 @@ ```{eval-rst} .. doxygenfile:: emp/tools/string_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Type Tracker @@ -29,5 +29,5 @@ ```{eval-rst} .. doxygenfile:: emp/tools/TypeTracker.hpp :project: Empirical -:no-link: + :no-link: ``` diff --git a/doc/library/web/web.md b/doc/library/web/web.md index bd9d27161b..2de8318c86 100644 --- a/doc/library/web/web.md +++ b/doc/library/web/web.md @@ -11,7 +11,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Animate.hpp :project: Empirical -:no-link: + :no-link: ``` ## Attributes @@ -19,7 +19,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Attributes.hpp :project: Empirical -:no-link: + :no-link: ``` ## Buttons @@ -27,7 +27,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Button.hpp :project: Empirical -:no-link: + :no-link: ``` ## Canvas @@ -35,7 +35,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Canvas.hpp :project: Empirical -:no-link: + :no-link: ``` ## Canvas Utilities @@ -43,7 +43,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/canvas_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## Canvas Actions @@ -51,7 +51,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/CanvasAction.hpp :project: Empirical -:no-link: + :no-link: ``` ## Canvas Shapes @@ -59,7 +59,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/CanvasShape.hpp :project: Empirical -:no-link: + :no-link: ``` ## Color maps @@ -67,7 +67,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/color_map.hpp :project: Empirical -:no-link: + :no-link: ``` ## Commands @@ -75,7 +75,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/commands.hpp :project: Empirical -:no-link: + :no-link: ``` ## Divs @@ -83,7 +83,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Div.hpp :project: Empirical -:no-link: + :no-link: ``` ## Documents @@ -91,7 +91,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Document.hpp :project: Empirical -:no-link: + :no-link: ``` ## Useful functions for emscripten @@ -99,7 +99,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/emfunctions.hpp :project: Empirical -:no-link: + :no-link: ``` ## Event Handling @@ -107,7 +107,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/events.hpp :project: Empirical -:no-link: + :no-link: ``` ## File Input @@ -115,7 +115,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/FileInput.hpp :project: Empirical -:no-link: + :no-link: ``` ## Font @@ -123,7 +123,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Font.hpp :project: Empirical -:no-link: + :no-link: ``` ## Images @@ -131,7 +131,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Image.hpp :project: Empirical -:no-link: + :no-link: ``` ## Initialization @@ -139,7 +139,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/init.hpp :project: Empirical -:no-link: + :no-link: ``` ## Javascript Utilities @@ -147,7 +147,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/js_utils.hpp :project: Empirical -:no-link: + :no-link: ``` ## JSWrap @@ -155,7 +155,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/JSWrap.hpp :project: Empirical -:no-link: + :no-link: ``` ## Keypress Manager @@ -163,7 +163,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/KeypressManager.hpp :project: Empirical -:no-link: + :no-link: ``` ## Listeners @@ -171,7 +171,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Listeners.hpp :project: Empirical -:no-link: + :no-link: ``` ## Raw Image @@ -179,7 +179,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/RawImage.hpp :project: Empirical -:no-link: + :no-link: ``` ## Selector @@ -187,7 +187,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Selector.hpp :project: Empirical -:no-link: + :no-link: ``` ## Styles @@ -195,7 +195,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Style.hpp :project: Empirical -:no-link: + :no-link: ``` ## Tables @@ -203,7 +203,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Table.hpp :project: Empirical -:no-link: + :no-link: ``` ## Text @@ -211,7 +211,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Text.hpp :project: Empirical -:no-link: + :no-link: ``` ## Text Areas @@ -219,7 +219,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/TextArea.hpp :project: Empirical -:no-link: + :no-link: ``` ## Tweens @@ -227,7 +227,7 @@ d3/d3 ```{eval-rst} .. doxygenfile:: emp/web/Tween.hpp :project: Empirical -:no-link: + :no-link: ``` ## Widgets @@ -235,11 +235,11 @@ d3/d3 ```{eval-rst} .. emp/web/Widget.hpp :project: Empirical -:no-link: + :no-link: ``` ```{eval-rst} .. doxygenfile:: emp/web/WidgetExtras.hpp :project: Empirical -:no-link: + :no-link: ``` From e9ab761117a2276f5d9d5c62ce41bd4d8b2da48e Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Mon, 12 Jun 2023 04:37:44 -0400 Subject: [PATCH 05/80] Put Doxyfile back in root --- doc/Doxyfile => Doxyfile | 4 ++-- Makefile | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) rename doc/Doxyfile => Doxyfile (99%) diff --git a/doc/Doxyfile b/Doxyfile similarity index 99% rename from doc/Doxyfile rename to Doxyfile index 946989d919..33c920147f 100644 --- a/doc/Doxyfile +++ b/Doxyfile @@ -68,7 +68,7 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = doxyoutput +OUTPUT_DIRECTORY = doc/doxyoutput # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format @@ -933,7 +933,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = ../include +INPUT = include # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/Makefile b/Makefile index 80b57a41ae..4659e1e347 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,7 @@ test-cookiecutter: ../cookiecutter-empirical-project cd ../cookiecutter-empirical-project && make clean && make test doc: + doxygen cd doc && make html coverage coverage: From 14b5dfbcd31566adc3eb439cc1f1022b56e7302b Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 20 Jun 2023 19:51:51 -0400 Subject: [PATCH 06/80] Update documentation pipeline --- Doxyfile | 5 +++-- doc/conf.py | 22 +--------------------- doc/library/base/base.md | 4 ---- doc/library/bits/bits.md | 16 ++++++++-------- doc/library/evolve/evolve.md | 4 ++-- 5 files changed, 14 insertions(+), 37 deletions(-) diff --git a/Doxyfile b/Doxyfile index 33c920147f..94c6d2809d 100644 --- a/Doxyfile +++ b/Doxyfile @@ -380,7 +380,7 @@ AUTOLINK_SUPPORT = YES # diagrams that involve STL classes more complete and accurate. # The default value is: NO. -BUILTIN_STL_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. @@ -1010,7 +1010,8 @@ EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = */demos/* \ */examples/* \ */tests/config/* \ - */third-party/* + */third-party/* \ + */in_progress/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the diff --git a/doc/conf.py b/doc/conf.py index d84f8d0f1c..000d309aab 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -40,7 +40,6 @@ 'sphinx.ext.todo', 'sphinx_rtd_theme', 'breathe', - # 'exhale', 'myst_parser', ] @@ -58,28 +57,9 @@ ) } -# Setup the exhale extension -# exhale_args = { -# # These arguments are required -# "containmentFolder": "./api", -# "rootFileName": "library_root.rst", -# "rootFileTitle": "Library API", -# "doxygenStripFromPath": "..", -# # Suggested optional arguments -# "createTreeView": True, -# # TIP: if using the sphinx-bootstrap-theme, you need -# # "treeViewIsBootstrap": True, -# "exhaleExecutesDoxygen": True, -# "exhaleDoxygenStdin": textwrap.dedent(""" -# INPUT = ../include -# EXCLUDE_SYMBOLS += internal __impl_* *impl *IMPL *_IMPL_* *Impl, -# XML_PROGRAMLISTING = NO -# """) -# } - breathe_doxygen_config_options = {'PREDEFINED': 'DOXYGEN_SHOULD_SKIP_THIS'} -# cpp_index_common_prefix = ["emp::"] +# cpp_index_common_prefix = ["emp", "emp::", "emp::web::", "web", "emp::web"] # Tell sphinx what the primary language being documented is. primary_domain = 'cpp' diff --git a/doc/library/base/base.md b/doc/library/base/base.md index fd2405f005..940bb558c9 100644 --- a/doc/library/base/base.md +++ b/doc/library/base/base.md @@ -62,10 +62,6 @@ trigger an assertion error and print the value of a. ### emp_assert API (base/assert.hpp) -% ```{doxygendefine} emp_assert -% :project: Empirical - :no-link:% ``` - ```{eval-rst} .. doxygendefine:: emp_assert :project: Empirical diff --git a/doc/library/bits/bits.md b/doc/library/bits/bits.md index 0f7b75ec61..e468987442 100644 --- a/doc/library/bits/bits.md +++ b/doc/library/bits/bits.md @@ -4,16 +4,16 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitMatrix.hpp - :project: Empirical - :no-link: + :sections: briefdescription detaileddescription +.. doxygenclass:: emp::BitMatrix + :members: + :undoc-members: ``` ## BitSet ```{eval-rst} -.. doxygenfile:: emp/bits/BitSet.hpp - :project: Empirical - :no-link: +.. doxygentypedef:: emp::BitSet ``` ## BitSet Utilities @@ -27,7 +27,7 @@ ## BitVector ```{eval-rst} -.. doxygenfile:: emp/bits/BitVector.hpp - :project: Empirical - :no-link: +.. doxygenclass:: emp::BitVector + :members: + :undoc-members: ``` diff --git a/doc/library/evolve/evolve.md b/doc/library/evolve/evolve.md index c3bb4a65df..89e6470a10 100644 --- a/doc/library/evolve/evolve.md +++ b/doc/library/evolve/evolve.md @@ -1,6 +1,6 @@ # Evolution tools -## World + From 0a17f74a410b2b39a6aa822bca82f0395f96cb9d Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 20 Jun 2023 22:01:01 -0400 Subject: [PATCH 07/80] Adjust boilerplate --- ci/impl/generate_boilerplate_file_docstrings.sh | 7 ++++--- include/emp/Evolve/NK-const.hpp | 6 +++--- include/emp/Evolve/NK.hpp | 6 +++--- include/emp/Evolve/OEE.hpp | 6 +++--- include/emp/Evolve/OrgInterface.hpp | 6 +++--- include/emp/Evolve/Resource.hpp | 6 +++--- include/emp/Evolve/StateGrid.hpp | 6 +++--- include/emp/Evolve/Systematics.hpp | 6 +++--- include/emp/Evolve/SystematicsAnalysis.hpp | 6 +++--- include/emp/Evolve/World.hpp | 6 +++--- include/emp/Evolve/World_iterator.hpp | 6 +++--- include/emp/Evolve/World_output.hpp | 6 +++--- include/emp/Evolve/World_reflect.hpp | 6 +++--- include/emp/Evolve/World_select.hpp | 6 +++--- include/emp/Evolve/World_structure.hpp | 6 +++--- include/emp/base/MapProxy.hpp | 6 +++--- include/emp/base/Ptr.hpp | 6 +++--- include/emp/base/_assert_macros.hpp | 6 +++--- include/emp/base/_assert_trigger.hpp | 6 +++--- include/emp/base/_emscripten_assert_trigger.hpp | 6 +++--- include/emp/base/_emscripten_error_trigger.hpp | 6 +++--- include/emp/base/_error_trigger.hpp | 6 +++--- include/emp/base/_is_streamable.hpp | 6 +++--- include/emp/base/_native_assert_trigger.hpp | 8 ++++---- include/emp/base/_native_error_trigger.hpp | 6 +++--- include/emp/base/_tdebug_assert_trigger.hpp | 6 +++--- include/emp/base/_tdebug_error_trigger.hpp | 6 +++--- include/emp/base/always_assert.hpp | 6 +++--- include/emp/base/always_assert_warning.hpp | 6 +++--- include/emp/base/array.hpp | 6 +++--- include/emp/base/assert.hpp | 6 +++--- include/emp/base/assert_warning.hpp | 6 +++--- include/emp/base/emscripten_assert.hpp | 6 +++--- include/emp/base/error.hpp | 6 +++--- include/emp/base/errors.hpp | 6 +++--- include/emp/base/map.hpp | 6 +++--- include/emp/base/optional.hpp | 6 +++--- include/emp/base/unordered_map.hpp | 6 +++--- include/emp/base/vector.hpp | 6 +++--- include/emp/bits/BitArray.hpp | 6 +++--- include/emp/bits/BitMatrix.hpp | 6 +++--- include/emp/bits/BitSet.hpp | 6 +++--- include/emp/bits/BitVector.hpp | 6 +++--- include/emp/bits/_bitset_helpers.hpp | 6 +++--- include/emp/bits/bitset_utils.hpp | 6 +++--- include/emp/compiler/DFA.hpp | 6 +++--- include/emp/compiler/Lexer.hpp | 6 +++--- include/emp/compiler/NFA.hpp | 6 +++--- include/emp/compiler/RegEx.hpp | 6 +++--- include/emp/compiler/lexer_utils.hpp | 6 +++--- include/emp/config/ArgManager.hpp | 6 +++--- include/emp/config/ConfigManager.hpp | 6 +++--- include/emp/config/SettingCombos.hpp | 6 +++--- include/emp/config/SettingConfig.hpp | 6 +++--- include/emp/config/command_line.hpp | 6 +++--- include/emp/config/config.hpp | 6 +++--- include/emp/config/config_utils.hpp | 6 +++--- include/emp/config/config_web_interface.hpp | 6 +++--- include/emp/control/Action.hpp | 6 +++--- include/emp/control/ActionManager.hpp | 6 +++--- include/emp/control/Signal.hpp | 6 +++--- include/emp/control/SignalControl.hpp | 6 +++--- include/emp/control/SignalManager.hpp | 6 +++--- include/emp/data/DataFile.hpp | 6 +++--- include/emp/data/DataInterface.hpp | 6 +++--- include/emp/data/DataLayout.hpp | 6 +++--- include/emp/data/DataLog.hpp | 6 +++--- include/emp/data/DataManager.hpp | 6 +++--- include/emp/data/DataMap.hpp | 6 +++--- include/emp/data/DataNode.hpp | 6 +++--- include/emp/data/MemoryImage.hpp | 6 +++--- include/emp/data/Trait.hpp | 6 +++--- include/emp/data/VarMap.hpp | 6 +++--- include/emp/datastructs/BloomFilter.hpp | 6 +++--- include/emp/datastructs/Bool.hpp | 6 +++--- include/emp/datastructs/Cache.hpp | 6 +++--- include/emp/datastructs/DynamicString.hpp | 6 +++--- include/emp/datastructs/Graph.hpp | 6 +++--- include/emp/datastructs/IndexMap.hpp | 6 +++--- include/emp/datastructs/QueueCache.hpp | 6 +++--- include/emp/datastructs/SmallFifoMap.hpp | 6 +++--- include/emp/datastructs/SmallVector.hpp | 6 +++--- include/emp/datastructs/StringMap.hpp | 6 +++--- include/emp/datastructs/TimeQueue.hpp | 6 +++--- include/emp/datastructs/TypeMap.hpp | 6 +++--- include/emp/datastructs/UnorderedIndexMap.hpp | 6 +++--- include/emp/datastructs/graph_utils.hpp | 6 +++--- include/emp/datastructs/hash_utils.hpp | 6 +++--- include/emp/datastructs/map_utils.hpp | 6 +++--- include/emp/datastructs/ra_set.hpp | 6 +++--- include/emp/datastructs/reference_vector.hpp | 6 +++--- include/emp/datastructs/set_utils.hpp | 6 +++--- include/emp/datastructs/tuple_struct.hpp | 6 +++--- include/emp/datastructs/tuple_utils.hpp | 6 +++--- include/emp/datastructs/valsort_map.hpp | 6 +++--- include/emp/datastructs/vector_utils.hpp | 6 +++--- include/emp/debug/alert.hpp | 6 +++--- include/emp/debug/debug.hpp | 6 +++--- include/emp/debug/mem_track.hpp | 6 +++--- include/emp/functional/AnyFunction.hpp | 6 +++--- include/emp/functional/FunctionSet.hpp | 6 +++--- include/emp/functional/GenericFunction.hpp | 6 +++--- include/emp/functional/flex_function.hpp | 6 +++--- include/emp/functional/memo_function.hpp | 6 +++--- include/emp/games/Mancala.hpp | 6 +++--- include/emp/games/Othello.hpp | 6 +++--- include/emp/games/Othello8.hpp | 6 +++--- include/emp/games/PayoffMatrix.hpp | 6 +++--- include/emp/geometry/Angle2D.hpp | 6 +++--- include/emp/geometry/Body2D.hpp | 6 +++--- include/emp/geometry/Circle2D.hpp | 6 +++--- include/emp/geometry/Physics2D.hpp | 6 +++--- include/emp/geometry/Point2D.hpp | 6 +++--- include/emp/geometry/Surface.hpp | 6 +++--- include/emp/geometry/Surface2D.hpp | 6 +++--- include/emp/hardware/AvidaCPU_InstLib.hpp | 6 +++--- include/emp/hardware/AvidaGP.hpp | 6 +++--- include/emp/hardware/BitSorter.hpp | 6 +++--- include/emp/hardware/EventDrivenGP.hpp | 6 +++--- include/emp/hardware/EventLib.hpp | 6 +++--- include/emp/hardware/Genome.hpp | 6 +++--- include/emp/hardware/InstLib.hpp | 6 +++--- include/emp/hardware/LinearCode.hpp | 6 +++--- include/emp/hardware/signalgp_utils.hpp | 6 +++--- include/emp/in_progress/BatchConfig.hpp | 6 +++--- include/emp/in_progress/ConfigLexer.hpp | 6 +++--- include/emp/in_progress/ConfigParser.hpp | 6 +++--- include/emp/in_progress/Empower/Empower.hpp | 6 +++--- include/emp/in_progress/Empower/MemoryImage.hpp | 6 +++--- include/emp/in_progress/Empower/Struct.hpp | 6 +++--- include/emp/in_progress/Empower/StructType.hpp | 6 +++--- include/emp/in_progress/Empower/Type.hpp | 6 +++--- include/emp/in_progress/Empower/TypeManager.hpp | 6 +++--- include/emp/in_progress/Empower/Var.hpp | 6 +++--- include/emp/in_progress/Empower/VarInfo.hpp | 6 +++--- include/emp/in_progress/Empower2/Var.hpp | 6 +++--- include/emp/in_progress/Parser.hpp | 6 +++--- include/emp/in_progress/Trait.hpp | 6 +++--- include/emp/in_progress/class.hpp | 6 +++--- include/emp/in_progress/constexpr/ce_array.hpp | 6 +++--- include/emp/in_progress/constexpr/ce_random.hpp | 6 +++--- include/emp/in_progress/constexpr/ce_string.hpp | 6 +++--- include/emp/in_progress/fixed.hpp | 6 +++--- include/emp/in_progress/struct.hpp | 6 +++--- include/emp/io/ContiguousStream.hpp | 6 +++--- include/emp/io/File.hpp | 6 +++--- include/emp/io/MemoryIStream.hpp | 6 +++--- include/emp/io/NullStream.hpp | 6 +++--- include/emp/io/StreamManager.hpp | 6 +++--- include/emp/io/ascii_utils.hpp | 6 +++--- include/emp/io/serialize.hpp | 6 +++--- include/emp/io/serialize_macros.hpp | 6 +++--- include/emp/matching/MatchBin.hpp | 6 +++--- include/emp/matching/MatchDepository.hpp | 6 +++--- include/emp/matching/_DepositoryEntry.hpp | 6 +++--- include/emp/matching/matchbin_metrics.hpp | 6 +++--- include/emp/matching/matchbin_regulators.hpp | 6 +++--- include/emp/matching/matchbin_selectors.hpp | 6 +++--- include/emp/matching/matchbin_utils.hpp | 6 +++--- .../emp/matching/regulators/PlusCountdownRegulator.hpp | 6 +++--- include/emp/matching/selectors_static/RankedSelector.hpp | 6 +++--- include/emp/math/Distribution.hpp | 6 +++--- include/emp/math/Fraction.hpp | 6 +++--- include/emp/math/Random.hpp | 6 +++--- include/emp/math/Range.hpp | 6 +++--- include/emp/math/combos.hpp | 6 +++--- include/emp/math/constants.hpp | 6 +++--- include/emp/math/distances.hpp | 6 +++--- include/emp/math/info_theory.hpp | 6 +++--- include/emp/math/math.hpp | 6 +++--- include/emp/math/random_utils.hpp | 6 +++--- include/emp/math/sequence_utils.hpp | 6 +++--- include/emp/math/spatial_stats.hpp | 6 +++--- include/emp/math/stats.hpp | 6 +++--- include/emp/meta/ConceptWrapper.hpp | 6 +++--- include/emp/meta/TypeID.hpp | 6 +++--- include/emp/meta/TypePack.hpp | 6 +++--- include/emp/meta/ValPack.hpp | 6 +++--- include/emp/meta/macro_math.hpp | 6 +++--- include/emp/meta/macros.hpp | 6 +++--- include/emp/meta/meta.hpp | 6 +++--- include/emp/meta/reflection.hpp | 6 +++--- include/emp/meta/type_traits.hpp | 6 +++--- include/emp/polyfill/span.hpp | 6 +++--- include/emp/prefab/Card.hpp | 6 +++--- include/emp/prefab/CodeBlock.hpp | 6 +++--- include/emp/prefab/Collapse.hpp | 6 +++--- include/emp/prefab/CommentBox.hpp | 6 +++--- include/emp/prefab/ConfigPanel.hpp | 6 +++--- include/emp/prefab/FontAwesomeIcon.hpp | 6 +++--- include/emp/prefab/LoadingIcon.hpp | 6 +++--- include/emp/prefab/LoadingModal.hpp | 6 +++--- include/emp/prefab/Modal.hpp | 6 +++--- include/emp/prefab/ReadoutPanel.hpp | 6 +++--- include/emp/prefab/ToggleSwitch.hpp | 6 +++--- include/emp/prefab/ValueBox.hpp | 6 +++--- include/emp/scholar/Author.hpp | 6 +++--- include/emp/scholar/Bibliography.hpp | 6 +++--- include/emp/scholar/Citation.hpp | 6 +++--- include/emp/testing/unit_tests.hpp | 6 +++--- include/emp/tools/SolveState.hpp | 6 +++--- include/emp/tools/TypeTracker.hpp | 6 +++--- include/emp/tools/attrs.hpp | 6 +++--- include/emp/tools/hash_namify.hpp | 6 +++--- include/emp/tools/keyname_utils.hpp | 6 +++--- include/emp/tools/string_utils.hpp | 6 +++--- include/emp/tools/timing.hpp | 6 +++--- include/emp/tools/unique.hpp | 6 +++--- include/emp/tools/value_utils.hpp | 6 +++--- include/emp/web/Animate.hpp | 6 +++--- include/emp/web/Attributes.hpp | 6 +++--- include/emp/web/Button.hpp | 6 +++--- include/emp/web/Canvas.hpp | 6 +++--- include/emp/web/CanvasAction.hpp | 6 +++--- include/emp/web/CanvasShape.hpp | 6 +++--- include/emp/web/Div.hpp | 6 +++--- include/emp/web/DocuExtras.hpp | 6 +++--- include/emp/web/Document.hpp | 6 +++--- include/emp/web/Element.hpp | 6 +++--- include/emp/web/FileInput.hpp | 6 +++--- include/emp/web/Font.hpp | 6 +++--- include/emp/web/Image.hpp | 6 +++--- include/emp/web/Input.hpp | 6 +++--- include/emp/web/JSWrap.hpp | 6 +++--- include/emp/web/KeypressManager.hpp | 6 +++--- include/emp/web/Listeners.hpp | 6 +++--- include/emp/web/NodeDomShim.hpp | 6 +++--- include/emp/web/RawImage.hpp | 6 +++--- include/emp/web/Selector.hpp | 6 +++--- include/emp/web/Style.hpp | 6 +++--- include/emp/web/Table.hpp | 6 +++--- include/emp/web/Text.hpp | 6 +++--- include/emp/web/TextArea.hpp | 6 +++--- include/emp/web/TextFeed.hpp | 6 +++--- include/emp/web/Tween.hpp | 6 +++--- include/emp/web/UrlParams.hpp | 6 +++--- include/emp/web/Widget.hpp | 6 +++--- include/emp/web/WidgetExtras.hpp | 6 +++--- include/emp/web/_FacetedWidget.hpp | 6 +++--- include/emp/web/_MochaTestRunner.hpp | 6 +++--- include/emp/web/_TableCell.hpp | 6 +++--- include/emp/web/_TableCol.hpp | 6 +++--- include/emp/web/_TableColGroup.hpp | 6 +++--- include/emp/web/_TableRow.hpp | 6 +++--- include/emp/web/_TableRowGroup.hpp | 6 +++--- include/emp/web/canvas_utils.hpp | 6 +++--- include/emp/web/color_map.hpp | 6 +++--- include/emp/web/commands.hpp | 6 +++--- include/emp/web/d3/axis.hpp | 6 +++--- include/emp/web/d3/d3_init.hpp | 6 +++--- include/emp/web/d3/dataset.hpp | 6 +++--- include/emp/web/d3/histogram.hpp | 6 +++--- include/emp/web/d3/layout.hpp | 6 +++--- include/emp/web/d3/scales.hpp | 6 +++--- include/emp/web/d3/selection.hpp | 6 +++--- include/emp/web/d3/svg_shapes.hpp | 6 +++--- include/emp/web/d3/utils.hpp | 6 +++--- include/emp/web/d3/visual_elements.hpp | 6 +++--- include/emp/web/d3/visualizations.hpp | 6 +++--- include/emp/web/emfunctions.hpp | 6 +++--- include/emp/web/events.hpp | 6 +++--- include/emp/web/init.hpp | 6 +++--- include/emp/web/js_utils.hpp | 6 +++--- include/emp/web/web.hpp | 6 +++--- 264 files changed, 794 insertions(+), 793 deletions(-) diff --git a/ci/impl/generate_boilerplate_file_docstrings.sh b/ci/impl/generate_boilerplate_file_docstrings.sh index a8fe3e8209..77ee6ed02f 100755 --- a/ci/impl/generate_boilerplate_file_docstrings.sh +++ b/ci/impl/generate_boilerplate_file_docstrings.sh @@ -13,7 +13,7 @@ for filename in $(cd include && find -- * -name '*.hpp' -type f); do done # stamp in expected boilerplate line-by-line - sed -i '1s|^.*$|/**|' "include/${filename}" + sed -i '1s|^.*$|/*|' "include/${filename}" sed -i '2s|^.*$| * @note This file is part of Empirical, https://github.com/devosoft/Empirical|' "include/${filename}" sed -i '3s|^.*$| * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md|' "include/${filename}" # only match if a @date isn't currently in place @@ -22,10 +22,11 @@ for filename in $(cd include && find -- * -name '*.hpp' -type f); do # and https://stackoverflow.com/a/12178023 # and https://stackoverflow.com/a/9053163 sed -i "/^ \* @date /b; 4s/^.*\$/ * @date $(date +'%Y')/" "include/${filename}" - sed -i '5s/^.*$/ */' "include/${filename}" - sed -i "6s/^.*\$/ * @file $(basename "${filename}")/" "include/${filename}" + # sed -i '5s/^.*$/ */' "include/${filename}" + sed -i '5s|^.*$|*/|' "include/${filename}" # only match if a @brief isn't currently in place # adapted from https://stackoverflow.com/a/5334825 + sed -i '6s|^.*$|/**|' "include/${filename}" sed -i "/^ \* @brief /b; 7s/^.*\$/ * @brief TODO./" "include/${filename}" # only match empty lines # add extra * to replace later with */ when constructing fresh diff --git a/include/emp/Evolve/NK-const.hpp b/include/emp/Evolve/NK-const.hpp index 868116ead8..7c520313e0 100644 --- a/include/emp/Evolve/NK-const.hpp +++ b/include/emp/Evolve/NK-const.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file NK-const.hpp +*/ +/** * @brief This file provides code to build NK landscapes, setup at compile time.. * * Knowing the size of N and K at compile time allow for slightly more optimized code, at the diff --git a/include/emp/Evolve/NK.hpp b/include/emp/Evolve/NK.hpp index a19fa8cece..7db72d0e58 100644 --- a/include/emp/Evolve/NK.hpp +++ b/include/emp/Evolve/NK.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file NK.hpp +*/ +/** * @brief This file provides code to build NK-based algorithms. * * Two version of landscapes are provided. NKLandscape pre-calculates the entire landscape, for diff --git a/include/emp/Evolve/OEE.hpp b/include/emp/Evolve/OEE.hpp index ceb9f619a9..3091c03c7d 100644 --- a/include/emp/Evolve/OEE.hpp +++ b/include/emp/Evolve/OEE.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file OEE.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/Evolve/OrgInterface.hpp b/include/emp/Evolve/OrgInterface.hpp index a7ebf9945f..8ebe601555 100644 --- a/include/emp/Evolve/OrgInterface.hpp +++ b/include/emp/Evolve/OrgInterface.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file OrgInterface.hpp +*/ +/** * @brief An interface between an organism and the outside world. * @note Status: PLANNING */ diff --git a/include/emp/Evolve/Resource.hpp b/include/emp/Evolve/Resource.hpp index 3d4028a504..4d8611b358 100644 --- a/include/emp/Evolve/Resource.hpp +++ b/include/emp/Evolve/Resource.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Resource.hpp +*/ +/** * @brief Implement resource-based selection. * * diff --git a/include/emp/Evolve/StateGrid.hpp b/include/emp/Evolve/StateGrid.hpp index a779e9fbce..900b98c5e6 100644 --- a/include/emp/Evolve/StateGrid.hpp +++ b/include/emp/Evolve/StateGrid.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018. - * - * @file StateGrid.hpp +*/ +/** * @brief StateGrid maintains a rectilinear grid that agents can traverse. * * State grids are a matrix of values, representing states of a 2D environment that an organism diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 323b6d780a..0274dd08ac 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file Systematics.hpp +*/ +/** * @brief Track genotypes, species, clades, or lineages of organisms in a world. * * diff --git a/include/emp/Evolve/SystematicsAnalysis.hpp b/include/emp/Evolve/SystematicsAnalysis.hpp index 4574207135..3cd2dede89 100644 --- a/include/emp/Evolve/SystematicsAnalysis.hpp +++ b/include/emp/Evolve/SystematicsAnalysis.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file SystematicsAnalysis.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/Evolve/World.hpp b/include/emp/Evolve/World.hpp index 7e869bdee8..9a185c083e 100644 --- a/include/emp/Evolve/World.hpp +++ b/include/emp/Evolve/World.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file World.hpp +*/ +/** * @brief Definition of a base class for a World template for use in evolutionary algorithms. * * A definition of the emp::World template, linking in specialized file handling, iterators, diff --git a/include/emp/Evolve/World_iterator.hpp b/include/emp/Evolve/World_iterator.hpp index 852a61f0bb..9930bdb149 100644 --- a/include/emp/Evolve/World_iterator.hpp +++ b/include/emp/Evolve/World_iterator.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2021. - * - * @file World_iterator.hpp +*/ +/** * @brief This file defines iterators for use with emp::World objects. * * @note Originally called PopulationIterator.h diff --git a/include/emp/Evolve/World_output.hpp b/include/emp/Evolve/World_output.hpp index 79b6cb1949..d9e2f0a07f 100644 --- a/include/emp/Evolve/World_output.hpp +++ b/include/emp/Evolve/World_output.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file World_output.hpp +*/ +/** * @brief TODO. * * This file contains functions for adding additional data files to Worlds. diff --git a/include/emp/Evolve/World_reflect.hpp b/include/emp/Evolve/World_reflect.hpp index ffb76badd9..db810b5d9f 100644 --- a/include/emp/Evolve/World_reflect.hpp +++ b/include/emp/Evolve/World_reflect.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file World_reflect.hpp +*/ +/** * @brief Handle reflection on organisms to setup reasonable defaults in World. * * @note None of the functions defined here should be called from outside the world object; diff --git a/include/emp/Evolve/World_select.hpp b/include/emp/Evolve/World_select.hpp index 65214f7356..a44ecf7573 100644 --- a/include/emp/Evolve/World_select.hpp +++ b/include/emp/Evolve/World_select.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2021. - * - * @file World_select.hpp +*/ +/** * @brief Functions for popular selection methods applied to worlds. */ diff --git a/include/emp/Evolve/World_structure.hpp b/include/emp/Evolve/World_structure.hpp index eb2e439835..3250ee50f1 100644 --- a/include/emp/Evolve/World_structure.hpp +++ b/include/emp/Evolve/World_structure.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file World_structure.hpp +*/ +/** * @brief Functions for popular world structure methods. */ diff --git a/include/emp/base/MapProxy.hpp b/include/emp/base/MapProxy.hpp index 2cb39e889c..8da97d30d6 100644 --- a/include/emp/base/MapProxy.hpp +++ b/include/emp/base/MapProxy.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file MapProxy.hpp +*/ +/** * @brief A proxy for indecies returned from any map type to ensure they are initialized. * @note Status: ALPHA */ diff --git a/include/emp/base/Ptr.hpp b/include/emp/base/Ptr.hpp index 3b32c353d8..8f12c0de48 100644 --- a/include/emp/base/Ptr.hpp +++ b/include/emp/base/Ptr.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2020. - * - * @file Ptr.hpp +*/ +/** * @brief A wrapper for pointers that does careful memory tracking (but only in debug mode). * @note Status: BETA * diff --git a/include/emp/base/_assert_macros.hpp b/include/emp/base/_assert_macros.hpp index 9292c4e2ff..af15ba45f9 100644 --- a/include/emp/base/_assert_macros.hpp +++ b/include/emp/base/_assert_macros.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file _assert_macros.hpp +*/ +/** * @brief Helper macros for building proper assert commands. * @note Status: RELEASE * diff --git a/include/emp/base/_assert_trigger.hpp b/include/emp/base/_assert_trigger.hpp index aaf9316ea4..267acb8163 100644 --- a/include/emp/base/_assert_trigger.hpp +++ b/include/emp/base/_assert_trigger.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file _assert_trigger.hpp +*/ +/** * @brief Assert trigger implementation selector. * @note For internal use. */ diff --git a/include/emp/base/_emscripten_assert_trigger.hpp b/include/emp/base/_emscripten_assert_trigger.hpp index cc76455c1c..5e1434f9e7 100644 --- a/include/emp/base/_emscripten_assert_trigger.hpp +++ b/include/emp/base/_emscripten_assert_trigger.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file _emscripten_assert_trigger.hpp +*/ +/** * @brief Assert trigger implementation. * @note For internal use. */ diff --git a/include/emp/base/_emscripten_error_trigger.hpp b/include/emp/base/_emscripten_error_trigger.hpp index cc32c45873..9ff0eebc3c 100644 --- a/include/emp/base/_emscripten_error_trigger.hpp +++ b/include/emp/base/_emscripten_error_trigger.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file _emscripten_error_trigger.hpp +*/ +/** * @brief Terminating error trigger implementation. * @note For internal use. * @TODO Reflect error message to browser (e.g., as an alert) diff --git a/include/emp/base/_error_trigger.hpp b/include/emp/base/_error_trigger.hpp index 2e3ca72a1c..b9ecd38ce2 100644 --- a/include/emp/base/_error_trigger.hpp +++ b/include/emp/base/_error_trigger.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file _error_trigger.hpp +*/ +/** * @brief Error trigger implementation selector * @note For internal use. */ diff --git a/include/emp/base/_is_streamable.hpp b/include/emp/base/_is_streamable.hpp index b4215cca9a..7b841bd1d4 100644 --- a/include/emp/base/_is_streamable.hpp +++ b/include/emp/base/_is_streamable.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file _is_streamable.hpp +*/ +/** * @brief Test at compile time whether a type can be streamed. * @note This header is for internal use to preserve levelization. * Include meta/type_traits.hpp to use is_streamable. diff --git a/include/emp/base/_native_assert_trigger.hpp b/include/emp/base/_native_assert_trigger.hpp index a52c695ae6..b6d8dbec2e 100644 --- a/include/emp/base/_native_assert_trigger.hpp +++ b/include/emp/base/_native_assert_trigger.hpp @@ -1,10 +1,10 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file _native_assert_trigger.hpp - * @brief Native asssert trigger implementation. +*/ +/** + * @brief Native assert trigger implementation. * @note For internal use. */ diff --git a/include/emp/base/_native_error_trigger.hpp b/include/emp/base/_native_error_trigger.hpp index d92305a9bc..172fd111b2 100644 --- a/include/emp/base/_native_error_trigger.hpp +++ b/include/emp/base/_native_error_trigger.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file _native_error_trigger.hpp +*/ +/** * @brief Terminating error trigger implementation. * @note For internal use. */ diff --git a/include/emp/base/_tdebug_assert_trigger.hpp b/include/emp/base/_tdebug_assert_trigger.hpp index 10233817c2..646718405b 100644 --- a/include/emp/base/_tdebug_assert_trigger.hpp +++ b/include/emp/base/_tdebug_assert_trigger.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file _tdebug_assert_trigger.hpp +*/ +/** * @brief Non-terminating assert trigger implementation for unit testing. * @note For internal use. */ diff --git a/include/emp/base/_tdebug_error_trigger.hpp b/include/emp/base/_tdebug_error_trigger.hpp index 3c174e60c5..688558ad64 100644 --- a/include/emp/base/_tdebug_error_trigger.hpp +++ b/include/emp/base/_tdebug_error_trigger.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file _tdebug_error_trigger.hpp +*/ +/** * @brief Non-terminating error trigger implementation for unit testing. * @note For internal use. */ diff --git a/include/emp/base/always_assert.hpp b/include/emp/base/always_assert.hpp index 96dde4422b..52f747df0b 100644 --- a/include/emp/base/always_assert.hpp +++ b/include/emp/base/always_assert.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020-2021. - * - * @file always_assert.hpp +*/ +/** * @brief A more dynamic replacement for standard library asserts. * @note Status: RELEASE * diff --git a/include/emp/base/always_assert_warning.hpp b/include/emp/base/always_assert_warning.hpp index a80bb1e83e..8d5ed5ec2f 100644 --- a/include/emp/base/always_assert_warning.hpp +++ b/include/emp/base/always_assert_warning.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file always_assert_warning.hpp +*/ +/** * @brief A more dynamic replacement for standard library asserts. * @note Status: RELEASE * diff --git a/include/emp/base/array.hpp b/include/emp/base/array.hpp index 054fd0300f..82f91639e7 100644 --- a/include/emp/base/array.hpp +++ b/include/emp/base/array.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file array.hpp +*/ +/** * @brief A drop-in wrapper for std::array; adds on bounds checking in debug mode. * @note Status: RELEASE * diff --git a/include/emp/base/assert.hpp b/include/emp/base/assert.hpp index 2a6a8f5e0c..74de4c0047 100644 --- a/include/emp/base/assert.hpp +++ b/include/emp/base/assert.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2020. - * - * @file assert.hpp +*/ +/** * @brief A more dynamic replacement for standard library asserts. * @note Status: RELEASE * diff --git a/include/emp/base/assert_warning.hpp b/include/emp/base/assert_warning.hpp index bdc7363b07..b7fb501485 100644 --- a/include/emp/base/assert_warning.hpp +++ b/include/emp/base/assert_warning.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file assert_warning.hpp +*/ +/** * @brief A non-terminating replacement for standard library asserts. * * A supplement for the system-level assert.h, called "emp_assert_warning" diff --git a/include/emp/base/emscripten_assert.hpp b/include/emp/base/emscripten_assert.hpp index a0cfd21048..c8ee91c59f 100644 --- a/include/emp/base/emscripten_assert.hpp +++ b/include/emp/base/emscripten_assert.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file emscripten_assert.hpp +*/ +/** * @brief Assert evaluated only in debug mode with Emscripten. */ diff --git a/include/emp/base/error.hpp b/include/emp/base/error.hpp index e2d62f8682..7f4f61b983 100644 --- a/include/emp/base/error.hpp +++ b/include/emp/base/error.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file error.hpp +*/ +/** * @brief Nearly-universal error, to use in place of emp_assert(false, ...). * Aborts program in both debug and release mode, but does NOT terminate in TDEBUG for testing. */ diff --git a/include/emp/base/errors.hpp b/include/emp/base/errors.hpp index 9fc005b897..2948d2e590 100644 --- a/include/emp/base/errors.hpp +++ b/include/emp/base/errors.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file errors.hpp +*/ +/** * @brief Tools to help manage various problems in command-line or Emscripten-based applications. * @note Status: ALPHA * diff --git a/include/emp/base/map.hpp b/include/emp/base/map.hpp index 7d58125a8d..6ad409f186 100644 --- a/include/emp/base/map.hpp +++ b/include/emp/base/map.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019-2020. - * - * @file map.hpp +*/ +/** * @brief A drop-in wrapper for std::map and std:multimap; makes sure we create vars on access. * @note Status: ALPHA * diff --git a/include/emp/base/optional.hpp b/include/emp/base/optional.hpp index e0902fb6ed..3f2fc6f922 100644 --- a/include/emp/base/optional.hpp +++ b/include/emp/base/optional.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file optional.hpp +*/ +/** * @brief Audited implementation of std::optional. * @note Status: RELEASE * diff --git a/include/emp/base/unordered_map.hpp b/include/emp/base/unordered_map.hpp index 9b4c4c664a..c118eebc0e 100644 --- a/include/emp/base/unordered_map.hpp +++ b/include/emp/base/unordered_map.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019-2020. - * - * @file unordered_map.hpp +*/ +/** * @brief A drop-in wrapper for std::unordered_map and unordered_multi_map; makes sure we create vars on access. * @note Status: ALPHA */ diff --git a/include/emp/base/vector.hpp b/include/emp/base/vector.hpp index 6fa7ec5aef..0525d31c86 100644 --- a/include/emp/base/vector.hpp +++ b/include/emp/base/vector.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019. - * - * @file vector.hpp +*/ +/** * @brief A drop-in wrapper for std::vector; adds on bounds checking in debug mode. * @note Status: BETA * diff --git a/include/emp/bits/BitArray.hpp b/include/emp/bits/BitArray.hpp index e89a2b0667..613fdfae14 100644 --- a/include/emp/bits/BitArray.hpp +++ b/include/emp/bits/BitArray.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file BitArray.hpp +*/ +/** * @brief An Array of a fixed number of bits; similar to std::bitset, but with extra bit magic. * @note Status: RELEASE * diff --git a/include/emp/bits/BitMatrix.hpp b/include/emp/bits/BitMatrix.hpp index a15ef586ee..a95a19bf3b 100644 --- a/include/emp/bits/BitMatrix.hpp +++ b/include/emp/bits/BitMatrix.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021 - * - * @file BitMatrix.hpp +*/ +/** * @brief A COL x ROW matrix of bits and provides easy indexing and manipulation * @note Status: BETA */ diff --git a/include/emp/bits/BitSet.hpp b/include/emp/bits/BitSet.hpp index 3904464147..553a37c460 100644 --- a/include/emp/bits/BitSet.hpp +++ b/include/emp/bits/BitSet.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file BitSet.hpp +*/ +/** * @brief A drop-in replacement for std::bitset, with additional bit magic features; aliases BitArray. * @note Status: RELEASE * diff --git a/include/emp/bits/BitVector.hpp b/include/emp/bits/BitVector.hpp index c00fb540cc..2330bc3cc1 100644 --- a/include/emp/bits/BitVector.hpp +++ b/include/emp/bits/BitVector.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file BitVector.hpp +*/ +/** * @brief A drop-in replacement for std::vector, with additional bitwise logic features. * @note Status: RELEASE * diff --git a/include/emp/bits/_bitset_helpers.hpp b/include/emp/bits/_bitset_helpers.hpp index a64bf242b0..cd83d8e003 100644 --- a/include/emp/bits/_bitset_helpers.hpp +++ b/include/emp/bits/_bitset_helpers.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file _bitset_helpers.hpp +*/ +/** * @brief An internal Empirical class with tools to build collections of bits. */ diff --git a/include/emp/bits/bitset_utils.hpp b/include/emp/bits/bitset_utils.hpp index d0ea890b40..331bb14996 100644 --- a/include/emp/bits/bitset_utils.hpp +++ b/include/emp/bits/bitset_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2020. - * - * @file bitset_utils.hpp +*/ +/** * @brief A set of simple functions to manipulate bitsets. * @note Status: BETA */ diff --git a/include/emp/compiler/DFA.hpp b/include/emp/compiler/DFA.hpp index fd8f6e852c..7c23b8f9f4 100644 --- a/include/emp/compiler/DFA.hpp +++ b/include/emp/compiler/DFA.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file DFA.hpp +*/ +/** * @brief A Deterministic Finite Automata simulator. * @note Status: BETA */ diff --git a/include/emp/compiler/Lexer.hpp b/include/emp/compiler/Lexer.hpp index c6d7d4a8dd..4feb47105f 100644 --- a/include/emp/compiler/Lexer.hpp +++ b/include/emp/compiler/Lexer.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019. - * - * @file Lexer.hpp +*/ +/** * @brief A general-purpose, fast lexer. * @note Status: ALPHA */ diff --git a/include/emp/compiler/NFA.hpp b/include/emp/compiler/NFA.hpp index ae3bd23dcd..3005885771 100644 --- a/include/emp/compiler/NFA.hpp +++ b/include/emp/compiler/NFA.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file NFA.hpp +*/ +/** * @brief A Non-deterministic Finite Automata simulator * @note Status: BETA * diff --git a/include/emp/compiler/RegEx.hpp b/include/emp/compiler/RegEx.hpp index a38ec0f97e..dd09c0697e 100644 --- a/include/emp/compiler/RegEx.hpp +++ b/include/emp/compiler/RegEx.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019. - * - * @file RegEx.hpp +*/ +/** * @brief Basic regular expression handler. * @note Status: BETA * diff --git a/include/emp/compiler/lexer_utils.hpp b/include/emp/compiler/lexer_utils.hpp index 458f0485d4..5230ddedf2 100644 --- a/include/emp/compiler/lexer_utils.hpp +++ b/include/emp/compiler/lexer_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file lexer_utils.hpp +*/ +/** * @brief A set of utilities to convert between NFAs and DFAs * @note Status: BETA */ diff --git a/include/emp/config/ArgManager.hpp b/include/emp/config/ArgManager.hpp index 176b7a5a7a..8147feb6b4 100644 --- a/include/emp/config/ArgManager.hpp +++ b/include/emp/config/ArgManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file ArgManager.hpp +*/ +/** * @brief A tool for sythesizing command-line arguments, URL query params, and config files. * @note Status: BETA */ diff --git a/include/emp/config/ConfigManager.hpp b/include/emp/config/ConfigManager.hpp index 4c760d555d..5cd55257c0 100644 --- a/include/emp/config/ConfigManager.hpp +++ b/include/emp/config/ConfigManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file ConfigManager.hpp +*/ +/** * @brief The ConfigManager templated class handles the building and configuration of new objects * of the target type. * diff --git a/include/emp/config/SettingCombos.hpp b/include/emp/config/SettingCombos.hpp index 879c878946..101ae08959 100644 --- a/include/emp/config/SettingCombos.hpp +++ b/include/emp/config/SettingCombos.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file SettingCombos.hpp +*/ +/** * @brief A tool for exploring all parameter combinations * @note Status: ALPHA */ diff --git a/include/emp/config/SettingConfig.hpp b/include/emp/config/SettingConfig.hpp index 7b059c8a4a..a4ea1504e1 100644 --- a/include/emp/config/SettingConfig.hpp +++ b/include/emp/config/SettingConfig.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file SettingConfig.hpp +*/ +/** * @brief A tool for collecting settings, including from files and the command line. * @note Status: DEPRECATED! */ diff --git a/include/emp/config/command_line.hpp b/include/emp/config/command_line.hpp index 1bc0c251e5..a140c2a32c 100644 --- a/include/emp/config/command_line.hpp +++ b/include/emp/config/command_line.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file command_line.hpp +*/ +/** * @brief This file contains tools for dealing with command-line arguments (argv and argc). * * Functions here include: diff --git a/include/emp/config/config.hpp b/include/emp/config/config.hpp index dccfcfefbd..1443252be9 100644 --- a/include/emp/config/config.hpp +++ b/include/emp/config/config.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019. - * - * @file config.hpp +*/ +/** * @brief Maintains a set of configuration options. * * This file defines a master configuration option Config, whose values can be loaded diff --git a/include/emp/config/config_utils.hpp b/include/emp/config/config_utils.hpp index e6fb43fb7c..ea80c341e3 100644 --- a/include/emp/config/config_utils.hpp +++ b/include/emp/config/config_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file config_utils.hpp +*/ +/** * @brief Helper functions for working with emp::Config objects. * */ diff --git a/include/emp/config/config_web_interface.hpp b/include/emp/config/config_web_interface.hpp index 647539fcd1..f32361cdd3 100644 --- a/include/emp/config/config_web_interface.hpp +++ b/include/emp/config/config_web_interface.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file config_web_interface.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/control/Action.hpp b/include/emp/control/Action.hpp index 2004ef2037..00e3393fd9 100644 --- a/include/emp/control/Action.hpp +++ b/include/emp/control/Action.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file Action.hpp +*/ +/** * @brief A mechanism to abstract functions from their underlying type and provide run-time names. * @note Status: Beta * diff --git a/include/emp/control/ActionManager.hpp b/include/emp/control/ActionManager.hpp index 32bf6df875..28d2d0dbe6 100644 --- a/include/emp/control/ActionManager.hpp +++ b/include/emp/control/ActionManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file ActionManager.hpp +*/ +/** * @brief ActionManager collects sets of Actions to be looked up or manipulated later. * @note Status: Beta */ diff --git a/include/emp/control/Signal.hpp b/include/emp/control/Signal.hpp index d347df85e1..cd245bccb1 100644 --- a/include/emp/control/Signal.hpp +++ b/include/emp/control/Signal.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file Signal.hpp +*/ +/** * @brief Allow functions to be bundled (as Actions) and triggered enmasse. * @note Status: Beta * diff --git a/include/emp/control/SignalControl.hpp b/include/emp/control/SignalControl.hpp index 82bf0a7982..200a9472dd 100644 --- a/include/emp/control/SignalControl.hpp +++ b/include/emp/control/SignalControl.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file SignalControl.hpp +*/ +/** * @brief The SignalControl class manages all of the signals and actions, linking them together * upon request (by name, base class, or derived class). * diff --git a/include/emp/control/SignalManager.hpp b/include/emp/control/SignalManager.hpp index 570c26bd18..cb95b8579f 100644 --- a/include/emp/control/SignalManager.hpp +++ b/include/emp/control/SignalManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file SignalManager.hpp +*/ +/** * @brief This file defines the SignalManager class, which collects sets of Signals to be looked up * or manipulated later. */ diff --git a/include/emp/data/DataFile.hpp b/include/emp/data/DataFile.hpp index b7ee56300a..d301583a06 100644 --- a/include/emp/data/DataFile.hpp +++ b/include/emp/data/DataFile.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file DataFile.hpp +*/ +/** * @brief DataFile objects use DataNode objects to dynamically fill out file contents. */ diff --git a/include/emp/data/DataInterface.hpp b/include/emp/data/DataInterface.hpp index 26f01bd54b..64a4fca26c 100644 --- a/include/emp/data/DataInterface.hpp +++ b/include/emp/data/DataInterface.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file DataInterface.hpp +*/ +/** * @brief DataInterface is a *generic* interface to a DataNode. */ diff --git a/include/emp/data/DataLayout.hpp b/include/emp/data/DataLayout.hpp index 6e0700167f..a0a2ad8b5c 100644 --- a/include/emp/data/DataLayout.hpp +++ b/include/emp/data/DataLayout.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019. - * - * @file DataLayout.hpp +*/ +/** * @brief A mapping of names to variables stored in a MemoryImage. * @note Status: ALPHA */ diff --git a/include/emp/data/DataLog.hpp b/include/emp/data/DataLog.hpp index 20022e530b..be2a996d9d 100644 --- a/include/emp/data/DataLog.hpp +++ b/include/emp/data/DataLog.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file DataLog.hpp +*/ +/** * @brief Tools for processing a single set of data. * @note Status: ALPHA * diff --git a/include/emp/data/DataManager.hpp b/include/emp/data/DataManager.hpp index 58f1febb98..a96cb48247 100644 --- a/include/emp/data/DataManager.hpp +++ b/include/emp/data/DataManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file DataManager.hpp +*/ +/** * @brief DataManager handles a set of DataNode objects with the same tracking settings. */ diff --git a/include/emp/data/DataMap.hpp b/include/emp/data/DataMap.hpp index a7d7deb435..189a857fe4 100644 --- a/include/emp/data/DataMap.hpp +++ b/include/emp/data/DataMap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018-2021. - * - * @file DataMap.hpp +*/ +/** * @brief A DataMap links names to arbitrary object types. * @note Status: ALPHA * diff --git a/include/emp/data/DataNode.hpp b/include/emp/data/DataNode.hpp index 27f4235347..7a894ce6aa 100644 --- a/include/emp/data/DataNode.hpp +++ b/include/emp/data/DataNode.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file DataNode.hpp +*/ +/** * @brief DataNode objects track a specific type of data over the course of a run. * * Collection: New data can be pushed or pulled. diff --git a/include/emp/data/MemoryImage.hpp b/include/emp/data/MemoryImage.hpp index 1bc0078afa..aca8d9cc2a 100644 --- a/include/emp/data/MemoryImage.hpp +++ b/include/emp/data/MemoryImage.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file MemoryImage.hpp +*/ +/** * @brief A managed set of Bytes to store any kind of data. * @note Status: ALPHA * diff --git a/include/emp/data/Trait.hpp b/include/emp/data/Trait.hpp index 92cf00f316..1e9a4168cb 100644 --- a/include/emp/data/Trait.hpp +++ b/include/emp/data/Trait.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Trait.hpp +*/ +/** * @brief Directly measure a target quality about a type of object. * * These objects are able to measure a specific trait on another object. They diff --git a/include/emp/data/VarMap.hpp b/include/emp/data/VarMap.hpp index 30132b2ac1..31b1b04836 100644 --- a/include/emp/data/VarMap.hpp +++ b/include/emp/data/VarMap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file VarMap.hpp +*/ +/** * @brief VarMaps track arbitrary data by name (slow) or id (faster). * @note Status: ALPHA */ diff --git a/include/emp/datastructs/BloomFilter.hpp b/include/emp/datastructs/BloomFilter.hpp index f699e64ae9..32822c3580 100644 --- a/include/emp/datastructs/BloomFilter.hpp +++ b/include/emp/datastructs/BloomFilter.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file BloomFilter.hpp +*/ +/** * @brief A Bloom filter implementation * * @note This file is included in Empirical (https://github.com/devosoft/Empirical) for convenience. diff --git a/include/emp/datastructs/Bool.hpp b/include/emp/datastructs/Bool.hpp index ff5397e0fc..a011879db0 100644 --- a/include/emp/datastructs/Bool.hpp +++ b/include/emp/datastructs/Bool.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file Bool.hpp +*/ +/** * @brief A bool representation that doesn't trip up std::vector * @note Status: ALPHA * diff --git a/include/emp/datastructs/Cache.hpp b/include/emp/datastructs/Cache.hpp index 70e465de4e..4158d285ef 100644 --- a/include/emp/datastructs/Cache.hpp +++ b/include/emp/datastructs/Cache.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file Cache.hpp +*/ +/** * @brief similar to an std::unordered_map, but all lookups come with a function to generate the result should the lookup fail. * @note Status: BETA */ diff --git a/include/emp/datastructs/DynamicString.hpp b/include/emp/datastructs/DynamicString.hpp index a17457c8bf..fdf4fdcd43 100644 --- a/include/emp/datastructs/DynamicString.hpp +++ b/include/emp/datastructs/DynamicString.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file DynamicString.hpp +*/ +/** * @brief A string handler where sections update dynamically based on functions. * @note Status: BETA */ diff --git a/include/emp/datastructs/Graph.hpp b/include/emp/datastructs/Graph.hpp index 2ba86b5935..e0b61c0269 100644 --- a/include/emp/datastructs/Graph.hpp +++ b/include/emp/datastructs/Graph.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file Graph.hpp +*/ +/** * @brief A simple, fast class for managing verticies (nodes) and edges. * @note Status: BETA */ diff --git a/include/emp/datastructs/IndexMap.hpp b/include/emp/datastructs/IndexMap.hpp index c737694d81..9b3922c656 100644 --- a/include/emp/datastructs/IndexMap.hpp +++ b/include/emp/datastructs/IndexMap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file IndexMap.hpp +*/ +/** * @brief A simple class to weight items differently within a container and return the correct index. * @note Status: BETA * diff --git a/include/emp/datastructs/QueueCache.hpp b/include/emp/datastructs/QueueCache.hpp index 2205c73282..6c736a9fe1 100644 --- a/include/emp/datastructs/QueueCache.hpp +++ b/include/emp/datastructs/QueueCache.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file QueueCache.hpp +*/ +/** * @brief A simple implementation of a Least-Recently Used Cache. * It orders elements by access time and removes the stalest ones in case maximum capacity is reached. */ diff --git a/include/emp/datastructs/SmallFifoMap.hpp b/include/emp/datastructs/SmallFifoMap.hpp index 82bfb5c642..70aadc55c6 100644 --- a/include/emp/datastructs/SmallFifoMap.hpp +++ b/include/emp/datastructs/SmallFifoMap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file SmallFifoMap.hpp +*/ +/** * @brief Store key value pairs in a fixed-sized array, bumping out the oldest * value when full. Optimized for small N. Requires N < 256. * diff --git a/include/emp/datastructs/SmallVector.hpp b/include/emp/datastructs/SmallVector.hpp index ceef2466d7..19452d4323 100644 --- a/include/emp/datastructs/SmallVector.hpp +++ b/include/emp/datastructs/SmallVector.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file SmallVector.hpp +*/ +/** * @brief A drop-in replacement for std::vector with optimization to handle * small vector sizes without dynamic allocation. It contains some number of * elements in-place, which allows it to avoid heap allocation when the actual diff --git a/include/emp/datastructs/StringMap.hpp b/include/emp/datastructs/StringMap.hpp index 14fc22af87..1d1f0da99c 100644 --- a/include/emp/datastructs/StringMap.hpp +++ b/include/emp/datastructs/StringMap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018-2021. - * - * @file StringMap.hpp +*/ +/** * @brief An std::unordered_map wrapper that deals smoothly with strings and fast compile-time optimizations. * @note Status: ALPHA * diff --git a/include/emp/datastructs/TimeQueue.hpp b/include/emp/datastructs/TimeQueue.hpp index ce2bb6e70f..c6dfc27800 100644 --- a/include/emp/datastructs/TimeQueue.hpp +++ b/include/emp/datastructs/TimeQueue.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file TimeQueue.hpp +*/ +/** * @brief A priority queue for timings, always marching forward. * @note Status: ALPHA * diff --git a/include/emp/datastructs/TypeMap.hpp b/include/emp/datastructs/TypeMap.hpp index a7327dae44..766f0666af 100644 --- a/include/emp/datastructs/TypeMap.hpp +++ b/include/emp/datastructs/TypeMap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file TypeMap.hpp +*/ +/** * @brief A class that will map types to values of a designated type. * @note Status: BETA */ diff --git a/include/emp/datastructs/UnorderedIndexMap.hpp b/include/emp/datastructs/UnorderedIndexMap.hpp index c24a72570b..0a9244aade 100644 --- a/include/emp/datastructs/UnorderedIndexMap.hpp +++ b/include/emp/datastructs/UnorderedIndexMap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2021. - * - * @file UnorderedIndexMap.hpp +*/ +/** * @brief A simple class to weight items differently within a container and return the correct index. * @note Status: BETA * diff --git a/include/emp/datastructs/graph_utils.hpp b/include/emp/datastructs/graph_utils.hpp index ab5439d01b..9773ad2b99 100644 --- a/include/emp/datastructs/graph_utils.hpp +++ b/include/emp/datastructs/graph_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file graph_utils.hpp +*/ +/** * @brief This file provides a number of tools for manipulating graphs. * @note Status: BETA */ diff --git a/include/emp/datastructs/hash_utils.hpp b/include/emp/datastructs/hash_utils.hpp index 363fd7f930..fe33f30393 100644 --- a/include/emp/datastructs/hash_utils.hpp +++ b/include/emp/datastructs/hash_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019-2021. - * - * @file hash_utils.hpp +*/ +/** * @brief This file provides tools for hashing values and containers. * @note Status: BETA */ diff --git a/include/emp/datastructs/map_utils.hpp b/include/emp/datastructs/map_utils.hpp index 567317affc..09b836a921 100644 --- a/include/emp/datastructs/map_utils.hpp +++ b/include/emp/datastructs/map_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file map_utils.hpp +*/ +/** * @brief A set of simple functions to manipulate maps. * @note Status: BETA */ diff --git a/include/emp/datastructs/ra_set.hpp b/include/emp/datastructs/ra_set.hpp index 62aa079b17..4ae788b9f7 100644 --- a/include/emp/datastructs/ra_set.hpp +++ b/include/emp/datastructs/ra_set.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2019 - * - * @file ra_set.hpp +*/ +/** * @brief This file defines a Random Access Set template. * @note Status: ALPHA */ diff --git a/include/emp/datastructs/reference_vector.hpp b/include/emp/datastructs/reference_vector.hpp index 931b272380..ac028d1ed5 100644 --- a/include/emp/datastructs/reference_vector.hpp +++ b/include/emp/datastructs/reference_vector.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file reference_vector.hpp +*/ +/** * @brief A version of vector that holds only references to objects. Be careful! * @note Status: ALPHA */ diff --git a/include/emp/datastructs/set_utils.hpp b/include/emp/datastructs/set_utils.hpp index 40e82089b9..be1d521be3 100644 --- a/include/emp/datastructs/set_utils.hpp +++ b/include/emp/datastructs/set_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file set_utils.hpp +*/ +/** * @brief Tools to save and load data from classes. * @note Status: ALPHA */ diff --git a/include/emp/datastructs/tuple_struct.hpp b/include/emp/datastructs/tuple_struct.hpp index 6906f30b79..4d1a1935e2 100644 --- a/include/emp/datastructs/tuple_struct.hpp +++ b/include/emp/datastructs/tuple_struct.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file tuple_struct.hpp +*/ +/** * @brief These macros will build a tuple and accessors to that tuple's members inside of a * class definintion. * diff --git a/include/emp/datastructs/tuple_utils.hpp b/include/emp/datastructs/tuple_utils.hpp index 3f1e028009..b72aacc693 100644 --- a/include/emp/datastructs/tuple_utils.hpp +++ b/include/emp/datastructs/tuple_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file tuple_utils.hpp +*/ +/** * @brief Functions to simplify the use of std::tuple * @note Status: RELEASE */ diff --git a/include/emp/datastructs/valsort_map.hpp b/include/emp/datastructs/valsort_map.hpp index 3faf29b382..fef92e05c2 100644 --- a/include/emp/datastructs/valsort_map.hpp +++ b/include/emp/datastructs/valsort_map.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file valsort_map.hpp +*/ +/** * @brief This file defines a map that is sorted by value, not key. * @note Status: ALPHA * diff --git a/include/emp/datastructs/vector_utils.hpp b/include/emp/datastructs/vector_utils.hpp index d30f02de66..46a6797a27 100644 --- a/include/emp/datastructs/vector_utils.hpp +++ b/include/emp/datastructs/vector_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2021. - * - * @file vector_utils.hpp +*/ +/** * @brief A set of simple functions to manipulate emp::vector * @note Status: BETA * diff --git a/include/emp/debug/alert.hpp b/include/emp/debug/alert.hpp index 70be769cd2..c399bb0762 100644 --- a/include/emp/debug/alert.hpp +++ b/include/emp/debug/alert.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file alert.hpp +*/ +/** * @brief Define an Alert function that goes to std::cerr in c++ or to Alert() in Javascript. * @note Status: RELEASE */ diff --git a/include/emp/debug/debug.hpp b/include/emp/debug/debug.hpp index 8fae099a1b..c66379c882 100644 --- a/include/emp/debug/debug.hpp +++ b/include/emp/debug/debug.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file debug.hpp +*/ +/** * @brief Basic tools for use in developing high-assurance code. * @note Status: BETA */ diff --git a/include/emp/debug/mem_track.hpp b/include/emp/debug/mem_track.hpp index e2a96da6bf..3027afdc4b 100644 --- a/include/emp/debug/mem_track.hpp +++ b/include/emp/debug/mem_track.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2019 - * - * @file mem_track.hpp +*/ +/** * @brief A set of macros to track how many instances of specific classes are made. * @note Status: BETA * diff --git a/include/emp/functional/AnyFunction.hpp b/include/emp/functional/AnyFunction.hpp index 63ac2d5ba6..b6a7e2dd13 100644 --- a/include/emp/functional/AnyFunction.hpp +++ b/include/emp/functional/AnyFunction.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file AnyFunction.hpp +*/ +/** * @brief Based on std::function, but with a generic base class. * @note Status: ALPHA * diff --git a/include/emp/functional/FunctionSet.hpp b/include/emp/functional/FunctionSet.hpp index 46d5c1fce8..44b8e01b9c 100644 --- a/include/emp/functional/FunctionSet.hpp +++ b/include/emp/functional/FunctionSet.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file FunctionSet.hpp +*/ +/** * @brief Setup a collection of functions, all with the same signature, that can be run as a group. * @note Status: BETA */ diff --git a/include/emp/functional/GenericFunction.hpp b/include/emp/functional/GenericFunction.hpp index e8e3240aad..1967c9ed34 100644 --- a/include/emp/functional/GenericFunction.hpp +++ b/include/emp/functional/GenericFunction.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2019 - * - * @file GenericFunction.hpp +*/ +/** * @brief Based on std::function, but with a common base class. * @note Status: ALPHA * diff --git a/include/emp/functional/flex_function.hpp b/include/emp/functional/flex_function.hpp index 191d24273a..63074e841d 100644 --- a/include/emp/functional/flex_function.hpp +++ b/include/emp/functional/flex_function.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file flex_function.hpp +*/ +/** * @brief Based on std::function, but holds default parameter values for calls with fewer args. * @note Status: ALPHA */ diff --git a/include/emp/functional/memo_function.hpp b/include/emp/functional/memo_function.hpp index e802cafe54..5af44ef50b 100644 --- a/include/emp/functional/memo_function.hpp +++ b/include/emp/functional/memo_function.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019 - * - * @file memo_function.hpp +*/ +/** * @brief A function that memorizes previous results to speed up any repeated calls. * @note Status: BETA */ diff --git a/include/emp/games/Mancala.hpp b/include/emp/games/Mancala.hpp index b3518374af..74d678c716 100644 --- a/include/emp/games/Mancala.hpp +++ b/include/emp/games/Mancala.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021 - * - * @file Mancala.hpp +*/ +/** * @brief A simple Malcala game state handler. */ diff --git a/include/emp/games/Othello.hpp b/include/emp/games/Othello.hpp index a3d17530a3..d6c4c33842 100644 --- a/include/emp/games/Othello.hpp +++ b/include/emp/games/Othello.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Othello.hpp +*/ +/** * @brief A simple Othello game state handler. * * @todo Add Hash for boards to be able to cachce moves. diff --git a/include/emp/games/Othello8.hpp b/include/emp/games/Othello8.hpp index 93d5d22574..1f70cda8c6 100644 --- a/include/emp/games/Othello8.hpp +++ b/include/emp/games/Othello8.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Othello8.hpp +*/ +/** * @brief A simple Othello game state handler limited to an 8x8 board. * * @todo Add Hash for boards to be able to cachce moves. diff --git a/include/emp/games/PayoffMatrix.hpp b/include/emp/games/PayoffMatrix.hpp index 20ea76b3ba..f23e5a1315 100644 --- a/include/emp/games/PayoffMatrix.hpp +++ b/include/emp/games/PayoffMatrix.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021 - * - * @file PayoffMatrix.hpp +*/ +/** * @brief A simple game theory payoff matrix. * */ diff --git a/include/emp/geometry/Angle2D.hpp b/include/emp/geometry/Angle2D.hpp index b0b62914ff..131d36592b 100644 --- a/include/emp/geometry/Angle2D.hpp +++ b/include/emp/geometry/Angle2D.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file Angle2D.hpp +*/ +/** * @brief emp::Angle maintains an angle on a 2D surface. * * The internal representation uses an int to represent angles. diff --git a/include/emp/geometry/Body2D.hpp b/include/emp/geometry/Body2D.hpp index 553228aefa..894f3fa6e7 100644 --- a/include/emp/geometry/Body2D.hpp +++ b/include/emp/geometry/Body2D.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file Body2D.hpp +*/ +/** * @brief This file defines classes to represent bodies that exist on a 2D surface. * * Each class should be able to: diff --git a/include/emp/geometry/Circle2D.hpp b/include/emp/geometry/Circle2D.hpp index 84801902e5..e482bdd10f 100644 --- a/include/emp/geometry/Circle2D.hpp +++ b/include/emp/geometry/Circle2D.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Circle2D.hpp +*/ +/** * @brief A class to manage circles in a 2D plane. */ diff --git a/include/emp/geometry/Physics2D.hpp b/include/emp/geometry/Physics2D.hpp index 9fe311607d..4dfdb107bf 100644 --- a/include/emp/geometry/Physics2D.hpp +++ b/include/emp/geometry/Physics2D.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Physics2D.hpp +*/ +/** * @brief Physics2D - handles movement and collissions in a simple 2D world. * */ diff --git a/include/emp/geometry/Point2D.hpp b/include/emp/geometry/Point2D.hpp index cc09e0222b..09751c8e6d 100644 --- a/include/emp/geometry/Point2D.hpp +++ b/include/emp/geometry/Point2D.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Point2D.hpp +*/ +/** * @brief A simple class to track value pairs of any kind, optimized for points in 2D Space. * * @note For maximal efficiency, prefer SquareMagnitude() and SquareDistance() diff --git a/include/emp/geometry/Surface.hpp b/include/emp/geometry/Surface.hpp index decf6d596e..fd6b1d3e28 100644 --- a/include/emp/geometry/Surface.hpp +++ b/include/emp/geometry/Surface.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Surface.hpp +*/ +/** * @brief This file defines a templated class to represent a 2D suface capable of maintaining data * about which 2D bodies are currently on that surface and rapidly identifying if they are * overlapping. diff --git a/include/emp/geometry/Surface2D.hpp b/include/emp/geometry/Surface2D.hpp index 293ae88902..92a5bef46b 100644 --- a/include/emp/geometry/Surface2D.hpp +++ b/include/emp/geometry/Surface2D.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Surface2D.hpp +*/ +/** * @brief This file defines a templated class to represent a 2D suface capable of maintaining data * about which 2D bodies are currently on that surface and rapidly identifying if they are * overlapping. diff --git a/include/emp/hardware/AvidaCPU_InstLib.hpp b/include/emp/hardware/AvidaCPU_InstLib.hpp index ca00e09969..6ce3765296 100644 --- a/include/emp/hardware/AvidaCPU_InstLib.hpp +++ b/include/emp/hardware/AvidaCPU_InstLib.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file AvidaCPU_InstLib.hpp +*/ +/** * @brief A specialized version of InstLib to handle AvidaCPU Instructions. */ diff --git a/include/emp/hardware/AvidaGP.hpp b/include/emp/hardware/AvidaGP.hpp index 2ced1ebf7b..4ca807490b 100644 --- a/include/emp/hardware/AvidaGP.hpp +++ b/include/emp/hardware/AvidaGP.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2021. - * - * @file AvidaGP.hpp +*/ +/** * @brief This is a simple, efficient CPU for and applied version of Avida. * * @todo Should we save a copy of the original genome? (or create a new "memory" member) diff --git a/include/emp/hardware/BitSorter.hpp b/include/emp/hardware/BitSorter.hpp index 746a4eab48..4e7ba4b3bb 100644 --- a/include/emp/hardware/BitSorter.hpp +++ b/include/emp/hardware/BitSorter.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file BitSorter.hpp +*/ +/** * @brief A quick series of comparisons intended for sorting bits. */ diff --git a/include/emp/hardware/EventDrivenGP.hpp b/include/emp/hardware/EventDrivenGP.hpp index 1bb670e1d0..474426bb60 100644 --- a/include/emp/hardware/EventDrivenGP.hpp +++ b/include/emp/hardware/EventDrivenGP.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file EventDrivenGP.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/hardware/EventLib.hpp b/include/emp/hardware/EventLib.hpp index 4fd9db33e1..e69782cf20 100644 --- a/include/emp/hardware/EventLib.hpp +++ b/include/emp/hardware/EventLib.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file EventLib.hpp +*/ +/** * @brief This file maintains information about events available in virtual hardware. * * This file is largely based on InstLib.h. diff --git a/include/emp/hardware/Genome.hpp b/include/emp/hardware/Genome.hpp index ad35313162..e6975eba68 100644 --- a/include/emp/hardware/Genome.hpp +++ b/include/emp/hardware/Genome.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file Genome.hpp +*/ +/** * @brief This is a simple, container for a series of instructions. * */ diff --git a/include/emp/hardware/InstLib.hpp b/include/emp/hardware/InstLib.hpp index fb4f40cedf..ce2cdcff67 100644 --- a/include/emp/hardware/InstLib.hpp +++ b/include/emp/hardware/InstLib.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2021. - * - * @file InstLib.hpp +*/ +/** * @brief This file maintains information about instructions availabel in virtual hardware. */ diff --git a/include/emp/hardware/LinearCode.hpp b/include/emp/hardware/LinearCode.hpp index 17d0f2d9bd..3581dfceb3 100644 --- a/include/emp/hardware/LinearCode.hpp +++ b/include/emp/hardware/LinearCode.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file LinearCode.hpp +*/ +/** * @brief A linear sequence of instructions. */ diff --git a/include/emp/hardware/signalgp_utils.hpp b/include/emp/hardware/signalgp_utils.hpp index 475f7eb9d7..9077089f0d 100644 --- a/include/emp/hardware/signalgp_utils.hpp +++ b/include/emp/hardware/signalgp_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file signalgp_utils.hpp +*/ +/** * @brief Helper functions for working with SignalGP virtual hardware/programs. * @todo Mutator class * @todo tests diff --git a/include/emp/in_progress/BatchConfig.hpp b/include/emp/in_progress/BatchConfig.hpp index 756b897bc2..c3e74b8df6 100644 --- a/include/emp/in_progress/BatchConfig.hpp +++ b/include/emp/in_progress/BatchConfig.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file BatchConfig.hpp +*/ +/** * @brief A tool to control a series of runs and keep them updated. * * Development notes: currently doesn't compile because of last line. diff --git a/include/emp/in_progress/ConfigLexer.hpp b/include/emp/in_progress/ConfigLexer.hpp index d7f7078e94..01f3e4bf90 100644 --- a/include/emp/in_progress/ConfigLexer.hpp +++ b/include/emp/in_progress/ConfigLexer.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file ConfigLexer.hpp +*/ +/** * @brief A simple lexer for the Empirical configuration language. * * Development notes: Initially building the lexer to be language specific, but a diff --git a/include/emp/in_progress/ConfigParser.hpp b/include/emp/in_progress/ConfigParser.hpp index b81b46088f..350c629a03 100644 --- a/include/emp/in_progress/ConfigParser.hpp +++ b/include/emp/in_progress/ConfigParser.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file ConfigParser.hpp +*/ +/** * @brief A simple parser for the Empirical configuration language. * * This parser is being implemented as a pushdown automata. diff --git a/include/emp/in_progress/Empower/Empower.hpp b/include/emp/in_progress/Empower/Empower.hpp index 5e9f8ba202..b6b525a324 100644 --- a/include/emp/in_progress/Empower/Empower.hpp +++ b/include/emp/in_progress/Empower/Empower.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Empower.hpp +*/ +/** * @brief A scripting language built inside of C++ * * Empower is a scripting language built inside of Empirical to simplify and the use of fast diff --git a/include/emp/in_progress/Empower/MemoryImage.hpp b/include/emp/in_progress/Empower/MemoryImage.hpp index adf3a8e80e..2413122b4e 100644 --- a/include/emp/in_progress/Empower/MemoryImage.hpp +++ b/include/emp/in_progress/Empower/MemoryImage.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file MemoryImage.hpp +*/ +/** * @brief A collection of arbitrary objects stored in a chunk of memory. */ diff --git a/include/emp/in_progress/Empower/Struct.hpp b/include/emp/in_progress/Empower/Struct.hpp index efacb088cc..f5e21875e6 100644 --- a/include/emp/in_progress/Empower/Struct.hpp +++ b/include/emp/in_progress/Empower/Struct.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Struct.hpp +*/ +/** * @brief Struct is a set of active variables, grouped by name (organized by a specific StructType) */ diff --git a/include/emp/in_progress/Empower/StructType.hpp b/include/emp/in_progress/Empower/StructType.hpp index fb3e31974d..9f2d49e2cf 100644 --- a/include/emp/in_progress/Empower/StructType.hpp +++ b/include/emp/in_progress/Empower/StructType.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file StructType.hpp +*/ +/** * @brief StructType maps variables to a MemoryImage; Struct is an instance of StructType * * @todo Immediately before setting a StructType to active, we can optimize variable ordering. diff --git a/include/emp/in_progress/Empower/Type.hpp b/include/emp/in_progress/Empower/Type.hpp index dfaa0fafb8..61aa2a16f4 100644 --- a/include/emp/in_progress/Empower/Type.hpp +++ b/include/emp/in_progress/Empower/Type.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Type.hpp +*/ +/** * @brief A collection of information about how to manage variables of a specified type. */ diff --git a/include/emp/in_progress/Empower/TypeManager.hpp b/include/emp/in_progress/Empower/TypeManager.hpp index 2e2b138b70..4592dc1473 100644 --- a/include/emp/in_progress/Empower/TypeManager.hpp +++ b/include/emp/in_progress/Empower/TypeManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file TypeManager.hpp +*/ +/** * @brief Handles creation or retrieval of type objects. */ diff --git a/include/emp/in_progress/Empower/Var.hpp b/include/emp/in_progress/Empower/Var.hpp index 84061f3526..c7f35332fd 100644 --- a/include/emp/in_progress/Empower/Var.hpp +++ b/include/emp/in_progress/Empower/Var.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Var.hpp +*/ +/** * @brief A collection of information about a single, instantiated variable in Empower */ diff --git a/include/emp/in_progress/Empower/VarInfo.hpp b/include/emp/in_progress/Empower/VarInfo.hpp index 7d0e30477d..e1c096ddc6 100644 --- a/include/emp/in_progress/Empower/VarInfo.hpp +++ b/include/emp/in_progress/Empower/VarInfo.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file VarInfo.hpp +*/ +/** * @brief Generic info about a single variable (across MemoryImages) */ diff --git a/include/emp/in_progress/Empower2/Var.hpp b/include/emp/in_progress/Empower2/Var.hpp index fd9604f255..9cc37a4ab2 100644 --- a/include/emp/in_progress/Empower2/Var.hpp +++ b/include/emp/in_progress/Empower2/Var.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Var.hpp +*/ +/** * @brief A collection of information about a single, instantiated variable in Empower * * diff --git a/include/emp/in_progress/Parser.hpp b/include/emp/in_progress/Parser.hpp index d681d64afa..3d2926b905 100644 --- a/include/emp/in_progress/Parser.hpp +++ b/include/emp/in_progress/Parser.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019. - * - * @file Parser.hpp +*/ +/** * @brief A general-purpose, fast parser. * @note Status: DEVELOPMENT * diff --git a/include/emp/in_progress/Trait.hpp b/include/emp/in_progress/Trait.hpp index 67ae5a61e9..84b6e8ed57 100644 --- a/include/emp/in_progress/Trait.hpp +++ b/include/emp/in_progress/Trait.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file Trait.hpp +*/ +/** * @brief The TraitDef class maintains a category of measuments about another class. * * Each trait is associated with a name, a description, and a type. Instance of that diff --git a/include/emp/in_progress/class.hpp b/include/emp/in_progress/class.hpp index 4bf693c54b..ecd6c78f09 100644 --- a/include/emp/in_progress/class.hpp +++ b/include/emp/in_progress/class.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file class.hpp +*/ +/** * @brief A re-engineering of tuple_struct.h, intended to be usable throughout Empirical. * * The EMP_CLASS macro builds an inexpensive class that diff --git a/include/emp/in_progress/constexpr/ce_array.hpp b/include/emp/in_progress/constexpr/ce_array.hpp index 74d50281dd..09648a0208 100644 --- a/include/emp/in_progress/constexpr/ce_array.hpp +++ b/include/emp/in_progress/constexpr/ce_array.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file ce_array.hpp +*/ +/** * @brief ce_array defines a limited array object for use within a constexpr class or function. * * STATUS: ALPHA diff --git a/include/emp/in_progress/constexpr/ce_random.hpp b/include/emp/in_progress/constexpr/ce_random.hpp index 8cb0e9a673..8742ba253c 100644 --- a/include/emp/in_progress/constexpr/ce_random.hpp +++ b/include/emp/in_progress/constexpr/ce_random.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file ce_random.hpp +*/ +/** * @brief A versatile and non-patterned pseudo-random-number generator. * * Status: DESIGN diff --git a/include/emp/in_progress/constexpr/ce_string.hpp b/include/emp/in_progress/constexpr/ce_string.hpp index 87ff2d7e5d..c814454b87 100644 --- a/include/emp/in_progress/constexpr/ce_string.hpp +++ b/include/emp/in_progress/constexpr/ce_string.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file ce_string.hpp +*/ +/** * @brief ce_string defines a limited string object for use within a constexpr class or function. * * Status: DESIGN. diff --git a/include/emp/in_progress/fixed.hpp b/include/emp/in_progress/fixed.hpp index 797c5b1108..65b0e58f26 100644 --- a/include/emp/in_progress/fixed.hpp +++ b/include/emp/in_progress/fixed.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015 - * - * @file fixed.hpp +*/ +/** * @brief A comprehensive (ideally) fixed-point number representation. * * Type-name: emp::fixed diff --git a/include/emp/in_progress/struct.hpp b/include/emp/in_progress/struct.hpp index 89d6b7a2be..0d7c1914e7 100644 --- a/include/emp/in_progress/struct.hpp +++ b/include/emp/in_progress/struct.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file struct.hpp +*/ +/** * @brief A re-engineering of tuple_struct.h, intended to be usable throughout Empirical. * * The EMP_STRUCT macro builds an inexpensive struct that diff --git a/include/emp/io/ContiguousStream.hpp b/include/emp/io/ContiguousStream.hpp index 224bd45758..2d5787248a 100644 --- a/include/emp/io/ContiguousStream.hpp +++ b/include/emp/io/ContiguousStream.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file ContiguousStream.hpp +*/ +/** * @brief Useful for streaming data to contiguous memory. * @note Status: RELEASE */ diff --git a/include/emp/io/File.hpp b/include/emp/io/File.hpp index fce046515b..864fd5b7b3 100644 --- a/include/emp/io/File.hpp +++ b/include/emp/io/File.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018-2020. - * - * @file File.hpp +*/ +/** * @brief The File object maintains a simple, in-memory file. * @note Status: BETA * diff --git a/include/emp/io/MemoryIStream.hpp b/include/emp/io/MemoryIStream.hpp index 040b0d3c84..d4a18066f6 100644 --- a/include/emp/io/MemoryIStream.hpp +++ b/include/emp/io/MemoryIStream.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file MemoryIStream.hpp +*/ +/** * @brief Useful for streaming data from contiguous memory. * @note Status: RELEASE */ diff --git a/include/emp/io/NullStream.hpp b/include/emp/io/NullStream.hpp index 43f3d869e1..d9c5e3578f 100644 --- a/include/emp/io/NullStream.hpp +++ b/include/emp/io/NullStream.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file NullStream.hpp +*/ +/** * @brief A handy no-operation output stream. * @note Status: BETA */ diff --git a/include/emp/io/StreamManager.hpp b/include/emp/io/StreamManager.hpp index a516f2257f..cf93916b7d 100644 --- a/include/emp/io/StreamManager.hpp +++ b/include/emp/io/StreamManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020-2021. - * - * @file StreamManager.hpp +*/ +/** * @brief The StreamManager object links names to files or other streams. * @note Status: BETA * diff --git a/include/emp/io/ascii_utils.hpp b/include/emp/io/ascii_utils.hpp index 8c7f47b4ed..e4b05b2050 100644 --- a/include/emp/io/ascii_utils.hpp +++ b/include/emp/io/ascii_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file ascii_utils.hpp +*/ +/** * @brief Tools for working with ascii output. * @note Status: ALPHA * diff --git a/include/emp/io/serialize.hpp b/include/emp/io/serialize.hpp index a6b27e339a..3406f83e18 100644 --- a/include/emp/io/serialize.hpp +++ b/include/emp/io/serialize.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2021. - * - * @file serialize.hpp +*/ +/** * @brief Tools to save and load data from classes. * @note Status: ALPHA * diff --git a/include/emp/io/serialize_macros.hpp b/include/emp/io/serialize_macros.hpp index 1574c81289..798d593800 100644 --- a/include/emp/io/serialize_macros.hpp +++ b/include/emp/io/serialize_macros.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2021. - * - * @file serialize_macros.hpp +*/ +/** * @brief Macros for simplifying to serialization of objects. * @note Status: ALPHA */ diff --git a/include/emp/matching/MatchBin.hpp b/include/emp/matching/MatchBin.hpp index c9199e9e85..04c1514714 100644 --- a/include/emp/matching/MatchBin.hpp +++ b/include/emp/matching/MatchBin.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file MatchBin.hpp +*/ +/** * @brief A container that supports flexible tag-based lookup. . * */ diff --git a/include/emp/matching/MatchDepository.hpp b/include/emp/matching/MatchDepository.hpp index 67550bae6a..3272cc00ea 100644 --- a/include/emp/matching/MatchDepository.hpp +++ b/include/emp/matching/MatchDepository.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file MatchDepository.hpp +*/ +/** * @brief A container for tag-based lookup, optimized for situations where * tags are not removed from the lookup set. * diff --git a/include/emp/matching/_DepositoryEntry.hpp b/include/emp/matching/_DepositoryEntry.hpp index df19fd3fc6..2e16e0cdd0 100644 --- a/include/emp/matching/_DepositoryEntry.hpp +++ b/include/emp/matching/_DepositoryEntry.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file _DepositoryEntry.hpp +*/ +/** * @brief Helper struct for MatchDepository. * */ diff --git a/include/emp/matching/matchbin_metrics.hpp b/include/emp/matching/matchbin_metrics.hpp index 5a2b340c90..153ec012ec 100644 --- a/include/emp/matching/matchbin_metrics.hpp +++ b/include/emp/matching/matchbin_metrics.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019-2021. - * - * @file matchbin_metrics.hpp +*/ +/** * @brief Metric structs that can be plugged into MatchBin. * */ diff --git a/include/emp/matching/matchbin_regulators.hpp b/include/emp/matching/matchbin_regulators.hpp index d6a9bb7398..2018fa2d70 100644 --- a/include/emp/matching/matchbin_regulators.hpp +++ b/include/emp/matching/matchbin_regulators.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019-2020. - * - * @file matchbin_regulators.hpp +*/ +/** * @brief Regulator structs that can be plugged into MatchBin. * */ diff --git a/include/emp/matching/matchbin_selectors.hpp b/include/emp/matching/matchbin_selectors.hpp index 1e7057e5c5..cbdf0e39c5 100644 --- a/include/emp/matching/matchbin_selectors.hpp +++ b/include/emp/matching/matchbin_selectors.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019-2021. - * - * @file matchbin_selectors.hpp +*/ +/** * @brief Selector structs that can be plugged into MatchBin. * */ diff --git a/include/emp/matching/matchbin_utils.hpp b/include/emp/matching/matchbin_utils.hpp index 893b971fcf..7ae7c1338e 100644 --- a/include/emp/matching/matchbin_utils.hpp +++ b/include/emp/matching/matchbin_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file matchbin_utils.hpp +*/ +/** * @brief Metric, Selector, and Regulator structs * that can be plugged into MatchBin. * diff --git a/include/emp/matching/regulators/PlusCountdownRegulator.hpp b/include/emp/matching/regulators/PlusCountdownRegulator.hpp index daf34375c7..32d3bab2b8 100644 --- a/include/emp/matching/regulators/PlusCountdownRegulator.hpp +++ b/include/emp/matching/regulators/PlusCountdownRegulator.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file PlusCountdownRegulator.hpp +*/ +/** * @brief Regulator that modifies match distance through addition * and decays to baseline with a countdown timer. * diff --git a/include/emp/matching/selectors_static/RankedSelector.hpp b/include/emp/matching/selectors_static/RankedSelector.hpp index a3d339e45d..983206896e 100644 --- a/include/emp/matching/selectors_static/RankedSelector.hpp +++ b/include/emp/matching/selectors_static/RankedSelector.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file RankedSelector.hpp +*/ +/** * @brief Selector that picks the N best matches within a threshold. * */ diff --git a/include/emp/math/Distribution.hpp b/include/emp/math/Distribution.hpp index ccf52b6681..0b89b61978 100644 --- a/include/emp/math/Distribution.hpp +++ b/include/emp/math/Distribution.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018-2020. - * - * @file Distribution.hpp +*/ +/** * @brief A set of pre-calculated discrete distributions that can quickly generate random values. * @note Status: ALPHA * diff --git a/include/emp/math/Fraction.hpp b/include/emp/math/Fraction.hpp index d53eabbeec..bec6c72f41 100644 --- a/include/emp/math/Fraction.hpp +++ b/include/emp/math/Fraction.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file Fraction.hpp +*/ +/** * @brief Tools to maintain a more exact fraction (rather than lose precision as a double) * @note Status: ALPHA */ diff --git a/include/emp/math/Random.hpp b/include/emp/math/Random.hpp index 23133fa066..20eb59e213 100644 --- a/include/emp/math/Random.hpp +++ b/include/emp/math/Random.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2021. - * - * @file Random.hpp +*/ +/** * @brief A versatile and non-patterned pseudo-random-number generator. * @note Status: RELEASE */ diff --git a/include/emp/math/Range.hpp b/include/emp/math/Range.hpp index 11954c2998..09862353d6 100644 --- a/include/emp/math/Range.hpp +++ b/include/emp/math/Range.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019 - * - * @file Range.hpp +*/ +/** * @brief A simple way to track value ranges * @note Status: BETA */ diff --git a/include/emp/math/combos.hpp b/include/emp/math/combos.hpp index 0327fff62b..1622e4a140 100644 --- a/include/emp/math/combos.hpp +++ b/include/emp/math/combos.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file combos.hpp +*/ +/** * @brief Tools to step through combinations of items. * * Step through all combinations of size K from a set of N values. For ComboIDs just return the diff --git a/include/emp/math/constants.hpp b/include/emp/math/constants.hpp index a6dfa20444..85e4f0e336 100644 --- a/include/emp/math/constants.hpp +++ b/include/emp/math/constants.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file constants.hpp +*/ +/** * @brief Commonly used constant values. * @note Status: RELEASE */ diff --git a/include/emp/math/distances.hpp b/include/emp/math/distances.hpp index 3407dc83f9..b01664bc95 100644 --- a/include/emp/math/distances.hpp +++ b/include/emp/math/distances.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file distances.hpp +*/ +/** * @brief Library of commonly used distance functions * @note Status: BETA */ diff --git a/include/emp/math/info_theory.hpp b/include/emp/math/info_theory.hpp index 2e8cb28a99..826e642793 100644 --- a/include/emp/math/info_theory.hpp +++ b/include/emp/math/info_theory.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021. - * - * @file info_theory.hpp +*/ +/** * @brief Tools to calculate Information Theory metrics. * @note Status: ALPHA * diff --git a/include/emp/math/math.hpp b/include/emp/math/math.hpp index 27b801c7ed..1b752aed3d 100644 --- a/include/emp/math/math.hpp +++ b/include/emp/math/math.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file math.hpp +*/ +/** * @brief Useful mathematical functions (that are constexpr when possible.) * @note Status: BETA (though new functions are added frequently) */ diff --git a/include/emp/math/random_utils.hpp b/include/emp/math/random_utils.hpp index 7a8aaec4df..64104f9803 100644 --- a/include/emp/math/random_utils.hpp +++ b/include/emp/math/random_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file random_utils.hpp +*/ +/** * @brief Helper functions for emp::Random for common random tasks. * @note Status: RELEASE */ diff --git a/include/emp/math/sequence_utils.hpp b/include/emp/math/sequence_utils.hpp index f61c148ce7..dcbe60d9fb 100644 --- a/include/emp/math/sequence_utils.hpp +++ b/include/emp/math/sequence_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2020. - * - * @file sequence_utils.hpp +*/ +/** * @brief Functions for analyzing with generic sequence types. * @note Status: BETA * diff --git a/include/emp/math/spatial_stats.hpp b/include/emp/math/spatial_stats.hpp index f471d142ff..086b6cd9e0 100644 --- a/include/emp/math/spatial_stats.hpp +++ b/include/emp/math/spatial_stats.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019 - * - * @file spatial_stats.hpp +*/ +/** * @brief Functions for calculating various spatial statistics. * @note Status: BETA */ diff --git a/include/emp/math/stats.hpp b/include/emp/math/stats.hpp index 16fac153cc..527bd3a6d8 100644 --- a/include/emp/math/stats.hpp +++ b/include/emp/math/stats.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019 - * - * @file stats.hpp +*/ +/** * @brief Functions for calculating various statistics about an ensemble. * @note Status: BETA */ diff --git a/include/emp/meta/ConceptWrapper.hpp b/include/emp/meta/ConceptWrapper.hpp index 36d024e13a..7b3b848b9b 100644 --- a/include/emp/meta/ConceptWrapper.hpp +++ b/include/emp/meta/ConceptWrapper.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018-2021. - * - * @file ConceptWrapper.hpp +*/ +/** * @brief A template wrapper that will either enforce functionality or provide default functions. * * Starting in future versions of C++, a concept is a set of requirements for a class to be used diff --git a/include/emp/meta/TypeID.hpp b/include/emp/meta/TypeID.hpp index 9b715cdfbd..e3f6ebb7c4 100644 --- a/include/emp/meta/TypeID.hpp +++ b/include/emp/meta/TypeID.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021 - * - * @file TypeID.hpp +*/ +/** * @brief TypeID provides an easy way to convert types to strings. * * Developer notes: diff --git a/include/emp/meta/TypePack.hpp b/include/emp/meta/TypePack.hpp index 74f38a8647..554a4237d0 100644 --- a/include/emp/meta/TypePack.hpp +++ b/include/emp/meta/TypePack.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file TypePack.hpp +*/ +/** * @brief A set of types that can be manipulated at compile time (good for metaprogramming) * * TypePacks are static structues that provide a large set of mechanisms to access and adjust diff --git a/include/emp/meta/ValPack.hpp b/include/emp/meta/ValPack.hpp index 3fbcf45024..6f655e1c97 100644 --- a/include/emp/meta/ValPack.hpp +++ b/include/emp/meta/ValPack.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file ValPack.hpp +*/ +/** * @brief A set of values that can be manipulated at compile time (good for metaprogramming) * * Any built-in type can be added to ValPack to be manipulated at compile time. diff --git a/include/emp/meta/macro_math.hpp b/include/emp/meta/macro_math.hpp index 59ca7f3989..2326cbd61d 100644 --- a/include/emp/meta/macro_math.hpp +++ b/include/emp/meta/macro_math.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file macro_math.hpp +*/ +/** * @brief Macros to build a pre-processor calculator system. * @note Status: RELEASE * diff --git a/include/emp/meta/macros.hpp b/include/emp/meta/macros.hpp index 63e71fc40c..f621d5aafd 100644 --- a/include/emp/meta/macros.hpp +++ b/include/emp/meta/macros.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file macros.hpp +*/ +/** * @brief Generally useful macros that can perform cools tricks. * @note Status: RELEASE * diff --git a/include/emp/meta/meta.hpp b/include/emp/meta/meta.hpp index b24d9d82ba..1f4fb22c28 100644 --- a/include/emp/meta/meta.hpp +++ b/include/emp/meta/meta.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021 - * - * @file meta.hpp +*/ +/** * @brief A bunch of C++ Template Meta-programming tricks. * * Developer notes: diff --git a/include/emp/meta/reflection.hpp b/include/emp/meta/reflection.hpp index 2ed2a0d991..acefbea0e0 100644 --- a/include/emp/meta/reflection.hpp +++ b/include/emp/meta/reflection.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file reflection.hpp +*/ +/** * @brief Macros and template utilities to help determine details about unknown classes. */ diff --git a/include/emp/meta/type_traits.hpp b/include/emp/meta/type_traits.hpp index 6d212abbf9..d359b957b3 100644 --- a/include/emp/meta/type_traits.hpp +++ b/include/emp/meta/type_traits.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file type_traits.hpp +*/ +/** * @brief Extensions on the standard library type traits to handle Empirical classes (such as Ptr). */ diff --git a/include/emp/polyfill/span.hpp b/include/emp/polyfill/span.hpp index 3755a7de79..620d0d7135 100644 --- a/include/emp/polyfill/span.hpp +++ b/include/emp/polyfill/span.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file span.hpp +*/ +/** * @brief Polyfill for C++20 std::span. */ diff --git a/include/emp/prefab/Card.hpp b/include/emp/prefab/Card.hpp index 964b1b6b46..a434f2fed3 100644 --- a/include/emp/prefab/Card.hpp +++ b/include/emp/prefab/Card.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Card.hpp +*/ +/** * @brief Wraps a Bootstrap card. */ diff --git a/include/emp/prefab/CodeBlock.hpp b/include/emp/prefab/CodeBlock.hpp index 6cc99bcf45..7af96d3c9f 100644 --- a/include/emp/prefab/CodeBlock.hpp +++ b/include/emp/prefab/CodeBlock.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file CodeBlock.hpp +*/ +/** * @brief Wraps a HighlightJS code block. */ diff --git a/include/emp/prefab/Collapse.hpp b/include/emp/prefab/Collapse.hpp index caa1a17ece..ebd26fcf62 100644 --- a/include/emp/prefab/Collapse.hpp +++ b/include/emp/prefab/Collapse.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file Collapse.hpp +*/ +/** * @brief Sets up a collapsable DOM element. */ diff --git a/include/emp/prefab/CommentBox.hpp b/include/emp/prefab/CommentBox.hpp index 90bd9bd86a..3c462c885f 100644 --- a/include/emp/prefab/CommentBox.hpp +++ b/include/emp/prefab/CommentBox.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file CommentBox.hpp +*/ +/** * @brief Create a light grey "comment bubble." * * TODO: When prefab tools for adding mobile only and desktop only diff --git a/include/emp/prefab/ConfigPanel.hpp b/include/emp/prefab/ConfigPanel.hpp index d217e03d38..2e0a5f7519 100644 --- a/include/emp/prefab/ConfigPanel.hpp +++ b/include/emp/prefab/ConfigPanel.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file ConfigPanel.hpp +*/ +/** * @brief Interfaces with emp::config objects to provide UI configuration. */ diff --git a/include/emp/prefab/FontAwesomeIcon.hpp b/include/emp/prefab/FontAwesomeIcon.hpp index c6cbfb945b..a1c6944b48 100644 --- a/include/emp/prefab/FontAwesomeIcon.hpp +++ b/include/emp/prefab/FontAwesomeIcon.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file FontAwesomeIcon.hpp +*/ +/** * @brief Wraps Font Awesome's icons. */ diff --git a/include/emp/prefab/LoadingIcon.hpp b/include/emp/prefab/LoadingIcon.hpp index bca66d01d9..23f88d5572 100644 --- a/include/emp/prefab/LoadingIcon.hpp +++ b/include/emp/prefab/LoadingIcon.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file LoadingIcon.hpp +*/ +/** * @brief Wraps Font Awesome's loading glyph. */ diff --git a/include/emp/prefab/LoadingModal.hpp b/include/emp/prefab/LoadingModal.hpp index 33ece8f223..e48de3e13a 100644 --- a/include/emp/prefab/LoadingModal.hpp +++ b/include/emp/prefab/LoadingModal.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020-2021 - * - * @file LoadingModal.hpp +*/ +/** * @brief Wrapper for loading moadal * * To add a loading modal to your web page, you must diff --git a/include/emp/prefab/Modal.hpp b/include/emp/prefab/Modal.hpp index 6b3ebf78a7..99b933668f 100644 --- a/include/emp/prefab/Modal.hpp +++ b/include/emp/prefab/Modal.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Modal.hpp +*/ +/** * @brief Wraps a Bootstrap modal. */ diff --git a/include/emp/prefab/ReadoutPanel.hpp b/include/emp/prefab/ReadoutPanel.hpp index 8fd221a887..ef2f45996c 100644 --- a/include/emp/prefab/ReadoutPanel.hpp +++ b/include/emp/prefab/ReadoutPanel.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file ReadoutPanel.hpp +*/ +/** * @brief UI framework for live statistic readouts. */ diff --git a/include/emp/prefab/ToggleSwitch.hpp b/include/emp/prefab/ToggleSwitch.hpp index 24b10bf36c..5235795359 100644 --- a/include/emp/prefab/ToggleSwitch.hpp +++ b/include/emp/prefab/ToggleSwitch.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file ToggleSwitch.hpp +*/ +/** * @brief Wraps Bootstrap's toggle switch. */ diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index df71348471..8d2323d08b 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file ValueBox.hpp +*/ +/** * @brief UI subcomponent for ConfigPanel and ReadoutPanel. */ diff --git a/include/emp/scholar/Author.hpp b/include/emp/scholar/Author.hpp index dd7ee5ea6d..9d82346fdb 100644 --- a/include/emp/scholar/Author.hpp +++ b/include/emp/scholar/Author.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file Author.hpp +*/ +/** * @brief Basic information about an author. * * Developer notes: diff --git a/include/emp/scholar/Bibliography.hpp b/include/emp/scholar/Bibliography.hpp index 6e1019d557..63487abccd 100644 --- a/include/emp/scholar/Bibliography.hpp +++ b/include/emp/scholar/Bibliography.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file Bibliography.hpp +*/ +/** * @brief A collection of references. */ diff --git a/include/emp/scholar/Citation.hpp b/include/emp/scholar/Citation.hpp index 15d90fcc65..f9bce6fef5 100644 --- a/include/emp/scholar/Citation.hpp +++ b/include/emp/scholar/Citation.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2019 - * - * @file Citation.hpp +*/ +/** * @brief Information about a citation for a single paper / book / etc. */ diff --git a/include/emp/testing/unit_tests.hpp b/include/emp/testing/unit_tests.hpp index 0c8abe4b3b..0bb6239cd0 100644 --- a/include/emp/testing/unit_tests.hpp +++ b/include/emp/testing/unit_tests.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2019 - * - * @file unit_tests.hpp +*/ +/** * @brief Macros to facilitate unit testing. * @note Status: RESURGENT (Was depricated; now back to ALPHA) * diff --git a/include/emp/tools/SolveState.hpp b/include/emp/tools/SolveState.hpp index 933107a75e..d6c7d86e0c 100644 --- a/include/emp/tools/SolveState.hpp +++ b/include/emp/tools/SolveState.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file SolveState.hpp +*/ +/** * @brief Used as part of a branching solver to keep track of the current state. * @note Status: BETA */ diff --git a/include/emp/tools/TypeTracker.hpp b/include/emp/tools/TypeTracker.hpp index bb0b8b3dcb..8a87a83a16 100644 --- a/include/emp/tools/TypeTracker.hpp +++ b/include/emp/tools/TypeTracker.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file TypeTracker.hpp +*/ +/** * @brief Track class types abstractly to dynamically call correct function overloads. * @note Status: BETA * diff --git a/include/emp/tools/attrs.hpp b/include/emp/tools/attrs.hpp index 451382f051..40f67d7e32 100644 --- a/include/emp/tools/attrs.hpp +++ b/include/emp/tools/attrs.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file attrs.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/tools/hash_namify.hpp b/include/emp/tools/hash_namify.hpp index b7a89346d4..509bd13ff1 100644 --- a/include/emp/tools/hash_namify.hpp +++ b/include/emp/tools/hash_namify.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file hash_namify.hpp +*/ +/** * @brief A method for mapping hash values to intuitive names. */ diff --git a/include/emp/tools/keyname_utils.hpp b/include/emp/tools/keyname_utils.hpp index d63c113751..c7cc676726 100644 --- a/include/emp/tools/keyname_utils.hpp +++ b/include/emp/tools/keyname_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file keyname_utils.hpp +*/ +/** * @brief Utility functions that support the keyname file naming convention. * * Plays nice with the Python package keyname. diff --git a/include/emp/tools/string_utils.hpp b/include/emp/tools/string_utils.hpp index 1c568240b3..b9cbb549a4 100644 --- a/include/emp/tools/string_utils.hpp +++ b/include/emp/tools/string_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2021. - * - * @file string_utils.hpp +*/ +/** * @brief Simple functions to manipulate strings. * @note Status: RELEASE */ diff --git a/include/emp/tools/timing.hpp b/include/emp/tools/timing.hpp index 61c78b06e9..b9cfba30e0 100644 --- a/include/emp/tools/timing.hpp +++ b/include/emp/tools/timing.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. - * - * @file timing.hpp +*/ +/** * @brief A collection of tools to help measure timing of code. * @note Status: BETA */ diff --git a/include/emp/tools/unique.hpp b/include/emp/tools/unique.hpp index 50fbc6911f..efc018017e 100644 --- a/include/emp/tools/unique.hpp +++ b/include/emp/tools/unique.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2020 - * - * @file unique.hpp +*/ +/** * @brief Methods to generate UIDs. */ diff --git a/include/emp/tools/value_utils.hpp b/include/emp/tools/value_utils.hpp index 2b48a3b18d..074ac352bd 100644 --- a/include/emp/tools/value_utils.hpp +++ b/include/emp/tools/value_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file value_utils.hpp +*/ +/** * @brief Simple functions to manipulate values. * @note Status: ALPHA */ diff --git a/include/emp/web/Animate.hpp b/include/emp/web/Animate.hpp index e45039136f..ca1111bf1e 100644 --- a/include/emp/web/Animate.hpp +++ b/include/emp/web/Animate.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Animate.hpp +*/ +/** * @brief Manage animations on a web site. * * To build an animation, you must provide a function to be run repeatedly. When Start() diff --git a/include/emp/web/Attributes.hpp b/include/emp/web/Attributes.hpp index c14e9f9e0c..25ba162de7 100644 --- a/include/emp/web/Attributes.hpp +++ b/include/emp/web/Attributes.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file Attributes.hpp +*/ +/** * @brief An Attributes class for tracking non-style features about HTML objects */ diff --git a/include/emp/web/Button.hpp b/include/emp/web/Button.hpp index 5919d0f9d2..5b77584052 100644 --- a/include/emp/web/Button.hpp +++ b/include/emp/web/Button.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018. - * - * @file Button.hpp +*/ +/** * @brief Create/control an HTML button and call a specified function when that button is clicked. * * Use example: diff --git a/include/emp/web/Canvas.hpp b/include/emp/web/Canvas.hpp index 3c5d0f3dde..2045d0f842 100644 --- a/include/emp/web/Canvas.hpp +++ b/include/emp/web/Canvas.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Canvas.hpp +*/ +/** * @brief Manage an HTML canvas object. * */ diff --git a/include/emp/web/CanvasAction.hpp b/include/emp/web/CanvasAction.hpp index c0ad0ba657..afdd5e0d96 100644 --- a/include/emp/web/CanvasAction.hpp +++ b/include/emp/web/CanvasAction.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file CanvasAction.hpp +*/ +/** * @brief Define a base class for all actions that can be done to widgets, plus simple actions. * * CanvasAction objects modify the appearance of a canvas and can be tracked to reconstruct the diff --git a/include/emp/web/CanvasShape.hpp b/include/emp/web/CanvasShape.hpp index 59d9c6ce07..3b94658bdd 100644 --- a/include/emp/web/CanvasShape.hpp +++ b/include/emp/web/CanvasShape.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file CanvasShape.hpp +*/ +/** * @brief Define simple shapes to draw on a canvas. * * Canvas shapes can be definied in detail, describing how they modify a canvas. diff --git a/include/emp/web/Div.hpp b/include/emp/web/Div.hpp index 8f78d6b9b9..dd609b02bf 100644 --- a/include/emp/web/Div.hpp +++ b/include/emp/web/Div.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Div.hpp +*/ +/** * @brief Div Widgets maintain an ordered collection of other widgets in an HTML div. * * When printed to the web page, these internal widgets are presented in order. diff --git a/include/emp/web/DocuExtras.hpp b/include/emp/web/DocuExtras.hpp index 026a23157a..d7e774a24c 100644 --- a/include/emp/web/DocuExtras.hpp +++ b/include/emp/web/DocuExtras.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2019 - * - * @file DocuExtras.hpp +*/ +/** * @brief Control the styling and attributes of an existing div without nuking * the content inside it. * diff --git a/include/emp/web/Document.hpp b/include/emp/web/Document.hpp index b34ef054db..0feaa80e22 100644 --- a/include/emp/web/Document.hpp +++ b/include/emp/web/Document.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Document.hpp +*/ +/** * @brief Manage an entire document. * * The Document class is built off of Div, but initializes the EMP web framework, if diff --git a/include/emp/web/Element.hpp b/include/emp/web/Element.hpp index 1a4fec7062..adda4467fc 100644 --- a/include/emp/web/Element.hpp +++ b/include/emp/web/Element.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file Element.hpp +*/ +/** * @brief Element Widgets maintain an ordered collection of other widgets * in a HTML element with any tag (e.g., div, footer, header, p, etc.) * diff --git a/include/emp/web/FileInput.hpp b/include/emp/web/FileInput.hpp index 818316ff19..03c9d6c78a 100644 --- a/include/emp/web/FileInput.hpp +++ b/include/emp/web/FileInput.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file FileInput.hpp +*/ +/** * @brief Specs for the FileInput widget (click on to upload a file) * * @todo Setup FileInput to work outside of web mode as well. diff --git a/include/emp/web/Font.hpp b/include/emp/web/Font.hpp index cadf971d4a..1614f347bc 100644 --- a/include/emp/web/Font.hpp +++ b/include/emp/web/Font.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file Font.hpp +*/ +/** * @brief Maintains basic information about a font to be used in HTML. */ diff --git a/include/emp/web/Image.hpp b/include/emp/web/Image.hpp index 0e60ad9e87..d5f50c8b69 100644 --- a/include/emp/web/Image.hpp +++ b/include/emp/web/Image.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Image.hpp +*/ +/** * @brief Easily load an image and place it in a document. */ diff --git a/include/emp/web/Input.hpp b/include/emp/web/Input.hpp index 55f4c70d56..37745cf786 100644 --- a/include/emp/web/Input.hpp +++ b/include/emp/web/Input.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Input.hpp +*/ +/** * @brief Create/control an HTML input and call a specified function when it receives input. * * Use example: diff --git a/include/emp/web/JSWrap.hpp b/include/emp/web/JSWrap.hpp index 4bb1e4b08a..e2c2594ca5 100644 --- a/include/emp/web/JSWrap.hpp +++ b/include/emp/web/JSWrap.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file JSWrap.hpp +*/ +/** * @brief Wrap a C++ function and convert it to an integer that can be called from Javascript * * To wrap a function, call: diff --git a/include/emp/web/KeypressManager.hpp b/include/emp/web/KeypressManager.hpp index c02dac54e3..620ae81a33 100644 --- a/include/emp/web/KeypressManager.hpp +++ b/include/emp/web/KeypressManager.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file KeypressManager.hpp +*/ +/** * @brief KeypressManager is a tracker for keypresses in HTML5 pages. * * When a KeypressManager is created, it can be given functions to run in response diff --git a/include/emp/web/Listeners.hpp b/include/emp/web/Listeners.hpp index 43fabef042..99ecb10287 100644 --- a/include/emp/web/Listeners.hpp +++ b/include/emp/web/Listeners.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file Listeners.hpp +*/ +/** * @brief A class for tracking font event listeners for Widgets */ diff --git a/include/emp/web/NodeDomShim.hpp b/include/emp/web/NodeDomShim.hpp index 01ac1e3729..db976dcdbe 100644 --- a/include/emp/web/NodeDomShim.hpp +++ b/include/emp/web/NodeDomShim.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file NodeDomShim.hpp +*/ +/** * @brief Shim for Empirical compatibility with node.js. Mimicks the browser * document object model (DOM). */ diff --git a/include/emp/web/RawImage.hpp b/include/emp/web/RawImage.hpp index 3e4f453c68..a24ffb0713 100644 --- a/include/emp/web/RawImage.hpp +++ b/include/emp/web/RawImage.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file RawImage.hpp +*/ +/** * @brief Handle the fundamental loading of an image (without Widget tracking) */ diff --git a/include/emp/web/Selector.hpp b/include/emp/web/Selector.hpp index a63fc4f838..c032ec4389 100644 --- a/include/emp/web/Selector.hpp +++ b/include/emp/web/Selector.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Selector.hpp +*/ +/** * @brief Specs for the Selector widget. * * A Selector widget provides the user with a pull-down menu. It can be diff --git a/include/emp/web/Style.hpp b/include/emp/web/Style.hpp index 73a3f032bd..8248b158ce 100644 --- a/include/emp/web/Style.hpp +++ b/include/emp/web/Style.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Style.hpp +*/ +/** * @brief A CSS class for tracking font style, etc. */ diff --git a/include/emp/web/Table.hpp b/include/emp/web/Table.hpp index 3700a181bb..7030434abc 100644 --- a/include/emp/web/Table.hpp +++ b/include/emp/web/Table.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Table.hpp +*/ +/** * @brief Specs for the Table widget. * * TableInfo is the core information for a table and has two helper classes: diff --git a/include/emp/web/Text.hpp b/include/emp/web/Text.hpp index 1e28d868c9..56328009cb 100644 --- a/include/emp/web/Text.hpp +++ b/include/emp/web/Text.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file Text.hpp +*/ +/** * @brief Specs for the Text widget. * * A representation of text on a web page. Text Widgets can be included inside of Divs or diff --git a/include/emp/web/TextArea.hpp b/include/emp/web/TextArea.hpp index d866ab46bc..4bc4d11f76 100644 --- a/include/emp/web/TextArea.hpp +++ b/include/emp/web/TextArea.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file TextArea.hpp +*/ +/** * @brief Specs for the TextArea widget. * * diff --git a/include/emp/web/TextFeed.hpp b/include/emp/web/TextFeed.hpp index 997c7da8db..dcaa46693f 100644 --- a/include/emp/web/TextFeed.hpp +++ b/include/emp/web/TextFeed.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file TextFeed.hpp +*/ +/** * @brief A representation of text on a web page optimized for rapid appends. * */ diff --git a/include/emp/web/Tween.hpp b/include/emp/web/Tween.hpp index b832f01960..3c98742f1f 100644 --- a/include/emp/web/Tween.hpp +++ b/include/emp/web/Tween.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file Tween.hpp +*/ +/** * @brief A Tween manages the gradual shift in properties of one or more widgets over time. * * To create a Tween, a duration must be specified, along with an optional default diff --git a/include/emp/web/UrlParams.hpp b/include/emp/web/UrlParams.hpp index eb537eb72b..5f86bc7ca9 100644 --- a/include/emp/web/UrlParams.hpp +++ b/include/emp/web/UrlParams.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file UrlParams.hpp +*/ +/** * @brief Get an unordered_map containing url query key/value parameters. * */ diff --git a/include/emp/web/Widget.hpp b/include/emp/web/Widget.hpp index a14fbc161a..100cfaec7e 100644 --- a/include/emp/web/Widget.hpp +++ b/include/emp/web/Widget.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2019. - * - * @file Widget.hpp +*/ +/** * @brief Widgets maintain individual components on a web page and link to Elements * * Each HTML Widget has all of its details stored in a WidgetInfo object; Multiple Widgets can diff --git a/include/emp/web/WidgetExtras.hpp b/include/emp/web/WidgetExtras.hpp index 872dd7345f..f0f6a45d1c 100644 --- a/include/emp/web/WidgetExtras.hpp +++ b/include/emp/web/WidgetExtras.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file WidgetExtras.hpp +*/ +/** * @brief A collection of extra details about HTML Widgets (attributes, style, listerns) */ diff --git a/include/emp/web/_FacetedWidget.hpp b/include/emp/web/_FacetedWidget.hpp index c1d4260971..5c3b8d2e31 100644 --- a/include/emp/web/_FacetedWidget.hpp +++ b/include/emp/web/_FacetedWidget.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file _FacetedWidget.hpp +*/ +/** * @brief The FacetedWidget class is used to access the protected methods of WidgetFacet such * as SetCSS and SetAttr. An example of its use can be found in include/emp/prefab/Collapse.h * diff --git a/include/emp/web/_MochaTestRunner.hpp b/include/emp/web/_MochaTestRunner.hpp index 14449b2e36..d5fa9002b5 100644 --- a/include/emp/web/_MochaTestRunner.hpp +++ b/include/emp/web/_MochaTestRunner.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file _MochaTestRunner.hpp +*/ +/** * @brief Utility class for managing software testing for Emscripten web code using the Karma + Mocha * javascript testing framework. * diff --git a/include/emp/web/_TableCell.hpp b/include/emp/web/_TableCell.hpp index 6d3f037e97..a07bd6364a 100644 --- a/include/emp/web/_TableCell.hpp +++ b/include/emp/web/_TableCell.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018. - * - * @file _TableCell.hpp +*/ +/** * @brief The TableCell widget, which behaves like the Table widget, but focuses on a single cell. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableCol.hpp b/include/emp/web/_TableCol.hpp index daeaa86e93..819d755c56 100644 --- a/include/emp/web/_TableCol.hpp +++ b/include/emp/web/_TableCol.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018. - * - * @file _TableCol.hpp +*/ +/** * @brief The TableCol widget, which behaves like the Table widget, but focuses on a single column. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableColGroup.hpp b/include/emp/web/_TableColGroup.hpp index c3b4eb7d09..9cacf989c9 100644 --- a/include/emp/web/_TableColGroup.hpp +++ b/include/emp/web/_TableColGroup.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018. - * - * @file _TableColGroup.hpp +*/ +/** * @brief The TableColGoup widget, which behaves like the Table widget, but focuses on a group of columns. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableRow.hpp b/include/emp/web/_TableRow.hpp index 16289f02ee..da39289e45 100644 --- a/include/emp/web/_TableRow.hpp +++ b/include/emp/web/_TableRow.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018. - * - * @file _TableRow.hpp +*/ +/** * @brief The TableRow widget, which behaves like the Table widget, but focuses on a single row. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableRowGroup.hpp b/include/emp/web/_TableRowGroup.hpp index 354299d91c..9bc3568fc2 100644 --- a/include/emp/web/_TableRowGroup.hpp +++ b/include/emp/web/_TableRowGroup.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018. - * - * @file _TableRowGroup.hpp +*/ +/** * @brief The TableRowGoup widget, which behaves like the Table widget, but focuses on a group of rows. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/canvas_utils.hpp b/include/emp/web/canvas_utils.hpp index d6018050f8..6b72ac3ad0 100644 --- a/include/emp/web/canvas_utils.hpp +++ b/include/emp/web/canvas_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file canvas_utils.hpp +*/ +/** * @brief Various versions of the Draw() function to draw images onto a canvas. * * Each version of Draw() takes a canvas widget and some form of data to be drawn on the widget, diff --git a/include/emp/web/color_map.hpp b/include/emp/web/color_map.hpp index db559d58aa..3b7a56e72b 100644 --- a/include/emp/web/color_map.hpp +++ b/include/emp/web/color_map.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file color_map.hpp +*/ +/** * @brief Tools to dynamically build (and cache) color maps. */ diff --git a/include/emp/web/commands.hpp b/include/emp/web/commands.hpp index 8eb5f22bad..9c2f687149 100644 --- a/include/emp/web/commands.hpp +++ b/include/emp/web/commands.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file commands.hpp +*/ +/** * @brief A set of command-defining classes that can be fed into widgets using the << operator. */ diff --git a/include/emp/web/d3/axis.hpp b/include/emp/web/d3/axis.hpp index 93dbfb4808..3adf539057 100644 --- a/include/emp/web/d3/axis.hpp +++ b/include/emp/web/d3/axis.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file axis.hpp +*/ +/** * @brief Handle drawing of axes on D3 graphts. */ diff --git a/include/emp/web/d3/d3_init.hpp b/include/emp/web/d3/d3_init.hpp index 4b1d251035..98d65f287c 100644 --- a/include/emp/web/d3/d3_init.hpp +++ b/include/emp/web/d3/d3_init.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file d3_init.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/web/d3/dataset.hpp b/include/emp/web/d3/dataset.hpp index 01e31a35c5..de599965ea 100644 --- a/include/emp/web/d3/dataset.hpp +++ b/include/emp/web/d3/dataset.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file dataset.hpp +*/ +/** * @brief Tools to maintain data in D3. */ diff --git a/include/emp/web/d3/histogram.hpp b/include/emp/web/d3/histogram.hpp index 9d98995261..61af768a3d 100644 --- a/include/emp/web/d3/histogram.hpp +++ b/include/emp/web/d3/histogram.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file histogram.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/web/d3/layout.hpp b/include/emp/web/d3/layout.hpp index 58fec896b3..5d9f0ffb56 100644 --- a/include/emp/web/d3/layout.hpp +++ b/include/emp/web/d3/layout.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file layout.hpp +*/ +/** * @brief Tools for laying out nodes in D3. */ diff --git a/include/emp/web/d3/scales.hpp b/include/emp/web/d3/scales.hpp index 0b80faa2d3..02ed14beb5 100644 --- a/include/emp/web/d3/scales.hpp +++ b/include/emp/web/d3/scales.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file scales.hpp +*/ +/** * @brief Tools for scaling graph axes in D3. */ diff --git a/include/emp/web/d3/selection.hpp b/include/emp/web/d3/selection.hpp index 588261e676..8c28701b9a 100644 --- a/include/emp/web/d3/selection.hpp +++ b/include/emp/web/d3/selection.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2017 - * - * @file selection.hpp +*/ +/** * @brief TODO. */ diff --git a/include/emp/web/d3/svg_shapes.hpp b/include/emp/web/d3/svg_shapes.hpp index b0860f3cc1..61a6e9a2dc 100644 --- a/include/emp/web/d3/svg_shapes.hpp +++ b/include/emp/web/d3/svg_shapes.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file svg_shapes.hpp +*/ +/** * @brief Tools to build common SVG shapes. */ diff --git a/include/emp/web/d3/utils.hpp b/include/emp/web/d3/utils.hpp index b5d315dc71..64f549f42a 100644 --- a/include/emp/web/d3/utils.hpp +++ b/include/emp/web/d3/utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file utils.hpp +*/ +/** * @brief This file contains macros used to build Empirical's C++ wrapper for D3. */ diff --git a/include/emp/web/d3/visual_elements.hpp b/include/emp/web/d3/visual_elements.hpp index 6a1a5288da..f4b2c1c008 100644 --- a/include/emp/web/d3/visual_elements.hpp +++ b/include/emp/web/d3/visual_elements.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file visual_elements.hpp +*/ +/** * @brief TODO. * */ diff --git a/include/emp/web/d3/visualizations.hpp b/include/emp/web/d3/visualizations.hpp index 59112d4652..0f313a09f7 100644 --- a/include/emp/web/d3/visualizations.hpp +++ b/include/emp/web/d3/visualizations.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017-2018 - * - * @file visualizations.hpp +*/ +/** * @brief Tools to build D3 visualizations. */ diff --git a/include/emp/web/emfunctions.hpp b/include/emp/web/emfunctions.hpp index 1602d8041c..b2f1bc5249 100644 --- a/include/emp/web/emfunctions.hpp +++ b/include/emp/web/emfunctions.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file emfunctions.hpp +*/ +/** * @brief Specialized, useful function for Empirical. */ diff --git a/include/emp/web/events.hpp b/include/emp/web/events.hpp index 41450a855c..c7fbf5eabf 100644 --- a/include/emp/web/events.hpp +++ b/include/emp/web/events.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file events.hpp +*/ +/** * @brief Event handlers that use JQuery. * * @todo Events can be further sub-divided and built up (similar to DataNode objects) so that we diff --git a/include/emp/web/init.hpp b/include/emp/web/init.hpp index 083c3be93d..734a13bb0d 100644 --- a/include/emp/web/init.hpp +++ b/include/emp/web/init.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018. - * - * @file init.hpp +*/ +/** * @brief Define Initialize() and other functions to set up Empirical to build Emscripten projects. * * Init.hpp should always be included if you are compiling Empirical's web tools with Emscripten. It diff --git a/include/emp/web/js_utils.hpp b/include/emp/web/js_utils.hpp index 4cd48202b1..ddfec9a0d1 100644 --- a/include/emp/web/js_utils.hpp +++ b/include/emp/web/js_utils.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2018 - * - * @file js_utils.hpp +*/ +/** * @brief Tools for passing data between C++ and Javascript. */ diff --git a/include/emp/web/web.hpp b/include/emp/web/web.hpp index a7574c98d8..a5cd8e5cb0 100644 --- a/include/emp/web/web.hpp +++ b/include/emp/web/web.hpp @@ -1,9 +1,9 @@ -/** +/* * @note This file is part of Empirical, https://github.com/devosoft/Empirical * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file web.hpp +*/ +/** * @brief Main file to include the entire Empirical web framework; for now, just an alias for Document.h * */ From fd37d69621445cc014b775d69b30d3ca8fa84f5e Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 20 Jun 2023 22:12:29 -0400 Subject: [PATCH 08/80] Remove at signs --- ci/impl/generate_boilerplate_file_docstrings.sh | 10 +++++----- ci/impl/generate_license_notices.sh | 10 +++++----- include/emp/Evolve/NK-const.hpp | 6 +++--- include/emp/Evolve/NK.hpp | 6 +++--- include/emp/Evolve/OEE.hpp | 6 +++--- include/emp/Evolve/OrgInterface.hpp | 6 +++--- include/emp/Evolve/Resource.hpp | 6 +++--- include/emp/Evolve/StateGrid.hpp | 6 +++--- include/emp/Evolve/Systematics.hpp | 6 +++--- include/emp/Evolve/SystematicsAnalysis.hpp | 6 +++--- include/emp/Evolve/World.hpp | 6 +++--- include/emp/Evolve/World_iterator.hpp | 6 +++--- include/emp/Evolve/World_output.hpp | 6 +++--- include/emp/Evolve/World_reflect.hpp | 6 +++--- include/emp/Evolve/World_select.hpp | 6 +++--- include/emp/Evolve/World_structure.hpp | 6 +++--- include/emp/base/MapProxy.hpp | 6 +++--- include/emp/base/Ptr.hpp | 6 +++--- include/emp/base/_assert_macros.hpp | 6 +++--- include/emp/base/_assert_trigger.hpp | 6 +++--- include/emp/base/_emscripten_assert_trigger.hpp | 6 +++--- include/emp/base/_emscripten_error_trigger.hpp | 6 +++--- include/emp/base/_error_trigger.hpp | 6 +++--- include/emp/base/_is_streamable.hpp | 6 +++--- include/emp/base/_native_assert_trigger.hpp | 6 +++--- include/emp/base/_native_error_trigger.hpp | 6 +++--- include/emp/base/_tdebug_assert_trigger.hpp | 6 +++--- include/emp/base/_tdebug_error_trigger.hpp | 6 +++--- include/emp/base/always_assert.hpp | 6 +++--- include/emp/base/always_assert_warning.hpp | 4 ++-- include/emp/base/array.hpp | 6 +++--- include/emp/base/assert.hpp | 6 +++--- include/emp/base/assert_warning.hpp | 6 +++--- include/emp/base/emscripten_assert.hpp | 6 +++--- include/emp/base/error.hpp | 6 +++--- include/emp/base/errors.hpp | 6 +++--- include/emp/base/map.hpp | 6 +++--- include/emp/base/optional.hpp | 6 +++--- include/emp/base/unordered_map.hpp | 6 +++--- include/emp/base/vector.hpp | 6 +++--- include/emp/bits/BitArray.hpp | 6 +++--- include/emp/bits/BitMatrix.hpp | 6 +++--- include/emp/bits/BitSet.hpp | 6 +++--- include/emp/bits/BitVector.hpp | 6 +++--- include/emp/bits/_bitset_helpers.hpp | 6 +++--- include/emp/bits/bitset_utils.hpp | 6 +++--- include/emp/compiler/DFA.hpp | 6 +++--- include/emp/compiler/Lexer.hpp | 6 +++--- include/emp/compiler/NFA.hpp | 6 +++--- include/emp/compiler/RegEx.hpp | 6 +++--- include/emp/compiler/lexer_utils.hpp | 6 +++--- include/emp/config/ArgManager.hpp | 6 +++--- include/emp/config/ConfigManager.hpp | 6 +++--- include/emp/config/SettingCombos.hpp | 6 +++--- include/emp/config/SettingConfig.hpp | 6 +++--- include/emp/config/command_line.hpp | 6 +++--- include/emp/config/config.hpp | 6 +++--- include/emp/config/config_utils.hpp | 6 +++--- include/emp/config/config_web_interface.hpp | 6 +++--- include/emp/control/Action.hpp | 6 +++--- include/emp/control/ActionManager.hpp | 6 +++--- include/emp/control/Signal.hpp | 6 +++--- include/emp/control/SignalControl.hpp | 6 +++--- include/emp/control/SignalManager.hpp | 6 +++--- include/emp/data/DataFile.hpp | 6 +++--- include/emp/data/DataInterface.hpp | 6 +++--- include/emp/data/DataLayout.hpp | 6 +++--- include/emp/data/DataLog.hpp | 6 +++--- include/emp/data/DataManager.hpp | 6 +++--- include/emp/data/DataMap.hpp | 6 +++--- include/emp/data/DataNode.hpp | 6 +++--- include/emp/data/MemoryImage.hpp | 6 +++--- include/emp/data/Trait.hpp | 6 +++--- include/emp/data/VarMap.hpp | 6 +++--- include/emp/datastructs/BloomFilter.hpp | 6 +++--- include/emp/datastructs/Bool.hpp | 6 +++--- include/emp/datastructs/Cache.hpp | 6 +++--- include/emp/datastructs/DynamicString.hpp | 6 +++--- include/emp/datastructs/Graph.hpp | 6 +++--- include/emp/datastructs/IndexMap.hpp | 6 +++--- include/emp/datastructs/QueueCache.hpp | 6 +++--- include/emp/datastructs/SmallFifoMap.hpp | 6 +++--- include/emp/datastructs/SmallVector.hpp | 6 +++--- include/emp/datastructs/StringMap.hpp | 6 +++--- include/emp/datastructs/TimeQueue.hpp | 6 +++--- include/emp/datastructs/TypeMap.hpp | 6 +++--- include/emp/datastructs/UnorderedIndexMap.hpp | 6 +++--- include/emp/datastructs/graph_utils.hpp | 6 +++--- include/emp/datastructs/hash_utils.hpp | 6 +++--- include/emp/datastructs/map_utils.hpp | 6 +++--- include/emp/datastructs/ra_set.hpp | 6 +++--- include/emp/datastructs/reference_vector.hpp | 6 +++--- include/emp/datastructs/set_utils.hpp | 6 +++--- include/emp/datastructs/tuple_struct.hpp | 6 +++--- include/emp/datastructs/tuple_utils.hpp | 6 +++--- include/emp/datastructs/valsort_map.hpp | 6 +++--- include/emp/datastructs/vector_utils.hpp | 6 +++--- include/emp/debug/alert.hpp | 6 +++--- include/emp/debug/debug.hpp | 6 +++--- include/emp/debug/mem_track.hpp | 6 +++--- include/emp/functional/AnyFunction.hpp | 6 +++--- include/emp/functional/FunctionSet.hpp | 6 +++--- include/emp/functional/GenericFunction.hpp | 6 +++--- include/emp/functional/flex_function.hpp | 6 +++--- include/emp/functional/memo_function.hpp | 6 +++--- include/emp/games/Mancala.hpp | 6 +++--- include/emp/games/Othello.hpp | 6 +++--- include/emp/games/Othello8.hpp | 6 +++--- include/emp/games/PayoffMatrix.hpp | 6 +++--- include/emp/geometry/Angle2D.hpp | 6 +++--- include/emp/geometry/Body2D.hpp | 6 +++--- include/emp/geometry/Circle2D.hpp | 6 +++--- include/emp/geometry/Physics2D.hpp | 6 +++--- include/emp/geometry/Point2D.hpp | 6 +++--- include/emp/geometry/Surface.hpp | 6 +++--- include/emp/geometry/Surface2D.hpp | 6 +++--- include/emp/hardware/AvidaCPU_InstLib.hpp | 6 +++--- include/emp/hardware/AvidaGP.hpp | 6 +++--- include/emp/hardware/BitSorter.hpp | 6 +++--- include/emp/hardware/EventDrivenGP.hpp | 6 +++--- include/emp/hardware/EventLib.hpp | 6 +++--- include/emp/hardware/Genome.hpp | 6 +++--- include/emp/hardware/InstLib.hpp | 6 +++--- include/emp/hardware/LinearCode.hpp | 6 +++--- include/emp/hardware/signalgp_utils.hpp | 6 +++--- include/emp/in_progress/BatchConfig.hpp | 6 +++--- include/emp/in_progress/ConfigLexer.hpp | 6 +++--- include/emp/in_progress/ConfigParser.hpp | 6 +++--- include/emp/in_progress/Empower/Empower.hpp | 6 +++--- include/emp/in_progress/Empower/MemoryImage.hpp | 6 +++--- include/emp/in_progress/Empower/Struct.hpp | 6 +++--- include/emp/in_progress/Empower/StructType.hpp | 6 +++--- include/emp/in_progress/Empower/Type.hpp | 6 +++--- include/emp/in_progress/Empower/TypeManager.hpp | 6 +++--- include/emp/in_progress/Empower/Var.hpp | 6 +++--- include/emp/in_progress/Empower/VarInfo.hpp | 6 +++--- include/emp/in_progress/Empower2/Var.hpp | 6 +++--- include/emp/in_progress/Parser.hpp | 6 +++--- include/emp/in_progress/Trait.hpp | 6 +++--- include/emp/in_progress/class.hpp | 6 +++--- include/emp/in_progress/constexpr/ce_array.hpp | 6 +++--- include/emp/in_progress/constexpr/ce_random.hpp | 6 +++--- include/emp/in_progress/constexpr/ce_string.hpp | 6 +++--- include/emp/in_progress/fixed.hpp | 6 +++--- include/emp/in_progress/struct.hpp | 6 +++--- include/emp/io/ContiguousStream.hpp | 6 +++--- include/emp/io/File.hpp | 6 +++--- include/emp/io/MemoryIStream.hpp | 6 +++--- include/emp/io/NullStream.hpp | 6 +++--- include/emp/io/StreamManager.hpp | 6 +++--- include/emp/io/ascii_utils.hpp | 6 +++--- include/emp/io/serialize.hpp | 6 +++--- include/emp/io/serialize_macros.hpp | 6 +++--- include/emp/matching/MatchBin.hpp | 6 +++--- include/emp/matching/MatchDepository.hpp | 6 +++--- include/emp/matching/_DepositoryEntry.hpp | 6 +++--- include/emp/matching/matchbin_metrics.hpp | 6 +++--- include/emp/matching/matchbin_regulators.hpp | 6 +++--- include/emp/matching/matchbin_selectors.hpp | 6 +++--- include/emp/matching/matchbin_utils.hpp | 6 +++--- .../emp/matching/regulators/PlusCountdownRegulator.hpp | 6 +++--- .../emp/matching/selectors_static/RankedSelector.hpp | 6 +++--- include/emp/math/Distribution.hpp | 6 +++--- include/emp/math/Fraction.hpp | 6 +++--- include/emp/math/Random.hpp | 6 +++--- include/emp/math/Range.hpp | 6 +++--- include/emp/math/combos.hpp | 6 +++--- include/emp/math/constants.hpp | 6 +++--- include/emp/math/distances.hpp | 6 +++--- include/emp/math/info_theory.hpp | 6 +++--- include/emp/math/math.hpp | 6 +++--- include/emp/math/random_utils.hpp | 6 +++--- include/emp/math/sequence_utils.hpp | 6 +++--- include/emp/math/spatial_stats.hpp | 6 +++--- include/emp/math/stats.hpp | 6 +++--- include/emp/meta/ConceptWrapper.hpp | 6 +++--- include/emp/meta/TypeID.hpp | 6 +++--- include/emp/meta/TypePack.hpp | 6 +++--- include/emp/meta/ValPack.hpp | 6 +++--- include/emp/meta/macro_math.hpp | 6 +++--- include/emp/meta/macros.hpp | 6 +++--- include/emp/meta/meta.hpp | 6 +++--- include/emp/meta/reflection.hpp | 6 +++--- include/emp/meta/type_traits.hpp | 6 +++--- include/emp/polyfill/span.hpp | 6 +++--- include/emp/prefab/Card.hpp | 6 +++--- include/emp/prefab/CodeBlock.hpp | 6 +++--- include/emp/prefab/Collapse.hpp | 6 +++--- include/emp/prefab/CommentBox.hpp | 6 +++--- include/emp/prefab/ConfigPanel.hpp | 6 +++--- include/emp/prefab/FontAwesomeIcon.hpp | 6 +++--- include/emp/prefab/LoadingIcon.hpp | 6 +++--- include/emp/prefab/LoadingModal.hpp | 6 +++--- include/emp/prefab/Modal.hpp | 6 +++--- include/emp/prefab/ReadoutPanel.hpp | 6 +++--- include/emp/prefab/ToggleSwitch.hpp | 6 +++--- include/emp/prefab/ValueBox.hpp | 6 +++--- include/emp/scholar/Author.hpp | 6 +++--- include/emp/scholar/Bibliography.hpp | 6 +++--- include/emp/scholar/Citation.hpp | 6 +++--- include/emp/testing/unit_tests.hpp | 6 +++--- include/emp/tools/SolveState.hpp | 6 +++--- include/emp/tools/TypeTracker.hpp | 6 +++--- include/emp/tools/attrs.hpp | 6 +++--- include/emp/tools/hash_namify.hpp | 6 +++--- include/emp/tools/keyname_utils.hpp | 6 +++--- include/emp/tools/string_utils.hpp | 6 +++--- include/emp/tools/timing.hpp | 6 +++--- include/emp/tools/unique.hpp | 6 +++--- include/emp/tools/value_utils.hpp | 6 +++--- include/emp/web/Animate.hpp | 6 +++--- include/emp/web/Attributes.hpp | 6 +++--- include/emp/web/Button.hpp | 6 +++--- include/emp/web/Canvas.hpp | 6 +++--- include/emp/web/CanvasAction.hpp | 6 +++--- include/emp/web/CanvasShape.hpp | 6 +++--- include/emp/web/Div.hpp | 6 +++--- include/emp/web/DocuExtras.hpp | 6 +++--- include/emp/web/Document.hpp | 6 +++--- include/emp/web/Element.hpp | 6 +++--- include/emp/web/FileInput.hpp | 6 +++--- include/emp/web/Font.hpp | 6 +++--- include/emp/web/Image.hpp | 6 +++--- include/emp/web/Input.hpp | 6 +++--- include/emp/web/JSWrap.hpp | 6 +++--- include/emp/web/KeypressManager.hpp | 6 +++--- include/emp/web/Listeners.hpp | 6 +++--- include/emp/web/NodeDomShim.hpp | 6 +++--- include/emp/web/RawImage.hpp | 6 +++--- include/emp/web/Selector.hpp | 6 +++--- include/emp/web/Style.hpp | 6 +++--- include/emp/web/Table.hpp | 6 +++--- include/emp/web/Text.hpp | 6 +++--- include/emp/web/TextArea.hpp | 6 +++--- include/emp/web/TextFeed.hpp | 6 +++--- include/emp/web/Tween.hpp | 6 +++--- include/emp/web/UrlParams.hpp | 6 +++--- include/emp/web/Widget.hpp | 6 +++--- include/emp/web/WidgetExtras.hpp | 6 +++--- include/emp/web/_FacetedWidget.hpp | 6 +++--- include/emp/web/_MochaTestRunner.hpp | 6 +++--- include/emp/web/_TableCell.hpp | 6 +++--- include/emp/web/_TableCol.hpp | 6 +++--- include/emp/web/_TableColGroup.hpp | 6 +++--- include/emp/web/_TableRow.hpp | 6 +++--- include/emp/web/_TableRowGroup.hpp | 6 +++--- include/emp/web/canvas_utils.hpp | 6 +++--- include/emp/web/color_map.hpp | 6 +++--- include/emp/web/commands.hpp | 6 +++--- include/emp/web/d3/axis.hpp | 6 +++--- include/emp/web/d3/d3_init.hpp | 6 +++--- include/emp/web/d3/dataset.hpp | 6 +++--- include/emp/web/d3/histogram.hpp | 6 +++--- include/emp/web/d3/layout.hpp | 6 +++--- include/emp/web/d3/scales.hpp | 6 +++--- include/emp/web/d3/selection.hpp | 6 +++--- include/emp/web/d3/svg_shapes.hpp | 6 +++--- include/emp/web/d3/utils.hpp | 6 +++--- include/emp/web/d3/visual_elements.hpp | 6 +++--- include/emp/web/d3/visualizations.hpp | 6 +++--- include/emp/web/emfunctions.hpp | 6 +++--- include/emp/web/events.hpp | 6 +++--- include/emp/web/init.hpp | 6 +++--- include/emp/web/js_utils.hpp | 6 +++--- include/emp/web/web.hpp | 6 +++--- 265 files changed, 798 insertions(+), 798 deletions(-) diff --git a/ci/impl/generate_boilerplate_file_docstrings.sh b/ci/impl/generate_boilerplate_file_docstrings.sh index 77ee6ed02f..55cb004cb6 100755 --- a/ci/impl/generate_boilerplate_file_docstrings.sh +++ b/ci/impl/generate_boilerplate_file_docstrings.sh @@ -14,14 +14,14 @@ for filename in $(cd include && find -- * -name '*.hpp' -type f); do # stamp in expected boilerplate line-by-line sed -i '1s|^.*$|/*|' "include/${filename}" - sed -i '2s|^.*$| * @note This file is part of Empirical, https://github.com/devosoft/Empirical|' "include/${filename}" - sed -i '3s|^.*$| * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md|' "include/${filename}" - # only match if a @date isn't currently in place - # if we see @date, "break" (b) sed script for that line + sed -i '2s|^.*$| * This file is part of Empirical, https://github.com/devosoft/Empirical|' "include/${filename}" + sed -i '3s|^.*$| * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md|' "include/${filename}" + # only match if a date: isn't currently in place + # if we see date:, "break" (b) sed script for that line # adapted from https://stackoverflow.com/a/5334825 # and https://stackoverflow.com/a/12178023 # and https://stackoverflow.com/a/9053163 - sed -i "/^ \* @date /b; 4s/^.*\$/ * @date $(date +'%Y')/" "include/${filename}" + sed -i "/^ \* date: /b; 4s/^.*\$/ * date: $(date +'%Y')/" "include/${filename}" # sed -i '5s/^.*$/ */' "include/${filename}" sed -i '5s|^.*$|*/|' "include/${filename}" # only match if a @brief isn't currently in place diff --git a/ci/impl/generate_license_notices.sh b/ci/impl/generate_license_notices.sh index 01f78eb84b..711a21fc5b 100755 --- a/ci/impl/generate_license_notices.sh +++ b/ci/impl/generate_license_notices.sh @@ -18,19 +18,19 @@ for filename in $(find . -name '*.cpp' -type f ! -path "./third-party/*") $(find # just like file docstrings, but don't require a brief # stamp in expected boilerplate line-by-line sed -i '1s|^.*$|/**|' "${filename}" - sed -i '2s|^.*$| * @note This file is part of Empirical, https://github.com/devosoft/Empirical|' "${filename}" - sed -i '3s|^.*$| * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md|' "${filename}" + sed -i '2s|^.*$| * This file is part of Empirical, https://github.com/devosoft/Empirical|' "${filename}" + sed -i '3s|^.*$| * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md|' "${filename}" # only match if a @date isn't currently in place # if we see @date, "break" (b) sed script for that line # adapted from https://stackoverflow.com/a/5334825 # and https://stackoverflow.com/a/12178023 # and https://stackoverflow.com/a/9053163 - sed -i "/^ \* @date /b; 4s/^.*\$/ * @date $(date +'%Y')/" "${filename}" + sed -i "/^ \* date: /b; 4s/^.*\$/ * date: $(date +'%Y')/" "${filename}" sed -i '5s/^.*$/ */' "${filename}" - sed -i "6s/^.*\$/ * @file $(basename "${filename}")/" "${filename}" + # sed -i "6s/^.*\$/ * @file $(basename "${filename}")/" "${filename}" # only match empty lines # add extra * to replace later with */ when constructing fresh - sed -i '7s/^$/ */' "${filename}" + sed -i '6s/^$/ */' "${filename}" # close boilerplate file docstring # must accomodate possible additional content in docstring diff --git a/include/emp/Evolve/NK-const.hpp b/include/emp/Evolve/NK-const.hpp index 7c520313e0..58526a6ad1 100644 --- a/include/emp/Evolve/NK-const.hpp +++ b/include/emp/Evolve/NK-const.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief This file provides code to build NK landscapes, setup at compile time.. diff --git a/include/emp/Evolve/NK.hpp b/include/emp/Evolve/NK.hpp index 7db72d0e58..8ac638c63c 100644 --- a/include/emp/Evolve/NK.hpp +++ b/include/emp/Evolve/NK.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief This file provides code to build NK-based algorithms. diff --git a/include/emp/Evolve/OEE.hpp b/include/emp/Evolve/OEE.hpp index 3091c03c7d..f5cb94dc3e 100644 --- a/include/emp/Evolve/OEE.hpp +++ b/include/emp/Evolve/OEE.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/Evolve/OrgInterface.hpp b/include/emp/Evolve/OrgInterface.hpp index 8ebe601555..83cdb0380f 100644 --- a/include/emp/Evolve/OrgInterface.hpp +++ b/include/emp/Evolve/OrgInterface.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief An interface between an organism and the outside world. diff --git a/include/emp/Evolve/Resource.hpp b/include/emp/Evolve/Resource.hpp index 4d8611b358..7b21aaf889 100644 --- a/include/emp/Evolve/Resource.hpp +++ b/include/emp/Evolve/Resource.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief Implement resource-based selection. diff --git a/include/emp/Evolve/StateGrid.hpp b/include/emp/Evolve/StateGrid.hpp index 900b98c5e6..4446ee0355 100644 --- a/include/emp/Evolve/StateGrid.hpp +++ b/include/emp/Evolve/StateGrid.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018. */ /** * @brief StateGrid maintains a rectilinear grid that agents can traverse. diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 0274dd08ac..2e77147073 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief Track genotypes, species, clades, or lineages of organisms in a world. diff --git a/include/emp/Evolve/SystematicsAnalysis.hpp b/include/emp/Evolve/SystematicsAnalysis.hpp index 3cd2dede89..0bdbc7e000 100644 --- a/include/emp/Evolve/SystematicsAnalysis.hpp +++ b/include/emp/Evolve/SystematicsAnalysis.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief TODO. diff --git a/include/emp/Evolve/World.hpp b/include/emp/Evolve/World.hpp index 9a185c083e..cd516bf79a 100644 --- a/include/emp/Evolve/World.hpp +++ b/include/emp/Evolve/World.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief Definition of a base class for a World template for use in evolutionary algorithms. diff --git a/include/emp/Evolve/World_iterator.hpp b/include/emp/Evolve/World_iterator.hpp index 9930bdb149..7832c9075d 100644 --- a/include/emp/Evolve/World_iterator.hpp +++ b/include/emp/Evolve/World_iterator.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2021. */ /** * @brief This file defines iterators for use with emp::World objects. diff --git a/include/emp/Evolve/World_output.hpp b/include/emp/Evolve/World_output.hpp index d9e2f0a07f..af7687a7de 100644 --- a/include/emp/Evolve/World_output.hpp +++ b/include/emp/Evolve/World_output.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/Evolve/World_reflect.hpp b/include/emp/Evolve/World_reflect.hpp index db810b5d9f..abc7c7e6ab 100644 --- a/include/emp/Evolve/World_reflect.hpp +++ b/include/emp/Evolve/World_reflect.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief Handle reflection on organisms to setup reasonable defaults in World. diff --git a/include/emp/Evolve/World_select.hpp b/include/emp/Evolve/World_select.hpp index a44ecf7573..6e800a6ef6 100644 --- a/include/emp/Evolve/World_select.hpp +++ b/include/emp/Evolve/World_select.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2021. */ /** * @brief Functions for popular selection methods applied to worlds. diff --git a/include/emp/Evolve/World_structure.hpp b/include/emp/Evolve/World_structure.hpp index 3250ee50f1..5796a31d35 100644 --- a/include/emp/Evolve/World_structure.hpp +++ b/include/emp/Evolve/World_structure.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief Functions for popular world structure methods. diff --git a/include/emp/base/MapProxy.hpp b/include/emp/base/MapProxy.hpp index 8da97d30d6..5c216a041f 100644 --- a/include/emp/base/MapProxy.hpp +++ b/include/emp/base/MapProxy.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief A proxy for indecies returned from any map type to ensure they are initialized. diff --git a/include/emp/base/Ptr.hpp b/include/emp/base/Ptr.hpp index 8f12c0de48..0e36438c13 100644 --- a/include/emp/base/Ptr.hpp +++ b/include/emp/base/Ptr.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020. */ /** * @brief A wrapper for pointers that does careful memory tracking (but only in debug mode). diff --git a/include/emp/base/_assert_macros.hpp b/include/emp/base/_assert_macros.hpp index af15ba45f9..b2fe6b8d6a 100644 --- a/include/emp/base/_assert_macros.hpp +++ b/include/emp/base/_assert_macros.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Helper macros for building proper assert commands. diff --git a/include/emp/base/_assert_trigger.hpp b/include/emp/base/_assert_trigger.hpp index 267acb8163..a199d68aae 100644 --- a/include/emp/base/_assert_trigger.hpp +++ b/include/emp/base/_assert_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief Assert trigger implementation selector. diff --git a/include/emp/base/_emscripten_assert_trigger.hpp b/include/emp/base/_emscripten_assert_trigger.hpp index 5e1434f9e7..db652cc49e 100644 --- a/include/emp/base/_emscripten_assert_trigger.hpp +++ b/include/emp/base/_emscripten_assert_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief Assert trigger implementation. diff --git a/include/emp/base/_emscripten_error_trigger.hpp b/include/emp/base/_emscripten_error_trigger.hpp index 9ff0eebc3c..678b7b94f2 100644 --- a/include/emp/base/_emscripten_error_trigger.hpp +++ b/include/emp/base/_emscripten_error_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Terminating error trigger implementation. diff --git a/include/emp/base/_error_trigger.hpp b/include/emp/base/_error_trigger.hpp index b9ecd38ce2..dfe60cb2a4 100644 --- a/include/emp/base/_error_trigger.hpp +++ b/include/emp/base/_error_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Error trigger implementation selector diff --git a/include/emp/base/_is_streamable.hpp b/include/emp/base/_is_streamable.hpp index 7b841bd1d4..16ac8600c9 100644 --- a/include/emp/base/_is_streamable.hpp +++ b/include/emp/base/_is_streamable.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief Test at compile time whether a type can be streamed. diff --git a/include/emp/base/_native_assert_trigger.hpp b/include/emp/base/_native_assert_trigger.hpp index b6d8dbec2e..4d37548fd9 100644 --- a/include/emp/base/_native_assert_trigger.hpp +++ b/include/emp/base/_native_assert_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief Native assert trigger implementation. diff --git a/include/emp/base/_native_error_trigger.hpp b/include/emp/base/_native_error_trigger.hpp index 172fd111b2..09804d79b3 100644 --- a/include/emp/base/_native_error_trigger.hpp +++ b/include/emp/base/_native_error_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Terminating error trigger implementation. diff --git a/include/emp/base/_tdebug_assert_trigger.hpp b/include/emp/base/_tdebug_assert_trigger.hpp index 646718405b..2861a7fce6 100644 --- a/include/emp/base/_tdebug_assert_trigger.hpp +++ b/include/emp/base/_tdebug_assert_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief Non-terminating assert trigger implementation for unit testing. diff --git a/include/emp/base/_tdebug_error_trigger.hpp b/include/emp/base/_tdebug_error_trigger.hpp index 688558ad64..ff833f384c 100644 --- a/include/emp/base/_tdebug_error_trigger.hpp +++ b/include/emp/base/_tdebug_error_trigger.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Non-terminating error trigger implementation for unit testing. diff --git a/include/emp/base/always_assert.hpp b/include/emp/base/always_assert.hpp index 52f747df0b..aacfb36e93 100644 --- a/include/emp/base/always_assert.hpp +++ b/include/emp/base/always_assert.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020-2021. */ /** * @brief A more dynamic replacement for standard library asserts. diff --git a/include/emp/base/always_assert_warning.hpp b/include/emp/base/always_assert_warning.hpp index 8d5ed5ec2f..4a33adad9e 100644 --- a/include/emp/base/always_assert_warning.hpp +++ b/include/emp/base/always_assert_warning.hpp @@ -1,6 +1,6 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020. */ /** diff --git a/include/emp/base/array.hpp b/include/emp/base/array.hpp index 82f91639e7..e039af713e 100644 --- a/include/emp/base/array.hpp +++ b/include/emp/base/array.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief A drop-in wrapper for std::array; adds on bounds checking in debug mode. diff --git a/include/emp/base/assert.hpp b/include/emp/base/assert.hpp index 74de4c0047..f341faba59 100644 --- a/include/emp/base/assert.hpp +++ b/include/emp/base/assert.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020. */ /** * @brief A more dynamic replacement for standard library asserts. diff --git a/include/emp/base/assert_warning.hpp b/include/emp/base/assert_warning.hpp index b7fb501485..6c476bdeeb 100644 --- a/include/emp/base/assert_warning.hpp +++ b/include/emp/base/assert_warning.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief A non-terminating replacement for standard library asserts. diff --git a/include/emp/base/emscripten_assert.hpp b/include/emp/base/emscripten_assert.hpp index c8ee91c59f..3c9411ac5d 100644 --- a/include/emp/base/emscripten_assert.hpp +++ b/include/emp/base/emscripten_assert.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief Assert evaluated only in debug mode with Emscripten. diff --git a/include/emp/base/error.hpp b/include/emp/base/error.hpp index 7f4f61b983..1916cfb94c 100644 --- a/include/emp/base/error.hpp +++ b/include/emp/base/error.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Nearly-universal error, to use in place of emp_assert(false, ...). diff --git a/include/emp/base/errors.hpp b/include/emp/base/errors.hpp index 2948d2e590..a4a8fe90d2 100644 --- a/include/emp/base/errors.hpp +++ b/include/emp/base/errors.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Tools to help manage various problems in command-line or Emscripten-based applications. diff --git a/include/emp/base/map.hpp b/include/emp/base/map.hpp index 6ad409f186..9f5263489d 100644 --- a/include/emp/base/map.hpp +++ b/include/emp/base/map.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019-2020. */ /** * @brief A drop-in wrapper for std::map and std:multimap; makes sure we create vars on access. diff --git a/include/emp/base/optional.hpp b/include/emp/base/optional.hpp index 3f2fc6f922..fb02ad74c9 100644 --- a/include/emp/base/optional.hpp +++ b/include/emp/base/optional.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief Audited implementation of std::optional. diff --git a/include/emp/base/unordered_map.hpp b/include/emp/base/unordered_map.hpp index c118eebc0e..37b98a2147 100644 --- a/include/emp/base/unordered_map.hpp +++ b/include/emp/base/unordered_map.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019-2020. */ /** * @brief A drop-in wrapper for std::unordered_map and unordered_multi_map; makes sure we create vars on access. diff --git a/include/emp/base/vector.hpp b/include/emp/base/vector.hpp index 0525d31c86..cce093a8c6 100644 --- a/include/emp/base/vector.hpp +++ b/include/emp/base/vector.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019. */ /** * @brief A drop-in wrapper for std::vector; adds on bounds checking in debug mode. diff --git a/include/emp/bits/BitArray.hpp b/include/emp/bits/BitArray.hpp index 613fdfae14..06739a20f5 100644 --- a/include/emp/bits/BitArray.hpp +++ b/include/emp/bits/BitArray.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief An Array of a fixed number of bits; similar to std::bitset, but with extra bit magic. diff --git a/include/emp/bits/BitMatrix.hpp b/include/emp/bits/BitMatrix.hpp index a95a19bf3b..e1d917ce70 100644 --- a/include/emp/bits/BitMatrix.hpp +++ b/include/emp/bits/BitMatrix.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 */ /** * @brief A COL x ROW matrix of bits and provides easy indexing and manipulation diff --git a/include/emp/bits/BitSet.hpp b/include/emp/bits/BitSet.hpp index 553a37c460..e9ed26868c 100644 --- a/include/emp/bits/BitSet.hpp +++ b/include/emp/bits/BitSet.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief A drop-in replacement for std::bitset, with additional bit magic features; aliases BitArray. diff --git a/include/emp/bits/BitVector.hpp b/include/emp/bits/BitVector.hpp index 2330bc3cc1..6c8a3a019f 100644 --- a/include/emp/bits/BitVector.hpp +++ b/include/emp/bits/BitVector.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief A drop-in replacement for std::vector, with additional bitwise logic features. diff --git a/include/emp/bits/_bitset_helpers.hpp b/include/emp/bits/_bitset_helpers.hpp index cd83d8e003..3356bef2b6 100644 --- a/include/emp/bits/_bitset_helpers.hpp +++ b/include/emp/bits/_bitset_helpers.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief An internal Empirical class with tools to build collections of bits. diff --git a/include/emp/bits/bitset_utils.hpp b/include/emp/bits/bitset_utils.hpp index 331bb14996..13245a4a8e 100644 --- a/include/emp/bits/bitset_utils.hpp +++ b/include/emp/bits/bitset_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020. */ /** * @brief A set of simple functions to manipulate bitsets. diff --git a/include/emp/compiler/DFA.hpp b/include/emp/compiler/DFA.hpp index 7c23b8f9f4..cd7a0be4a8 100644 --- a/include/emp/compiler/DFA.hpp +++ b/include/emp/compiler/DFA.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief A Deterministic Finite Automata simulator. diff --git a/include/emp/compiler/Lexer.hpp b/include/emp/compiler/Lexer.hpp index 4feb47105f..fd7eebfaaa 100644 --- a/include/emp/compiler/Lexer.hpp +++ b/include/emp/compiler/Lexer.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019. */ /** * @brief A general-purpose, fast lexer. diff --git a/include/emp/compiler/NFA.hpp b/include/emp/compiler/NFA.hpp index 3005885771..764f6fb4b7 100644 --- a/include/emp/compiler/NFA.hpp +++ b/include/emp/compiler/NFA.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief A Non-deterministic Finite Automata simulator diff --git a/include/emp/compiler/RegEx.hpp b/include/emp/compiler/RegEx.hpp index dd09c0697e..4bb5455fb3 100644 --- a/include/emp/compiler/RegEx.hpp +++ b/include/emp/compiler/RegEx.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019. */ /** * @brief Basic regular expression handler. diff --git a/include/emp/compiler/lexer_utils.hpp b/include/emp/compiler/lexer_utils.hpp index 5230ddedf2..4102c1cc70 100644 --- a/include/emp/compiler/lexer_utils.hpp +++ b/include/emp/compiler/lexer_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief A set of utilities to convert between NFAs and DFAs diff --git a/include/emp/config/ArgManager.hpp b/include/emp/config/ArgManager.hpp index 8147feb6b4..72e975288a 100644 --- a/include/emp/config/ArgManager.hpp +++ b/include/emp/config/ArgManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief A tool for sythesizing command-line arguments, URL query params, and config files. diff --git a/include/emp/config/ConfigManager.hpp b/include/emp/config/ConfigManager.hpp index 5cd55257c0..6680abdc37 100644 --- a/include/emp/config/ConfigManager.hpp +++ b/include/emp/config/ConfigManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 */ /** * @brief The ConfigManager templated class handles the building and configuration of new objects diff --git a/include/emp/config/SettingCombos.hpp b/include/emp/config/SettingCombos.hpp index 101ae08959..916fb9ca28 100644 --- a/include/emp/config/SettingCombos.hpp +++ b/include/emp/config/SettingCombos.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A tool for exploring all parameter combinations diff --git a/include/emp/config/SettingConfig.hpp b/include/emp/config/SettingConfig.hpp index a4ea1504e1..0937399dd0 100644 --- a/include/emp/config/SettingConfig.hpp +++ b/include/emp/config/SettingConfig.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A tool for collecting settings, including from files and the command line. diff --git a/include/emp/config/command_line.hpp b/include/emp/config/command_line.hpp index a140c2a32c..b50b54c893 100644 --- a/include/emp/config/command_line.hpp +++ b/include/emp/config/command_line.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief This file contains tools for dealing with command-line arguments (argv and argc). diff --git a/include/emp/config/config.hpp b/include/emp/config/config.hpp index 1443252be9..70af8f3eea 100644 --- a/include/emp/config/config.hpp +++ b/include/emp/config/config.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019. */ /** * @brief Maintains a set of configuration options. diff --git a/include/emp/config/config_utils.hpp b/include/emp/config/config_utils.hpp index ea80c341e3..fa4d930675 100644 --- a/include/emp/config/config_utils.hpp +++ b/include/emp/config/config_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Helper functions for working with emp::Config objects. diff --git a/include/emp/config/config_web_interface.hpp b/include/emp/config/config_web_interface.hpp index f32361cdd3..0a1556a6a3 100644 --- a/include/emp/config/config_web_interface.hpp +++ b/include/emp/config/config_web_interface.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/control/Action.hpp b/include/emp/control/Action.hpp index 00e3393fd9..b475bbbe27 100644 --- a/include/emp/control/Action.hpp +++ b/include/emp/control/Action.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief A mechanism to abstract functions from their underlying type and provide run-time names. diff --git a/include/emp/control/ActionManager.hpp b/include/emp/control/ActionManager.hpp index 28d2d0dbe6..e5aa50f0b1 100644 --- a/include/emp/control/ActionManager.hpp +++ b/include/emp/control/ActionManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief ActionManager collects sets of Actions to be looked up or manipulated later. diff --git a/include/emp/control/Signal.hpp b/include/emp/control/Signal.hpp index cd245bccb1..00b166524a 100644 --- a/include/emp/control/Signal.hpp +++ b/include/emp/control/Signal.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Allow functions to be bundled (as Actions) and triggered enmasse. diff --git a/include/emp/control/SignalControl.hpp b/include/emp/control/SignalControl.hpp index 200a9472dd..672281e0c6 100644 --- a/include/emp/control/SignalControl.hpp +++ b/include/emp/control/SignalControl.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief The SignalControl class manages all of the signals and actions, linking them together diff --git a/include/emp/control/SignalManager.hpp b/include/emp/control/SignalManager.hpp index cb95b8579f..076c4a3e05 100644 --- a/include/emp/control/SignalManager.hpp +++ b/include/emp/control/SignalManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief This file defines the SignalManager class, which collects sets of Signals to be looked up diff --git a/include/emp/data/DataFile.hpp b/include/emp/data/DataFile.hpp index d301583a06..2af39b8f5b 100644 --- a/include/emp/data/DataFile.hpp +++ b/include/emp/data/DataFile.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief DataFile objects use DataNode objects to dynamically fill out file contents. diff --git a/include/emp/data/DataInterface.hpp b/include/emp/data/DataInterface.hpp index 64a4fca26c..a7f80ee2af 100644 --- a/include/emp/data/DataInterface.hpp +++ b/include/emp/data/DataInterface.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief DataInterface is a *generic* interface to a DataNode. diff --git a/include/emp/data/DataLayout.hpp b/include/emp/data/DataLayout.hpp index a0a2ad8b5c..316ba87061 100644 --- a/include/emp/data/DataLayout.hpp +++ b/include/emp/data/DataLayout.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019. */ /** * @brief A mapping of names to variables stored in a MemoryImage. diff --git a/include/emp/data/DataLog.hpp b/include/emp/data/DataLog.hpp index be2a996d9d..8875ef33c5 100644 --- a/include/emp/data/DataLog.hpp +++ b/include/emp/data/DataLog.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Tools for processing a single set of data. diff --git a/include/emp/data/DataManager.hpp b/include/emp/data/DataManager.hpp index a96cb48247..170b8852f2 100644 --- a/include/emp/data/DataManager.hpp +++ b/include/emp/data/DataManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief DataManager handles a set of DataNode objects with the same tracking settings. diff --git a/include/emp/data/DataMap.hpp b/include/emp/data/DataMap.hpp index 189a857fe4..9d20583555 100644 --- a/include/emp/data/DataMap.hpp +++ b/include/emp/data/DataMap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018-2021. */ /** * @brief A DataMap links names to arbitrary object types. diff --git a/include/emp/data/DataNode.hpp b/include/emp/data/DataNode.hpp index 7a894ce6aa..0b707067f1 100644 --- a/include/emp/data/DataNode.hpp +++ b/include/emp/data/DataNode.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief DataNode objects track a specific type of data over the course of a run. diff --git a/include/emp/data/MemoryImage.hpp b/include/emp/data/MemoryImage.hpp index aca8d9cc2a..4f7f9f9a53 100644 --- a/include/emp/data/MemoryImage.hpp +++ b/include/emp/data/MemoryImage.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief A managed set of Bytes to store any kind of data. diff --git a/include/emp/data/Trait.hpp b/include/emp/data/Trait.hpp index 1e9a4168cb..7498b5f8e7 100644 --- a/include/emp/data/Trait.hpp +++ b/include/emp/data/Trait.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief Directly measure a target quality about a type of object. diff --git a/include/emp/data/VarMap.hpp b/include/emp/data/VarMap.hpp index 31b1b04836..51a9a7a52e 100644 --- a/include/emp/data/VarMap.hpp +++ b/include/emp/data/VarMap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief VarMaps track arbitrary data by name (slow) or id (faster). diff --git a/include/emp/datastructs/BloomFilter.hpp b/include/emp/datastructs/BloomFilter.hpp index 32822c3580..0fc0ecbfb2 100644 --- a/include/emp/datastructs/BloomFilter.hpp +++ b/include/emp/datastructs/BloomFilter.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief A Bloom filter implementation diff --git a/include/emp/datastructs/Bool.hpp b/include/emp/datastructs/Bool.hpp index a011879db0..01c39cc576 100644 --- a/include/emp/datastructs/Bool.hpp +++ b/include/emp/datastructs/Bool.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A bool representation that doesn't trip up std::vector diff --git a/include/emp/datastructs/Cache.hpp b/include/emp/datastructs/Cache.hpp index 4158d285ef..a0d640b19d 100644 --- a/include/emp/datastructs/Cache.hpp +++ b/include/emp/datastructs/Cache.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief similar to an std::unordered_map, but all lookups come with a function to generate the result should the lookup fail. diff --git a/include/emp/datastructs/DynamicString.hpp b/include/emp/datastructs/DynamicString.hpp index fdf4fdcd43..1a1eab1855 100644 --- a/include/emp/datastructs/DynamicString.hpp +++ b/include/emp/datastructs/DynamicString.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief A string handler where sections update dynamically based on functions. diff --git a/include/emp/datastructs/Graph.hpp b/include/emp/datastructs/Graph.hpp index e0b61c0269..b663bd2590 100644 --- a/include/emp/datastructs/Graph.hpp +++ b/include/emp/datastructs/Graph.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief A simple, fast class for managing verticies (nodes) and edges. diff --git a/include/emp/datastructs/IndexMap.hpp b/include/emp/datastructs/IndexMap.hpp index 9b3922c656..ead7f22fe4 100644 --- a/include/emp/datastructs/IndexMap.hpp +++ b/include/emp/datastructs/IndexMap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief A simple class to weight items differently within a container and return the correct index. diff --git a/include/emp/datastructs/QueueCache.hpp b/include/emp/datastructs/QueueCache.hpp index 6c736a9fe1..ee821b4307 100644 --- a/include/emp/datastructs/QueueCache.hpp +++ b/include/emp/datastructs/QueueCache.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A simple implementation of a Least-Recently Used Cache. diff --git a/include/emp/datastructs/SmallFifoMap.hpp b/include/emp/datastructs/SmallFifoMap.hpp index 70aadc55c6..eedb5512f5 100644 --- a/include/emp/datastructs/SmallFifoMap.hpp +++ b/include/emp/datastructs/SmallFifoMap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Store key value pairs in a fixed-sized array, bumping out the oldest diff --git a/include/emp/datastructs/SmallVector.hpp b/include/emp/datastructs/SmallVector.hpp index 19452d4323..e0d23a9d8b 100644 --- a/include/emp/datastructs/SmallVector.hpp +++ b/include/emp/datastructs/SmallVector.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A drop-in replacement for std::vector with optimization to handle diff --git a/include/emp/datastructs/StringMap.hpp b/include/emp/datastructs/StringMap.hpp index 1d1f0da99c..03ea74bfd4 100644 --- a/include/emp/datastructs/StringMap.hpp +++ b/include/emp/datastructs/StringMap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018-2021. */ /** * @brief An std::unordered_map wrapper that deals smoothly with strings and fast compile-time optimizations. diff --git a/include/emp/datastructs/TimeQueue.hpp b/include/emp/datastructs/TimeQueue.hpp index c6dfc27800..e3cc5264b5 100644 --- a/include/emp/datastructs/TimeQueue.hpp +++ b/include/emp/datastructs/TimeQueue.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A priority queue for timings, always marching forward. diff --git a/include/emp/datastructs/TypeMap.hpp b/include/emp/datastructs/TypeMap.hpp index 766f0666af..e03c4eafe9 100644 --- a/include/emp/datastructs/TypeMap.hpp +++ b/include/emp/datastructs/TypeMap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A class that will map types to values of a designated type. diff --git a/include/emp/datastructs/UnorderedIndexMap.hpp b/include/emp/datastructs/UnorderedIndexMap.hpp index 0a9244aade..bec4d5490f 100644 --- a/include/emp/datastructs/UnorderedIndexMap.hpp +++ b/include/emp/datastructs/UnorderedIndexMap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2021. */ /** * @brief A simple class to weight items differently within a container and return the correct index. diff --git a/include/emp/datastructs/graph_utils.hpp b/include/emp/datastructs/graph_utils.hpp index 9773ad2b99..1623ca176b 100644 --- a/include/emp/datastructs/graph_utils.hpp +++ b/include/emp/datastructs/graph_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief This file provides a number of tools for manipulating graphs. diff --git a/include/emp/datastructs/hash_utils.hpp b/include/emp/datastructs/hash_utils.hpp index fe33f30393..7571ce1ac1 100644 --- a/include/emp/datastructs/hash_utils.hpp +++ b/include/emp/datastructs/hash_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019-2021. */ /** * @brief This file provides tools for hashing values and containers. diff --git a/include/emp/datastructs/map_utils.hpp b/include/emp/datastructs/map_utils.hpp index 09b836a921..4aeeeb0bd6 100644 --- a/include/emp/datastructs/map_utils.hpp +++ b/include/emp/datastructs/map_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief A set of simple functions to manipulate maps. diff --git a/include/emp/datastructs/ra_set.hpp b/include/emp/datastructs/ra_set.hpp index 4ae788b9f7..b6aba1124c 100644 --- a/include/emp/datastructs/ra_set.hpp +++ b/include/emp/datastructs/ra_set.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2019 */ /** * @brief This file defines a Random Access Set template. diff --git a/include/emp/datastructs/reference_vector.hpp b/include/emp/datastructs/reference_vector.hpp index ac028d1ed5..ca3c37e314 100644 --- a/include/emp/datastructs/reference_vector.hpp +++ b/include/emp/datastructs/reference_vector.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief A version of vector that holds only references to objects. Be careful! diff --git a/include/emp/datastructs/set_utils.hpp b/include/emp/datastructs/set_utils.hpp index be1d521be3..acbd6786bc 100644 --- a/include/emp/datastructs/set_utils.hpp +++ b/include/emp/datastructs/set_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Tools to save and load data from classes. diff --git a/include/emp/datastructs/tuple_struct.hpp b/include/emp/datastructs/tuple_struct.hpp index 4d1a1935e2..8ac3c5c37c 100644 --- a/include/emp/datastructs/tuple_struct.hpp +++ b/include/emp/datastructs/tuple_struct.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief These macros will build a tuple and accessors to that tuple's members inside of a diff --git a/include/emp/datastructs/tuple_utils.hpp b/include/emp/datastructs/tuple_utils.hpp index b72aacc693..780256ca16 100644 --- a/include/emp/datastructs/tuple_utils.hpp +++ b/include/emp/datastructs/tuple_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief Functions to simplify the use of std::tuple diff --git a/include/emp/datastructs/valsort_map.hpp b/include/emp/datastructs/valsort_map.hpp index fef92e05c2..025708dd8a 100644 --- a/include/emp/datastructs/valsort_map.hpp +++ b/include/emp/datastructs/valsort_map.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief This file defines a map that is sorted by value, not key. diff --git a/include/emp/datastructs/vector_utils.hpp b/include/emp/datastructs/vector_utils.hpp index 46a6797a27..478c87e451 100644 --- a/include/emp/datastructs/vector_utils.hpp +++ b/include/emp/datastructs/vector_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2021. */ /** * @brief A set of simple functions to manipulate emp::vector diff --git a/include/emp/debug/alert.hpp b/include/emp/debug/alert.hpp index c399bb0762..8e72b85d23 100644 --- a/include/emp/debug/alert.hpp +++ b/include/emp/debug/alert.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Define an Alert function that goes to std::cerr in c++ or to Alert() in Javascript. diff --git a/include/emp/debug/debug.hpp b/include/emp/debug/debug.hpp index c66379c882..1167752f16 100644 --- a/include/emp/debug/debug.hpp +++ b/include/emp/debug/debug.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Basic tools for use in developing high-assurance code. diff --git a/include/emp/debug/mem_track.hpp b/include/emp/debug/mem_track.hpp index 3027afdc4b..96342e441e 100644 --- a/include/emp/debug/mem_track.hpp +++ b/include/emp/debug/mem_track.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2019 */ /** * @brief A set of macros to track how many instances of specific classes are made. diff --git a/include/emp/functional/AnyFunction.hpp b/include/emp/functional/AnyFunction.hpp index b6a7e2dd13..71badf2b85 100644 --- a/include/emp/functional/AnyFunction.hpp +++ b/include/emp/functional/AnyFunction.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief Based on std::function, but with a generic base class. diff --git a/include/emp/functional/FunctionSet.hpp b/include/emp/functional/FunctionSet.hpp index 44b8e01b9c..e8c1f3aff4 100644 --- a/include/emp/functional/FunctionSet.hpp +++ b/include/emp/functional/FunctionSet.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief Setup a collection of functions, all with the same signature, that can be run as a group. diff --git a/include/emp/functional/GenericFunction.hpp b/include/emp/functional/GenericFunction.hpp index 1967c9ed34..f89b7bfef2 100644 --- a/include/emp/functional/GenericFunction.hpp +++ b/include/emp/functional/GenericFunction.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2019 */ /** * @brief Based on std::function, but with a common base class. diff --git a/include/emp/functional/flex_function.hpp b/include/emp/functional/flex_function.hpp index 63074e841d..c84016d0a0 100644 --- a/include/emp/functional/flex_function.hpp +++ b/include/emp/functional/flex_function.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief Based on std::function, but holds default parameter values for calls with fewer args. diff --git a/include/emp/functional/memo_function.hpp b/include/emp/functional/memo_function.hpp index 5af44ef50b..99167e996f 100644 --- a/include/emp/functional/memo_function.hpp +++ b/include/emp/functional/memo_function.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019 */ /** * @brief A function that memorizes previous results to speed up any repeated calls. diff --git a/include/emp/games/Mancala.hpp b/include/emp/games/Mancala.hpp index 74d678c716..614d834b2f 100644 --- a/include/emp/games/Mancala.hpp +++ b/include/emp/games/Mancala.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 */ /** * @brief A simple Malcala game state handler. diff --git a/include/emp/games/Othello.hpp b/include/emp/games/Othello.hpp index d6c4c33842..cc0787891f 100644 --- a/include/emp/games/Othello.hpp +++ b/include/emp/games/Othello.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A simple Othello game state handler. diff --git a/include/emp/games/Othello8.hpp b/include/emp/games/Othello8.hpp index 1f70cda8c6..8ab967036c 100644 --- a/include/emp/games/Othello8.hpp +++ b/include/emp/games/Othello8.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A simple Othello game state handler limited to an 8x8 board. diff --git a/include/emp/games/PayoffMatrix.hpp b/include/emp/games/PayoffMatrix.hpp index f23e5a1315..c9795b3b8b 100644 --- a/include/emp/games/PayoffMatrix.hpp +++ b/include/emp/games/PayoffMatrix.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 */ /** * @brief A simple game theory payoff matrix. diff --git a/include/emp/geometry/Angle2D.hpp b/include/emp/geometry/Angle2D.hpp index 131d36592b..92a4e68a95 100644 --- a/include/emp/geometry/Angle2D.hpp +++ b/include/emp/geometry/Angle2D.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief emp::Angle maintains an angle on a 2D surface. diff --git a/include/emp/geometry/Body2D.hpp b/include/emp/geometry/Body2D.hpp index 894f3fa6e7..f1e7628f69 100644 --- a/include/emp/geometry/Body2D.hpp +++ b/include/emp/geometry/Body2D.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief This file defines classes to represent bodies that exist on a 2D surface. diff --git a/include/emp/geometry/Circle2D.hpp b/include/emp/geometry/Circle2D.hpp index e482bdd10f..b3fe065721 100644 --- a/include/emp/geometry/Circle2D.hpp +++ b/include/emp/geometry/Circle2D.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief A class to manage circles in a 2D plane. diff --git a/include/emp/geometry/Physics2D.hpp b/include/emp/geometry/Physics2D.hpp index 4dfdb107bf..8bdcd52cb9 100644 --- a/include/emp/geometry/Physics2D.hpp +++ b/include/emp/geometry/Physics2D.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Physics2D - handles movement and collissions in a simple 2D world. diff --git a/include/emp/geometry/Point2D.hpp b/include/emp/geometry/Point2D.hpp index 09751c8e6d..c430ff982c 100644 --- a/include/emp/geometry/Point2D.hpp +++ b/include/emp/geometry/Point2D.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief A simple class to track value pairs of any kind, optimized for points in 2D Space. diff --git a/include/emp/geometry/Surface.hpp b/include/emp/geometry/Surface.hpp index fd6b1d3e28..f3dae691ae 100644 --- a/include/emp/geometry/Surface.hpp +++ b/include/emp/geometry/Surface.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief This file defines a templated class to represent a 2D suface capable of maintaining data diff --git a/include/emp/geometry/Surface2D.hpp b/include/emp/geometry/Surface2D.hpp index 92a5bef46b..c3500ba29d 100644 --- a/include/emp/geometry/Surface2D.hpp +++ b/include/emp/geometry/Surface2D.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief This file defines a templated class to represent a 2D suface capable of maintaining data diff --git a/include/emp/hardware/AvidaCPU_InstLib.hpp b/include/emp/hardware/AvidaCPU_InstLib.hpp index 6ce3765296..eea268412d 100644 --- a/include/emp/hardware/AvidaCPU_InstLib.hpp +++ b/include/emp/hardware/AvidaCPU_InstLib.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief A specialized version of InstLib to handle AvidaCPU Instructions. diff --git a/include/emp/hardware/AvidaGP.hpp b/include/emp/hardware/AvidaGP.hpp index 4ca807490b..2d5dda58fb 100644 --- a/include/emp/hardware/AvidaGP.hpp +++ b/include/emp/hardware/AvidaGP.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2021. */ /** * @brief This is a simple, efficient CPU for and applied version of Avida. diff --git a/include/emp/hardware/BitSorter.hpp b/include/emp/hardware/BitSorter.hpp index 4e7ba4b3bb..0a9f7a4b39 100644 --- a/include/emp/hardware/BitSorter.hpp +++ b/include/emp/hardware/BitSorter.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A quick series of comparisons intended for sorting bits. diff --git a/include/emp/hardware/EventDrivenGP.hpp b/include/emp/hardware/EventDrivenGP.hpp index 474426bb60..ec87db9d8a 100644 --- a/include/emp/hardware/EventDrivenGP.hpp +++ b/include/emp/hardware/EventDrivenGP.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/hardware/EventLib.hpp b/include/emp/hardware/EventLib.hpp index e69782cf20..7354b84f37 100644 --- a/include/emp/hardware/EventLib.hpp +++ b/include/emp/hardware/EventLib.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief This file maintains information about events available in virtual hardware. diff --git a/include/emp/hardware/Genome.hpp b/include/emp/hardware/Genome.hpp index e6975eba68..788ea13d1a 100644 --- a/include/emp/hardware/Genome.hpp +++ b/include/emp/hardware/Genome.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief This is a simple, container for a series of instructions. diff --git a/include/emp/hardware/InstLib.hpp b/include/emp/hardware/InstLib.hpp index ce2cdcff67..3843dc5f8c 100644 --- a/include/emp/hardware/InstLib.hpp +++ b/include/emp/hardware/InstLib.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2021. */ /** * @brief This file maintains information about instructions availabel in virtual hardware. diff --git a/include/emp/hardware/LinearCode.hpp b/include/emp/hardware/LinearCode.hpp index 3581dfceb3..74a600f243 100644 --- a/include/emp/hardware/LinearCode.hpp +++ b/include/emp/hardware/LinearCode.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief A linear sequence of instructions. diff --git a/include/emp/hardware/signalgp_utils.hpp b/include/emp/hardware/signalgp_utils.hpp index 9077089f0d..dcc723709b 100644 --- a/include/emp/hardware/signalgp_utils.hpp +++ b/include/emp/hardware/signalgp_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief Helper functions for working with SignalGP virtual hardware/programs. diff --git a/include/emp/in_progress/BatchConfig.hpp b/include/emp/in_progress/BatchConfig.hpp index c3e74b8df6..f0c16393b0 100644 --- a/include/emp/in_progress/BatchConfig.hpp +++ b/include/emp/in_progress/BatchConfig.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief A tool to control a series of runs and keep them updated. diff --git a/include/emp/in_progress/ConfigLexer.hpp b/include/emp/in_progress/ConfigLexer.hpp index 01f3e4bf90..5c7158c52d 100644 --- a/include/emp/in_progress/ConfigLexer.hpp +++ b/include/emp/in_progress/ConfigLexer.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief A simple lexer for the Empirical configuration language. diff --git a/include/emp/in_progress/ConfigParser.hpp b/include/emp/in_progress/ConfigParser.hpp index 350c629a03..b0790d1656 100644 --- a/include/emp/in_progress/ConfigParser.hpp +++ b/include/emp/in_progress/ConfigParser.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief A simple parser for the Empirical configuration language. diff --git a/include/emp/in_progress/Empower/Empower.hpp b/include/emp/in_progress/Empower/Empower.hpp index b6b525a324..488cce5aa1 100644 --- a/include/emp/in_progress/Empower/Empower.hpp +++ b/include/emp/in_progress/Empower/Empower.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A scripting language built inside of C++ diff --git a/include/emp/in_progress/Empower/MemoryImage.hpp b/include/emp/in_progress/Empower/MemoryImage.hpp index 2413122b4e..d1afd6c7c6 100644 --- a/include/emp/in_progress/Empower/MemoryImage.hpp +++ b/include/emp/in_progress/Empower/MemoryImage.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A collection of arbitrary objects stored in a chunk of memory. diff --git a/include/emp/in_progress/Empower/Struct.hpp b/include/emp/in_progress/Empower/Struct.hpp index f5e21875e6..44484672a5 100644 --- a/include/emp/in_progress/Empower/Struct.hpp +++ b/include/emp/in_progress/Empower/Struct.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief Struct is a set of active variables, grouped by name (organized by a specific StructType) diff --git a/include/emp/in_progress/Empower/StructType.hpp b/include/emp/in_progress/Empower/StructType.hpp index 9f2d49e2cf..1426017afa 100644 --- a/include/emp/in_progress/Empower/StructType.hpp +++ b/include/emp/in_progress/Empower/StructType.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief StructType maps variables to a MemoryImage; Struct is an instance of StructType diff --git a/include/emp/in_progress/Empower/Type.hpp b/include/emp/in_progress/Empower/Type.hpp index 61aa2a16f4..3745d5b933 100644 --- a/include/emp/in_progress/Empower/Type.hpp +++ b/include/emp/in_progress/Empower/Type.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A collection of information about how to manage variables of a specified type. diff --git a/include/emp/in_progress/Empower/TypeManager.hpp b/include/emp/in_progress/Empower/TypeManager.hpp index 4592dc1473..034ea31e35 100644 --- a/include/emp/in_progress/Empower/TypeManager.hpp +++ b/include/emp/in_progress/Empower/TypeManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief Handles creation or retrieval of type objects. diff --git a/include/emp/in_progress/Empower/Var.hpp b/include/emp/in_progress/Empower/Var.hpp index c7f35332fd..bf57beea7a 100644 --- a/include/emp/in_progress/Empower/Var.hpp +++ b/include/emp/in_progress/Empower/Var.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A collection of information about a single, instantiated variable in Empower diff --git a/include/emp/in_progress/Empower/VarInfo.hpp b/include/emp/in_progress/Empower/VarInfo.hpp index e1c096ddc6..11bb2d8baf 100644 --- a/include/emp/in_progress/Empower/VarInfo.hpp +++ b/include/emp/in_progress/Empower/VarInfo.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief Generic info about a single variable (across MemoryImages) diff --git a/include/emp/in_progress/Empower2/Var.hpp b/include/emp/in_progress/Empower2/Var.hpp index 9cc37a4ab2..1c49ec4d2f 100644 --- a/include/emp/in_progress/Empower2/Var.hpp +++ b/include/emp/in_progress/Empower2/Var.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A collection of information about a single, instantiated variable in Empower diff --git a/include/emp/in_progress/Parser.hpp b/include/emp/in_progress/Parser.hpp index 3d2926b905..079f3cf7b3 100644 --- a/include/emp/in_progress/Parser.hpp +++ b/include/emp/in_progress/Parser.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019. */ /** * @brief A general-purpose, fast parser. diff --git a/include/emp/in_progress/Trait.hpp b/include/emp/in_progress/Trait.hpp index 84b6e8ed57..8bad104f94 100644 --- a/include/emp/in_progress/Trait.hpp +++ b/include/emp/in_progress/Trait.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 */ /** * @brief The TraitDef class maintains a category of measuments about another class. diff --git a/include/emp/in_progress/class.hpp b/include/emp/in_progress/class.hpp index ecd6c78f09..ca0cc6234b 100644 --- a/include/emp/in_progress/class.hpp +++ b/include/emp/in_progress/class.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 */ /** * @brief A re-engineering of tuple_struct.h, intended to be usable throughout Empirical. diff --git a/include/emp/in_progress/constexpr/ce_array.hpp b/include/emp/in_progress/constexpr/ce_array.hpp index 09648a0208..f2a4b58d3a 100644 --- a/include/emp/in_progress/constexpr/ce_array.hpp +++ b/include/emp/in_progress/constexpr/ce_array.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 */ /** * @brief ce_array defines a limited array object for use within a constexpr class or function. diff --git a/include/emp/in_progress/constexpr/ce_random.hpp b/include/emp/in_progress/constexpr/ce_random.hpp index 8742ba253c..1c6bb8325b 100644 --- a/include/emp/in_progress/constexpr/ce_random.hpp +++ b/include/emp/in_progress/constexpr/ce_random.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 */ /** * @brief A versatile and non-patterned pseudo-random-number generator. diff --git a/include/emp/in_progress/constexpr/ce_string.hpp b/include/emp/in_progress/constexpr/ce_string.hpp index c814454b87..c5f3c72915 100644 --- a/include/emp/in_progress/constexpr/ce_string.hpp +++ b/include/emp/in_progress/constexpr/ce_string.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 */ /** * @brief ce_string defines a limited string object for use within a constexpr class or function. diff --git a/include/emp/in_progress/fixed.hpp b/include/emp/in_progress/fixed.hpp index 65b0e58f26..c5622376fc 100644 --- a/include/emp/in_progress/fixed.hpp +++ b/include/emp/in_progress/fixed.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 */ /** * @brief A comprehensive (ideally) fixed-point number representation. diff --git a/include/emp/in_progress/struct.hpp b/include/emp/in_progress/struct.hpp index 0d7c1914e7..8199e4152b 100644 --- a/include/emp/in_progress/struct.hpp +++ b/include/emp/in_progress/struct.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief A re-engineering of tuple_struct.h, intended to be usable throughout Empirical. diff --git a/include/emp/io/ContiguousStream.hpp b/include/emp/io/ContiguousStream.hpp index 2d5787248a..46f77a938f 100644 --- a/include/emp/io/ContiguousStream.hpp +++ b/include/emp/io/ContiguousStream.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief Useful for streaming data to contiguous memory. diff --git a/include/emp/io/File.hpp b/include/emp/io/File.hpp index 864fd5b7b3..f7ecd92ea3 100644 --- a/include/emp/io/File.hpp +++ b/include/emp/io/File.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018-2020. */ /** * @brief The File object maintains a simple, in-memory file. diff --git a/include/emp/io/MemoryIStream.hpp b/include/emp/io/MemoryIStream.hpp index d4a18066f6..74f28deaba 100644 --- a/include/emp/io/MemoryIStream.hpp +++ b/include/emp/io/MemoryIStream.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Useful for streaming data from contiguous memory. diff --git a/include/emp/io/NullStream.hpp b/include/emp/io/NullStream.hpp index d9c5e3578f..3a823dd2f3 100644 --- a/include/emp/io/NullStream.hpp +++ b/include/emp/io/NullStream.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief A handy no-operation output stream. diff --git a/include/emp/io/StreamManager.hpp b/include/emp/io/StreamManager.hpp index cf93916b7d..f2f12dd884 100644 --- a/include/emp/io/StreamManager.hpp +++ b/include/emp/io/StreamManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020-2021. */ /** * @brief The StreamManager object links names to files or other streams. diff --git a/include/emp/io/ascii_utils.hpp b/include/emp/io/ascii_utils.hpp index e4b05b2050..b2f0c3bb1b 100644 --- a/include/emp/io/ascii_utils.hpp +++ b/include/emp/io/ascii_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Tools for working with ascii output. diff --git a/include/emp/io/serialize.hpp b/include/emp/io/serialize.hpp index 3406f83e18..1166f3df65 100644 --- a/include/emp/io/serialize.hpp +++ b/include/emp/io/serialize.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2021. */ /** * @brief Tools to save and load data from classes. diff --git a/include/emp/io/serialize_macros.hpp b/include/emp/io/serialize_macros.hpp index 798d593800..4741edfbe2 100644 --- a/include/emp/io/serialize_macros.hpp +++ b/include/emp/io/serialize_macros.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2021. */ /** * @brief Macros for simplifying to serialization of objects. diff --git a/include/emp/matching/MatchBin.hpp b/include/emp/matching/MatchBin.hpp index 04c1514714..f28f51c522 100644 --- a/include/emp/matching/MatchBin.hpp +++ b/include/emp/matching/MatchBin.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A container that supports flexible tag-based lookup. . diff --git a/include/emp/matching/MatchDepository.hpp b/include/emp/matching/MatchDepository.hpp index 3272cc00ea..c52a14edc8 100644 --- a/include/emp/matching/MatchDepository.hpp +++ b/include/emp/matching/MatchDepository.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A container for tag-based lookup, optimized for situations where diff --git a/include/emp/matching/_DepositoryEntry.hpp b/include/emp/matching/_DepositoryEntry.hpp index 2e16e0cdd0..6899cbd55e 100644 --- a/include/emp/matching/_DepositoryEntry.hpp +++ b/include/emp/matching/_DepositoryEntry.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Helper struct for MatchDepository. diff --git a/include/emp/matching/matchbin_metrics.hpp b/include/emp/matching/matchbin_metrics.hpp index 153ec012ec..888c6bb1fb 100644 --- a/include/emp/matching/matchbin_metrics.hpp +++ b/include/emp/matching/matchbin_metrics.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019-2021. */ /** * @brief Metric structs that can be plugged into MatchBin. diff --git a/include/emp/matching/matchbin_regulators.hpp b/include/emp/matching/matchbin_regulators.hpp index 2018fa2d70..684fabe440 100644 --- a/include/emp/matching/matchbin_regulators.hpp +++ b/include/emp/matching/matchbin_regulators.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019-2020. */ /** * @brief Regulator structs that can be plugged into MatchBin. diff --git a/include/emp/matching/matchbin_selectors.hpp b/include/emp/matching/matchbin_selectors.hpp index cbdf0e39c5..87b6dee2ef 100644 --- a/include/emp/matching/matchbin_selectors.hpp +++ b/include/emp/matching/matchbin_selectors.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019-2021. */ /** * @brief Selector structs that can be plugged into MatchBin. diff --git a/include/emp/matching/matchbin_utils.hpp b/include/emp/matching/matchbin_utils.hpp index 7ae7c1338e..c99966d00a 100644 --- a/include/emp/matching/matchbin_utils.hpp +++ b/include/emp/matching/matchbin_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief Metric, Selector, and Regulator structs diff --git a/include/emp/matching/regulators/PlusCountdownRegulator.hpp b/include/emp/matching/regulators/PlusCountdownRegulator.hpp index 32d3bab2b8..3cddd4a50b 100644 --- a/include/emp/matching/regulators/PlusCountdownRegulator.hpp +++ b/include/emp/matching/regulators/PlusCountdownRegulator.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Regulator that modifies match distance through addition diff --git a/include/emp/matching/selectors_static/RankedSelector.hpp b/include/emp/matching/selectors_static/RankedSelector.hpp index 983206896e..a6f92c03f6 100644 --- a/include/emp/matching/selectors_static/RankedSelector.hpp +++ b/include/emp/matching/selectors_static/RankedSelector.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Selector that picks the N best matches within a threshold. diff --git a/include/emp/math/Distribution.hpp b/include/emp/math/Distribution.hpp index 0b89b61978..ed674a4198 100644 --- a/include/emp/math/Distribution.hpp +++ b/include/emp/math/Distribution.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018-2020. */ /** * @brief A set of pre-calculated discrete distributions that can quickly generate random values. diff --git a/include/emp/math/Fraction.hpp b/include/emp/math/Fraction.hpp index bec6c72f41..2589c55484 100644 --- a/include/emp/math/Fraction.hpp +++ b/include/emp/math/Fraction.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Tools to maintain a more exact fraction (rather than lose precision as a double) diff --git a/include/emp/math/Random.hpp b/include/emp/math/Random.hpp index 20eb59e213..85f4a1ae74 100644 --- a/include/emp/math/Random.hpp +++ b/include/emp/math/Random.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2021. */ /** * @brief A versatile and non-patterned pseudo-random-number generator. diff --git a/include/emp/math/Range.hpp b/include/emp/math/Range.hpp index 09862353d6..722b4a1ce7 100644 --- a/include/emp/math/Range.hpp +++ b/include/emp/math/Range.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019 */ /** * @brief A simple way to track value ranges diff --git a/include/emp/math/combos.hpp b/include/emp/math/combos.hpp index 1622e4a140..be27e2ea5f 100644 --- a/include/emp/math/combos.hpp +++ b/include/emp/math/combos.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 */ /** * @brief Tools to step through combinations of items. diff --git a/include/emp/math/constants.hpp b/include/emp/math/constants.hpp index 85e4f0e336..e02c1e7a18 100644 --- a/include/emp/math/constants.hpp +++ b/include/emp/math/constants.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Commonly used constant values. diff --git a/include/emp/math/distances.hpp b/include/emp/math/distances.hpp index b01664bc95..a78c3937a8 100644 --- a/include/emp/math/distances.hpp +++ b/include/emp/math/distances.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief Library of commonly used distance functions diff --git a/include/emp/math/info_theory.hpp b/include/emp/math/info_theory.hpp index 826e642793..045b8da43a 100644 --- a/include/emp/math/info_theory.hpp +++ b/include/emp/math/info_theory.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021. */ /** * @brief Tools to calculate Information Theory metrics. diff --git a/include/emp/math/math.hpp b/include/emp/math/math.hpp index 1b752aed3d..e47ae81ab9 100644 --- a/include/emp/math/math.hpp +++ b/include/emp/math/math.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief Useful mathematical functions (that are constexpr when possible.) diff --git a/include/emp/math/random_utils.hpp b/include/emp/math/random_utils.hpp index 64104f9803..e7062ed649 100644 --- a/include/emp/math/random_utils.hpp +++ b/include/emp/math/random_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief Helper functions for emp::Random for common random tasks. diff --git a/include/emp/math/sequence_utils.hpp b/include/emp/math/sequence_utils.hpp index dcbe60d9fb..a075f0faf6 100644 --- a/include/emp/math/sequence_utils.hpp +++ b/include/emp/math/sequence_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020. */ /** * @brief Functions for analyzing with generic sequence types. diff --git a/include/emp/math/spatial_stats.hpp b/include/emp/math/spatial_stats.hpp index 086b6cd9e0..922c873e53 100644 --- a/include/emp/math/spatial_stats.hpp +++ b/include/emp/math/spatial_stats.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019 */ /** * @brief Functions for calculating various spatial statistics. diff --git a/include/emp/math/stats.hpp b/include/emp/math/stats.hpp index 527bd3a6d8..92b66bc6af 100644 --- a/include/emp/math/stats.hpp +++ b/include/emp/math/stats.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019 */ /** * @brief Functions for calculating various statistics about an ensemble. diff --git a/include/emp/meta/ConceptWrapper.hpp b/include/emp/meta/ConceptWrapper.hpp index 7b3b848b9b..8192d4eb92 100644 --- a/include/emp/meta/ConceptWrapper.hpp +++ b/include/emp/meta/ConceptWrapper.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018-2021. */ /** * @brief A template wrapper that will either enforce functionality or provide default functions. diff --git a/include/emp/meta/TypeID.hpp b/include/emp/meta/TypeID.hpp index e3f6ebb7c4..85d1d1298a 100644 --- a/include/emp/meta/TypeID.hpp +++ b/include/emp/meta/TypeID.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 */ /** * @brief TypeID provides an easy way to convert types to strings. diff --git a/include/emp/meta/TypePack.hpp b/include/emp/meta/TypePack.hpp index 554a4237d0..f8c1066727 100644 --- a/include/emp/meta/TypePack.hpp +++ b/include/emp/meta/TypePack.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief A set of types that can be manipulated at compile time (good for metaprogramming) diff --git a/include/emp/meta/ValPack.hpp b/include/emp/meta/ValPack.hpp index 6f655e1c97..ea973f050d 100644 --- a/include/emp/meta/ValPack.hpp +++ b/include/emp/meta/ValPack.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief A set of values that can be manipulated at compile time (good for metaprogramming) diff --git a/include/emp/meta/macro_math.hpp b/include/emp/meta/macro_math.hpp index 2326cbd61d..7f7ccfe6cb 100644 --- a/include/emp/meta/macro_math.hpp +++ b/include/emp/meta/macro_math.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Macros to build a pre-processor calculator system. diff --git a/include/emp/meta/macros.hpp b/include/emp/meta/macros.hpp index f621d5aafd..96a2e7d475 100644 --- a/include/emp/meta/macros.hpp +++ b/include/emp/meta/macros.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Generally useful macros that can perform cools tricks. diff --git a/include/emp/meta/meta.hpp b/include/emp/meta/meta.hpp index 1f4fb22c28..3cb890fb0f 100644 --- a/include/emp/meta/meta.hpp +++ b/include/emp/meta/meta.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 */ /** * @brief A bunch of C++ Template Meta-programming tricks. diff --git a/include/emp/meta/reflection.hpp b/include/emp/meta/reflection.hpp index acefbea0e0..8cbc33112f 100644 --- a/include/emp/meta/reflection.hpp +++ b/include/emp/meta/reflection.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Macros and template utilities to help determine details about unknown classes. diff --git a/include/emp/meta/type_traits.hpp b/include/emp/meta/type_traits.hpp index d359b957b3..2715ec3d2e 100644 --- a/include/emp/meta/type_traits.hpp +++ b/include/emp/meta/type_traits.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief Extensions on the standard library type traits to handle Empirical classes (such as Ptr). diff --git a/include/emp/polyfill/span.hpp b/include/emp/polyfill/span.hpp index 620d0d7135..b76d306c53 100644 --- a/include/emp/polyfill/span.hpp +++ b/include/emp/polyfill/span.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Polyfill for C++20 std::span. diff --git a/include/emp/prefab/Card.hpp b/include/emp/prefab/Card.hpp index a434f2fed3..85764584ce 100644 --- a/include/emp/prefab/Card.hpp +++ b/include/emp/prefab/Card.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Wraps a Bootstrap card. diff --git a/include/emp/prefab/CodeBlock.hpp b/include/emp/prefab/CodeBlock.hpp index 7af96d3c9f..01ed2a3907 100644 --- a/include/emp/prefab/CodeBlock.hpp +++ b/include/emp/prefab/CodeBlock.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Wraps a HighlightJS code block. diff --git a/include/emp/prefab/Collapse.hpp b/include/emp/prefab/Collapse.hpp index ebd26fcf62..4a45491f77 100644 --- a/include/emp/prefab/Collapse.hpp +++ b/include/emp/prefab/Collapse.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Sets up a collapsable DOM element. diff --git a/include/emp/prefab/CommentBox.hpp b/include/emp/prefab/CommentBox.hpp index 3c462c885f..11934a462a 100644 --- a/include/emp/prefab/CommentBox.hpp +++ b/include/emp/prefab/CommentBox.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Create a light grey "comment bubble." diff --git a/include/emp/prefab/ConfigPanel.hpp b/include/emp/prefab/ConfigPanel.hpp index 2e0a5f7519..79a1c2cf8e 100644 --- a/include/emp/prefab/ConfigPanel.hpp +++ b/include/emp/prefab/ConfigPanel.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Interfaces with emp::config objects to provide UI configuration. diff --git a/include/emp/prefab/FontAwesomeIcon.hpp b/include/emp/prefab/FontAwesomeIcon.hpp index a1c6944b48..38b1f47f8d 100644 --- a/include/emp/prefab/FontAwesomeIcon.hpp +++ b/include/emp/prefab/FontAwesomeIcon.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Wraps Font Awesome's icons. diff --git a/include/emp/prefab/LoadingIcon.hpp b/include/emp/prefab/LoadingIcon.hpp index 23f88d5572..85a95a5cb6 100644 --- a/include/emp/prefab/LoadingIcon.hpp +++ b/include/emp/prefab/LoadingIcon.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Wraps Font Awesome's loading glyph. diff --git a/include/emp/prefab/LoadingModal.hpp b/include/emp/prefab/LoadingModal.hpp index e48de3e13a..8cf958f03e 100644 --- a/include/emp/prefab/LoadingModal.hpp +++ b/include/emp/prefab/LoadingModal.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020-2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020-2021 */ /** * @brief Wrapper for loading moadal diff --git a/include/emp/prefab/Modal.hpp b/include/emp/prefab/Modal.hpp index 99b933668f..947b9697ba 100644 --- a/include/emp/prefab/Modal.hpp +++ b/include/emp/prefab/Modal.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Wraps a Bootstrap modal. diff --git a/include/emp/prefab/ReadoutPanel.hpp b/include/emp/prefab/ReadoutPanel.hpp index ef2f45996c..19ed8e3c44 100644 --- a/include/emp/prefab/ReadoutPanel.hpp +++ b/include/emp/prefab/ReadoutPanel.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief UI framework for live statistic readouts. diff --git a/include/emp/prefab/ToggleSwitch.hpp b/include/emp/prefab/ToggleSwitch.hpp index 5235795359..aeb1e344de 100644 --- a/include/emp/prefab/ToggleSwitch.hpp +++ b/include/emp/prefab/ToggleSwitch.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief Wraps Bootstrap's toggle switch. diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index 8d2323d08b..748a8a15b6 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief UI subcomponent for ConfigPanel and ReadoutPanel. diff --git a/include/emp/scholar/Author.hpp b/include/emp/scholar/Author.hpp index 9d82346fdb..b3844be723 100644 --- a/include/emp/scholar/Author.hpp +++ b/include/emp/scholar/Author.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief Basic information about an author. diff --git a/include/emp/scholar/Bibliography.hpp b/include/emp/scholar/Bibliography.hpp index 63487abccd..415273fbf8 100644 --- a/include/emp/scholar/Bibliography.hpp +++ b/include/emp/scholar/Bibliography.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief A collection of references. diff --git a/include/emp/scholar/Citation.hpp b/include/emp/scholar/Citation.hpp index f9bce6fef5..42be18416f 100644 --- a/include/emp/scholar/Citation.hpp +++ b/include/emp/scholar/Citation.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019 */ /** * @brief Information about a citation for a single paper / book / etc. diff --git a/include/emp/testing/unit_tests.hpp b/include/emp/testing/unit_tests.hpp index 0bb6239cd0..1cad9a368c 100644 --- a/include/emp/testing/unit_tests.hpp +++ b/include/emp/testing/unit_tests.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2019 */ /** * @brief Macros to facilitate unit testing. diff --git a/include/emp/tools/SolveState.hpp b/include/emp/tools/SolveState.hpp index d6c7d86e0c..798a026041 100644 --- a/include/emp/tools/SolveState.hpp +++ b/include/emp/tools/SolveState.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief Used as part of a branching solver to keep track of the current state. diff --git a/include/emp/tools/TypeTracker.hpp b/include/emp/tools/TypeTracker.hpp index 8a87a83a16..ccb92c8423 100644 --- a/include/emp/tools/TypeTracker.hpp +++ b/include/emp/tools/TypeTracker.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Track class types abstractly to dynamically call correct function overloads. diff --git a/include/emp/tools/attrs.hpp b/include/emp/tools/attrs.hpp index 40f67d7e32..d58501b50b 100644 --- a/include/emp/tools/attrs.hpp +++ b/include/emp/tools/attrs.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/tools/hash_namify.hpp b/include/emp/tools/hash_namify.hpp index 509bd13ff1..b6dfdca5ff 100644 --- a/include/emp/tools/hash_namify.hpp +++ b/include/emp/tools/hash_namify.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief A method for mapping hash values to intuitive names. diff --git a/include/emp/tools/keyname_utils.hpp b/include/emp/tools/keyname_utils.hpp index c7cc676726..96d1e70423 100644 --- a/include/emp/tools/keyname_utils.hpp +++ b/include/emp/tools/keyname_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief Utility functions that support the keyname file naming convention. diff --git a/include/emp/tools/string_utils.hpp b/include/emp/tools/string_utils.hpp index b9cbb549a4..73ab3e3dec 100644 --- a/include/emp/tools/string_utils.hpp +++ b/include/emp/tools/string_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021. */ /** * @brief Simple functions to manipulate strings. diff --git a/include/emp/tools/timing.hpp b/include/emp/tools/timing.hpp index b9cfba30e0..0fd2cb81d2 100644 --- a/include/emp/tools/timing.hpp +++ b/include/emp/tools/timing.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020. */ /** * @brief A collection of tools to help measure timing of code. diff --git a/include/emp/tools/unique.hpp b/include/emp/tools/unique.hpp index efc018017e..dd93037de4 100644 --- a/include/emp/tools/unique.hpp +++ b/include/emp/tools/unique.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020 */ /** * @brief Methods to generate UIDs. diff --git a/include/emp/tools/value_utils.hpp b/include/emp/tools/value_utils.hpp index 074ac352bd..8710b2d047 100644 --- a/include/emp/tools/value_utils.hpp +++ b/include/emp/tools/value_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief Simple functions to manipulate values. diff --git a/include/emp/web/Animate.hpp b/include/emp/web/Animate.hpp index ca1111bf1e..a362909f98 100644 --- a/include/emp/web/Animate.hpp +++ b/include/emp/web/Animate.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Manage animations on a web site. diff --git a/include/emp/web/Attributes.hpp b/include/emp/web/Attributes.hpp index 25ba162de7..8063a6cf46 100644 --- a/include/emp/web/Attributes.hpp +++ b/include/emp/web/Attributes.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief An Attributes class for tracking non-style features about HTML objects diff --git a/include/emp/web/Button.hpp b/include/emp/web/Button.hpp index 5b77584052..a4cc78df3d 100644 --- a/include/emp/web/Button.hpp +++ b/include/emp/web/Button.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018. */ /** * @brief Create/control an HTML button and call a specified function when that button is clicked. diff --git a/include/emp/web/Canvas.hpp b/include/emp/web/Canvas.hpp index 2045d0f842..c11e94957f 100644 --- a/include/emp/web/Canvas.hpp +++ b/include/emp/web/Canvas.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Manage an HTML canvas object. diff --git a/include/emp/web/CanvasAction.hpp b/include/emp/web/CanvasAction.hpp index afdd5e0d96..187487a7b7 100644 --- a/include/emp/web/CanvasAction.hpp +++ b/include/emp/web/CanvasAction.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Define a base class for all actions that can be done to widgets, plus simple actions. diff --git a/include/emp/web/CanvasShape.hpp b/include/emp/web/CanvasShape.hpp index 3b94658bdd..3c87bcac8b 100644 --- a/include/emp/web/CanvasShape.hpp +++ b/include/emp/web/CanvasShape.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Define simple shapes to draw on a canvas. diff --git a/include/emp/web/Div.hpp b/include/emp/web/Div.hpp index dd609b02bf..314624c971 100644 --- a/include/emp/web/Div.hpp +++ b/include/emp/web/Div.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Div Widgets maintain an ordered collection of other widgets in an HTML div. diff --git a/include/emp/web/DocuExtras.hpp b/include/emp/web/DocuExtras.hpp index d7e774a24c..e9d4676a8b 100644 --- a/include/emp/web/DocuExtras.hpp +++ b/include/emp/web/DocuExtras.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2019 */ /** * @brief Control the styling and attributes of an existing div without nuking diff --git a/include/emp/web/Document.hpp b/include/emp/web/Document.hpp index 0feaa80e22..2f64fbceed 100644 --- a/include/emp/web/Document.hpp +++ b/include/emp/web/Document.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Manage an entire document. diff --git a/include/emp/web/Element.hpp b/include/emp/web/Element.hpp index adda4467fc..736d3b5428 100644 --- a/include/emp/web/Element.hpp +++ b/include/emp/web/Element.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief Element Widgets maintain an ordered collection of other widgets diff --git a/include/emp/web/FileInput.hpp b/include/emp/web/FileInput.hpp index 03c9d6c78a..08bcfc7e74 100644 --- a/include/emp/web/FileInput.hpp +++ b/include/emp/web/FileInput.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Specs for the FileInput widget (click on to upload a file) diff --git a/include/emp/web/Font.hpp b/include/emp/web/Font.hpp index 1614f347bc..b42aad3019 100644 --- a/include/emp/web/Font.hpp +++ b/include/emp/web/Font.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Maintains basic information about a font to be used in HTML. diff --git a/include/emp/web/Image.hpp b/include/emp/web/Image.hpp index d5f50c8b69..ed8675a54c 100644 --- a/include/emp/web/Image.hpp +++ b/include/emp/web/Image.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Easily load an image and place it in a document. diff --git a/include/emp/web/Input.hpp b/include/emp/web/Input.hpp index 37745cf786..13cfb682e6 100644 --- a/include/emp/web/Input.hpp +++ b/include/emp/web/Input.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 */ /** * @brief Create/control an HTML input and call a specified function when it receives input. diff --git a/include/emp/web/JSWrap.hpp b/include/emp/web/JSWrap.hpp index e2c2594ca5..a04de622cd 100644 --- a/include/emp/web/JSWrap.hpp +++ b/include/emp/web/JSWrap.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Wrap a C++ function and convert it to an integer that can be called from Javascript diff --git a/include/emp/web/KeypressManager.hpp b/include/emp/web/KeypressManager.hpp index 620ae81a33..9c696f491b 100644 --- a/include/emp/web/KeypressManager.hpp +++ b/include/emp/web/KeypressManager.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief KeypressManager is a tracker for keypresses in HTML5 pages. diff --git a/include/emp/web/Listeners.hpp b/include/emp/web/Listeners.hpp index 99ecb10287..32dda8cacb 100644 --- a/include/emp/web/Listeners.hpp +++ b/include/emp/web/Listeners.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief A class for tracking font event listeners for Widgets diff --git a/include/emp/web/NodeDomShim.hpp b/include/emp/web/NodeDomShim.hpp index db976dcdbe..34ee822e56 100644 --- a/include/emp/web/NodeDomShim.hpp +++ b/include/emp/web/NodeDomShim.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Shim for Empirical compatibility with node.js. Mimicks the browser diff --git a/include/emp/web/RawImage.hpp b/include/emp/web/RawImage.hpp index a24ffb0713..213548b4eb 100644 --- a/include/emp/web/RawImage.hpp +++ b/include/emp/web/RawImage.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Handle the fundamental loading of an image (without Widget tracking) diff --git a/include/emp/web/Selector.hpp b/include/emp/web/Selector.hpp index c032ec4389..237d4a2044 100644 --- a/include/emp/web/Selector.hpp +++ b/include/emp/web/Selector.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Specs for the Selector widget. diff --git a/include/emp/web/Style.hpp b/include/emp/web/Style.hpp index 8248b158ce..ab79189f2b 100644 --- a/include/emp/web/Style.hpp +++ b/include/emp/web/Style.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief A CSS class for tracking font style, etc. diff --git a/include/emp/web/Table.hpp b/include/emp/web/Table.hpp index 7030434abc..2d6d10f474 100644 --- a/include/emp/web/Table.hpp +++ b/include/emp/web/Table.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Specs for the Table widget. diff --git a/include/emp/web/Text.hpp b/include/emp/web/Text.hpp index 56328009cb..a8360a7a4f 100644 --- a/include/emp/web/Text.hpp +++ b/include/emp/web/Text.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Specs for the Text widget. diff --git a/include/emp/web/TextArea.hpp b/include/emp/web/TextArea.hpp index 4bc4d11f76..606c3ef14b 100644 --- a/include/emp/web/TextArea.hpp +++ b/include/emp/web/TextArea.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Specs for the TextArea widget. diff --git a/include/emp/web/TextFeed.hpp b/include/emp/web/TextFeed.hpp index dcaa46693f..b77e2103d2 100644 --- a/include/emp/web/TextFeed.hpp +++ b/include/emp/web/TextFeed.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief A representation of text on a web page optimized for rapid appends. diff --git a/include/emp/web/Tween.hpp b/include/emp/web/Tween.hpp index 3c98742f1f..8e9831e830 100644 --- a/include/emp/web/Tween.hpp +++ b/include/emp/web/Tween.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief A Tween manages the gradual shift in properties of one or more widgets over time. diff --git a/include/emp/web/UrlParams.hpp b/include/emp/web/UrlParams.hpp index 5f86bc7ca9..03da91ee9c 100644 --- a/include/emp/web/UrlParams.hpp +++ b/include/emp/web/UrlParams.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 */ /** * @brief Get an unordered_map containing url query key/value parameters. diff --git a/include/emp/web/Widget.hpp b/include/emp/web/Widget.hpp index 100cfaec7e..2efcdd9743 100644 --- a/include/emp/web/Widget.hpp +++ b/include/emp/web/Widget.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2019. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2019. */ /** * @brief Widgets maintain individual components on a web page and link to Elements diff --git a/include/emp/web/WidgetExtras.hpp b/include/emp/web/WidgetExtras.hpp index f0f6a45d1c..ee1dafaba7 100644 --- a/include/emp/web/WidgetExtras.hpp +++ b/include/emp/web/WidgetExtras.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief A collection of extra details about HTML Widgets (attributes, style, listerns) diff --git a/include/emp/web/_FacetedWidget.hpp b/include/emp/web/_FacetedWidget.hpp index 5c3b8d2e31..3ff7ef89d8 100644 --- a/include/emp/web/_FacetedWidget.hpp +++ b/include/emp/web/_FacetedWidget.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief The FacetedWidget class is used to access the protected methods of WidgetFacet such diff --git a/include/emp/web/_MochaTestRunner.hpp b/include/emp/web/_MochaTestRunner.hpp index d5fa9002b5..ad32013310 100644 --- a/include/emp/web/_MochaTestRunner.hpp +++ b/include/emp/web/_MochaTestRunner.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 */ /** * @brief Utility class for managing software testing for Emscripten web code using the Karma + Mocha diff --git a/include/emp/web/_TableCell.hpp b/include/emp/web/_TableCell.hpp index a07bd6364a..d646b41a66 100644 --- a/include/emp/web/_TableCell.hpp +++ b/include/emp/web/_TableCell.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018. */ /** * @brief The TableCell widget, which behaves like the Table widget, but focuses on a single cell. diff --git a/include/emp/web/_TableCol.hpp b/include/emp/web/_TableCol.hpp index 819d755c56..55611f63fb 100644 --- a/include/emp/web/_TableCol.hpp +++ b/include/emp/web/_TableCol.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018. */ /** * @brief The TableCol widget, which behaves like the Table widget, but focuses on a single column. diff --git a/include/emp/web/_TableColGroup.hpp b/include/emp/web/_TableColGroup.hpp index 9cacf989c9..66a9b66c67 100644 --- a/include/emp/web/_TableColGroup.hpp +++ b/include/emp/web/_TableColGroup.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018. */ /** * @brief The TableColGoup widget, which behaves like the Table widget, but focuses on a group of columns. diff --git a/include/emp/web/_TableRow.hpp b/include/emp/web/_TableRow.hpp index da39289e45..e67ff41cbe 100644 --- a/include/emp/web/_TableRow.hpp +++ b/include/emp/web/_TableRow.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018. */ /** * @brief The TableRow widget, which behaves like the Table widget, but focuses on a single row. diff --git a/include/emp/web/_TableRowGroup.hpp b/include/emp/web/_TableRowGroup.hpp index 9bc3568fc2..b9042a9fac 100644 --- a/include/emp/web/_TableRowGroup.hpp +++ b/include/emp/web/_TableRowGroup.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018. */ /** * @brief The TableRowGoup widget, which behaves like the Table widget, but focuses on a group of rows. diff --git a/include/emp/web/canvas_utils.hpp b/include/emp/web/canvas_utils.hpp index 6b72ac3ad0..27c298d979 100644 --- a/include/emp/web/canvas_utils.hpp +++ b/include/emp/web/canvas_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Various versions of the Draw() function to draw images onto a canvas. diff --git a/include/emp/web/color_map.hpp b/include/emp/web/color_map.hpp index 3b7a56e72b..5dc7cc9b19 100644 --- a/include/emp/web/color_map.hpp +++ b/include/emp/web/color_map.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Tools to dynamically build (and cache) color maps. diff --git a/include/emp/web/commands.hpp b/include/emp/web/commands.hpp index 9c2f687149..02f6867399 100644 --- a/include/emp/web/commands.hpp +++ b/include/emp/web/commands.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief A set of command-defining classes that can be fed into widgets using the << operator. diff --git a/include/emp/web/d3/axis.hpp b/include/emp/web/d3/axis.hpp index 3adf539057..8ea0880b26 100644 --- a/include/emp/web/d3/axis.hpp +++ b/include/emp/web/d3/axis.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief Handle drawing of axes on D3 graphts. diff --git a/include/emp/web/d3/d3_init.hpp b/include/emp/web/d3/d3_init.hpp index 98d65f287c..087635911e 100644 --- a/include/emp/web/d3/d3_init.hpp +++ b/include/emp/web/d3/d3_init.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/web/d3/dataset.hpp b/include/emp/web/d3/dataset.hpp index de599965ea..833340f508 100644 --- a/include/emp/web/d3/dataset.hpp +++ b/include/emp/web/d3/dataset.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Tools to maintain data in D3. diff --git a/include/emp/web/d3/histogram.hpp b/include/emp/web/d3/histogram.hpp index 61af768a3d..ee33399888 100644 --- a/include/emp/web/d3/histogram.hpp +++ b/include/emp/web/d3/histogram.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/web/d3/layout.hpp b/include/emp/web/d3/layout.hpp index 5d9f0ffb56..659dc57c92 100644 --- a/include/emp/web/d3/layout.hpp +++ b/include/emp/web/d3/layout.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Tools for laying out nodes in D3. diff --git a/include/emp/web/d3/scales.hpp b/include/emp/web/d3/scales.hpp index 02ed14beb5..ef9864b7b7 100644 --- a/include/emp/web/d3/scales.hpp +++ b/include/emp/web/d3/scales.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Tools for scaling graph axes in D3. diff --git a/include/emp/web/d3/selection.hpp b/include/emp/web/d3/selection.hpp index 8c28701b9a..c4d126c1dd 100644 --- a/include/emp/web/d3/selection.hpp +++ b/include/emp/web/d3/selection.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 */ /** * @brief TODO. diff --git a/include/emp/web/d3/svg_shapes.hpp b/include/emp/web/d3/svg_shapes.hpp index 61a6e9a2dc..cdcab17c9b 100644 --- a/include/emp/web/d3/svg_shapes.hpp +++ b/include/emp/web/d3/svg_shapes.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 */ /** * @brief Tools to build common SVG shapes. diff --git a/include/emp/web/d3/utils.hpp b/include/emp/web/d3/utils.hpp index 64f549f42a..7341074bdf 100644 --- a/include/emp/web/d3/utils.hpp +++ b/include/emp/web/d3/utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief This file contains macros used to build Empirical's C++ wrapper for D3. diff --git a/include/emp/web/d3/visual_elements.hpp b/include/emp/web/d3/visual_elements.hpp index f4b2c1c008..5640ab165b 100644 --- a/include/emp/web/d3/visual_elements.hpp +++ b/include/emp/web/d3/visual_elements.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 */ /** * @brief TODO. diff --git a/include/emp/web/d3/visualizations.hpp b/include/emp/web/d3/visualizations.hpp index 0f313a09f7..f516fdb8b5 100644 --- a/include/emp/web/d3/visualizations.hpp +++ b/include/emp/web/d3/visualizations.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 */ /** * @brief Tools to build D3 visualizations. diff --git a/include/emp/web/emfunctions.hpp b/include/emp/web/emfunctions.hpp index b2f1bc5249..5eb9ef4a44 100644 --- a/include/emp/web/emfunctions.hpp +++ b/include/emp/web/emfunctions.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Specialized, useful function for Empirical. diff --git a/include/emp/web/events.hpp b/include/emp/web/events.hpp index c7fbf5eabf..870a76bcd1 100644 --- a/include/emp/web/events.hpp +++ b/include/emp/web/events.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Event handlers that use JQuery. diff --git a/include/emp/web/init.hpp b/include/emp/web/init.hpp index 734a13bb0d..e4361a323f 100644 --- a/include/emp/web/init.hpp +++ b/include/emp/web/init.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018. + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018. */ /** * @brief Define Initialize() and other functions to set up Empirical to build Emscripten projects. diff --git a/include/emp/web/js_utils.hpp b/include/emp/web/js_utils.hpp index ddfec9a0d1..7da79915a1 100644 --- a/include/emp/web/js_utils.hpp +++ b/include/emp/web/js_utils.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 */ /** * @brief Tools for passing data between C++ and Javascript. diff --git a/include/emp/web/web.hpp b/include/emp/web/web.hpp index a5cd8e5cb0..825f60f664 100644 --- a/include/emp/web/web.hpp +++ b/include/emp/web/web.hpp @@ -1,7 +1,7 @@ /* - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 */ /** * @brief Main file to include the entire Empirical web framework; for now, just an alias for Document.h From 53b7b332e7434c4fe8b9d87775b8a1c857b3a514 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 20 Jun 2023 23:01:15 -0400 Subject: [PATCH 09/80] Fix cpp file headers --- ci/impl/generate_license_notices.sh | 5 +++-- demos/EasyChair/ProcessReviews.cpp | 10 +++++----- demos/MAP-Elites-Arm/source/ArmWorld.hpp | 8 ++++---- demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp | 10 +++++----- demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp | 10 +++++----- demos/NK/source/NKWorld.hpp | 8 ++++---- demos/NK/source/native/NK.cpp | 8 ++++---- demos/NK/source/web/NK-web.cpp | 8 ++++---- demos/SelectionAnalyze/Analyze.cpp | 10 +++++----- demos/SelectionAnalyze/Lexicase.cpp | 10 +++++----- demos/SelectionAnalyze/Roulette.cpp | 10 +++++----- demos/SelectionAnalyze/SelectionData.hpp | 8 ++++---- demos/SelectionAnalyze/test_gen.cpp | 10 +++++----- demos/Slideshow.hpp | 8 ++++---- demos/SpatialCoop2017/source/SimplePDWorld.hpp | 8 ++++---- demos/SpatialCoop2017/source/native/SimplePDWorld.cpp | 10 +++++----- demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp | 10 +++++----- demos/Sudoku/Sudoku.cpp | 10 +++++----- demos/utils/data/Histogram.cpp | 10 +++++----- demos/utils/data/reorder_cols.cpp | 10 +++++----- demos/utils/data/summarize.cpp | 10 +++++----- demos/utils/edit_dist/edit_dist.cpp | 10 +++++----- demos/utils/edit_dist/string_gen.cpp | 10 +++++----- demos/utils/extras/calc_log.cpp | 10 +++++----- demos/utils/extras/calc_pow.cpp | 10 +++++----- demos/utils/graphs/make_graph.cpp | 10 +++++----- demos/utils/graphs/vcover.cpp | 10 +++++----- demos/utils/graphs/web/vcover.cpp | 10 +++++----- demos/utils/graphs/web/web_UI.cpp | 10 +++++----- demos/utils/graphs/web/web_UI.hpp | 8 ++++---- demos/utils/levelize/levelize.cpp | 10 +++++----- demos/utils/words/annotate-length.cpp | 10 +++++----- demos/utils/words/has-letters.cpp | 10 +++++----- demos/utils/words/wordplay-remove.cpp | 10 +++++----- demos/utils/words/wordplay-rot.cpp | 10 +++++----- demos/utils/words/wordplay-shuffle.cpp | 10 +++++----- examples/Evolve/AvidaGP-Evo.cpp | 10 +++++----- examples/Evolve/AvidaGP-Mancala.cpp | 10 +++++----- examples/Evolve/AvidaGP-Resource.cpp | 10 +++++----- examples/Evolve/AvidaGP-StateGrid.cpp | 10 +++++----- examples/Evolve/AvidaGP-Test.cpp | 10 +++++----- examples/Evolve/DiagnosticNiches.cpp | 10 +++++----- examples/Evolve/EvoSorter.cpp | 10 +++++----- examples/Evolve/Fitness_Share_NK.cpp | 10 +++++----- examples/Evolve/Grid.cpp | 10 +++++----- examples/Evolve/MAP-Elites.cpp | 10 +++++----- examples/Evolve/NK.cpp | 10 +++++----- examples/Evolve/Pools.cpp | 10 +++++----- examples/Evolve/Roulette.cpp | 10 +++++----- examples/Evolve/ShrinkPop.cpp | 10 +++++----- examples/Evolve/Systematics.cpp | 10 +++++----- examples/Evolve/World.cpp | 10 +++++----- examples/Evolve/World2.cpp | 10 +++++----- examples/OLD/Empower/Empower.cpp | 8 ++++---- examples/OLD/Empower/Struct.cpp | 8 ++++---- examples/OLD/Empower/Type.cpp | 8 ++++---- examples/OLD/Empower/TypeManager.cpp | 8 ++++---- examples/OLD/Random14.cpp | 10 +++++----- examples/OLD/hardware/bak/AvidaGP-AltInst.cpp | 8 ++++---- examples/OLD/hardware/bak/AvidaGP-Evo.cpp | 8 ++++---- examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp | 8 ++++---- examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp | 8 ++++---- examples/OLD/hardware/bak/AvidaGP-Mancala.cpp | 8 ++++---- examples/OLD/hardware/bak/AvidaGP-Sorting.cpp | 8 ++++---- examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp | 8 ++++---- examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp | 8 ++++---- examples/OLD/hardware/bak/EventDrivenGP.cpp | 8 ++++---- examples/OLD/hardware/bak/Play-Mancala.cpp | 8 ++++---- examples/OLD/hardware/bak/RunTournament.cpp | 8 ++++---- .../ProjectTemplate/source/native/project_name.cpp | 8 ++++---- .../ProjectTemplate/source/web/project_name-web.cpp | 8 ++++---- examples/TO_REPAIR/base/array.cpp | 8 ++++---- examples/TO_REPAIR/config/SettingConfig.cpp | 8 ++++---- examples/TO_REPAIR/data/DataMap.cpp | 8 ++++---- examples/TO_REPAIR/games/Mancala.cpp | 8 ++++---- examples/TO_REPAIR/games/Othello.cpp | 8 ++++---- examples/TO_REPAIR/timing/short_strings.cpp | 8 ++++---- examples/base/Ptr.cpp | 10 +++++----- examples/base/assert.cpp | 10 +++++----- examples/base/errors.cpp | 10 +++++----- examples/base/map.cpp | 10 +++++----- examples/base/unordered_map.cpp | 10 +++++----- examples/base/vector.cpp | 10 +++++----- examples/bits/BitSet.cpp | 10 +++++----- examples/bits/BitVector.cpp | 10 +++++----- examples/compiler/DFA.cpp | 10 +++++----- examples/compiler/Lexer.cpp | 10 +++++----- examples/compiler/NFA.cpp | 10 +++++----- examples/compiler/RegEx.cpp | 10 +++++----- examples/compiler/lexer_utils.cpp | 10 +++++----- examples/config/SettingCombos.cpp | 10 +++++----- examples/config/config.cpp | 10 +++++----- examples/config/config_setup.hpp | 8 ++++---- examples/config/namespaces.cpp | 10 +++++----- examples/config/test-macro.hpp | 8 ++++---- examples/control/Action.cpp | 10 +++++----- examples/control/ActionManager.cpp | 10 +++++----- examples/control/Signal.cpp | 10 +++++----- examples/control/SignalControl.cpp | 10 +++++----- examples/data/DataFile.cpp | 10 +++++----- examples/data/DataInterface.cpp | 10 +++++----- examples/data/DataManager.cpp | 10 +++++----- examples/data/DataNode.cpp | 10 +++++----- examples/data/Trait.cpp | 10 +++++----- examples/data/VarMap.cpp | 10 +++++----- examples/datastructs/Cache.cpp | 10 +++++----- examples/datastructs/IndexMap.cpp | 10 +++++----- examples/datastructs/StringMap.cpp | 10 +++++----- examples/datastructs/TimeQueue.cpp | 10 +++++----- examples/datastructs/TypeMap.cpp | 10 +++++----- examples/datastructs/hash_utils.cpp | 10 +++++----- examples/datastructs/ra_set.cpp | 10 +++++----- examples/datastructs/tuple_utils.cpp | 10 +++++----- examples/datastructs/valsort_map.cpp | 10 +++++----- examples/datastructs/vector_utils.cpp | 10 +++++----- examples/functional/AnyFunction.cpp | 10 +++++----- examples/functional/GenericFunction.cpp | 10 +++++----- examples/functional/flex_function.cpp | 10 +++++----- examples/functional/memo_function.cpp | 10 +++++----- examples/geometry/Surface.cpp | 10 +++++----- examples/hardware/AvidaGP.cpp | 10 +++++----- examples/hardware/BitSorter.cpp | 10 +++++----- examples/hardware/LinearCode.cpp | 10 +++++----- examples/hardware/SignalGP.cpp | 10 +++++----- examples/io/ContiguousStream.cpp | 10 +++++----- examples/io/File.cpp | 10 +++++----- examples/io/StreamManager.cpp | 10 +++++----- examples/math/Distribution.cpp | 10 +++++----- examples/math/Random.cpp | 10 +++++----- examples/math/Range.cpp | 10 +++++----- examples/math/combos.cpp | 10 +++++----- examples/math/constants.cpp | 10 +++++----- examples/math/info_theory.cpp | 10 +++++----- examples/math/math.cpp | 10 +++++----- examples/math/stats.cpp | 10 +++++----- examples/meta/ConceptWrapper.cpp | 10 +++++----- examples/meta/TypePack.cpp | 10 +++++----- examples/meta/ValPack.cpp | 10 +++++----- examples/meta/macros.cpp | 10 +++++----- examples/meta/meta.cpp | 10 +++++----- examples/meta/reflection.cpp | 10 +++++----- examples/prefab/Card.cpp | 10 +++++----- examples/prefab/CodeBlock.cpp | 10 +++++----- examples/prefab/Collapse.cpp | 10 +++++----- examples/prefab/CommentBox.cpp | 10 +++++----- examples/prefab/ConfigPanel.cpp | 10 +++++----- examples/prefab/FontAwesomeIcon.cpp | 10 +++++----- examples/prefab/LoadingIcon.cpp | 10 +++++----- examples/prefab/LoadingModal.cpp | 10 +++++----- examples/prefab/Modal.cpp | 10 +++++----- examples/prefab/ReadoutPanel.cpp | 10 +++++----- examples/prefab/ToggleSwitch.cpp | 10 +++++----- examples/prefab/assets/SampleConfig.hpp | 8 ++++---- examples/scholar/Citation.cpp | 10 +++++----- examples/testing/ExampleFail.cpp | 10 +++++----- examples/testing/ExampleFail2.cpp | 10 +++++----- examples/testing/ExamplePass.cpp | 10 +++++----- examples/testing/Template.cpp | 10 +++++----- examples/timing/IndexMap.cpp | 10 +++++----- examples/timing/Othello.cpp | 10 +++++----- examples/timing/Random_timings.cpp | 10 +++++----- examples/timing/bit_timings.cpp | 10 +++++----- examples/timing/pointers.cpp | 10 +++++----- examples/tools/TypeTracker.cpp | 10 +++++----- examples/tools/attrs.cpp | 10 +++++----- examples/web/Animate.cpp | 10 +++++----- examples/web/Animate2.cpp | 10 +++++----- examples/web/Attributes.cpp | 10 +++++----- examples/web/Canvas.cpp | 10 +++++----- examples/web/DP.cpp | 10 +++++----- examples/web/Div.cpp | 10 +++++----- examples/web/Example.cpp | 10 +++++----- examples/web/Font.cpp | 10 +++++----- examples/web/Graph.cpp | 10 +++++----- examples/web/Hello.cpp | 10 +++++----- examples/web/Image.cpp | 10 +++++----- examples/web/RPS.cpp | 10 +++++----- examples/web/Sudoku.cpp | 10 +++++----- examples/web/Table.cpp | 10 +++++----- examples/web/TextArea.cpp | 10 +++++----- examples/web/Tween.cpp | 10 +++++----- examples/web/Web.cpp | 10 +++++----- examples/web/assert.cpp | 10 +++++----- examples/web/keypress.cpp | 10 +++++----- tests/Evolve/NK-const.cpp | 10 +++++----- tests/Evolve/NK.cpp | 10 +++++----- tests/Evolve/OEE.cpp | 10 +++++----- tests/Evolve/Resource.cpp | 10 +++++----- tests/Evolve/StateGrid.cpp | 10 +++++----- tests/Evolve/Systematics.cpp | 10 +++++----- tests/Evolve/World.cpp | 10 +++++----- tests/Evolve/World_iterator.cpp | 10 +++++----- tests/Evolve/World_output.cpp | 10 +++++----- tests/Evolve/World_reflect.cpp | 10 +++++----- tests/Evolve/World_select.cpp | 10 +++++----- tests/Evolve/World_structure.cpp | 10 +++++----- tests/OLD/Slideshow/Slideshow.cpp | 10 +++++----- tests/OLD/UI/Animate.cpp | 10 +++++----- tests/OLD/UI/Canvas.cpp | 10 +++++----- tests/OLD/UI/Element.cpp | 10 +++++----- tests/OLD/UI/ElementSlate.cpp | 10 +++++----- tests/OLD/UI/ElementTable.cpp | 10 +++++----- tests/OLD/UI/Example.cpp | 10 +++++----- tests/OLD/UI/Example2.cpp | 10 +++++----- tests/OLD/UI/base_tests/test2.cpp | 10 +++++----- tests/OLD/UI/base_tests/test3.cpp | 10 +++++----- tests/OLD/UI/base_tests/test4.cpp | 10 +++++----- tests/OLD/UI/canvas_utils.cpp | 10 +++++----- tests/OLD/UI/events.cpp | 10 +++++----- tests/OLD/UI/mini_evoke.cpp | 10 +++++----- tests/OLD/kinetic/BatchDraw.cpp | 10 +++++----- tests/OLD/kinetic/LayerManagement.cpp | 10 +++++----- tests/OLD/kinetic/Simple.cpp | 10 +++++----- tests/OLD/kinetic/VaderImage.cpp | 10 +++++----- tests/OLD/kinetic/test.cpp | 10 +++++----- tests/base/MapProxy.cpp | 10 +++++----- tests/base/Ptr.cpp | 10 +++++----- tests/base/always_assert.cpp | 10 +++++----- tests/base/always_assert_warning.cpp | 10 +++++----- tests/base/array.cpp | 10 +++++----- tests/base/assert.cpp | 10 +++++----- tests/base/assert_warning.cpp | 10 +++++----- tests/base/error.cpp | 10 +++++----- tests/base/errors.cpp | 10 +++++----- tests/base/map.cpp | 10 +++++----- tests/base/optional.cpp | 10 +++++----- tests/base/unordered_map.cpp | 10 +++++----- tests/base/vector.cpp | 10 +++++----- tests/bits/BitArray.cpp | 10 +++++----- tests/bits/BitMatrix.cpp | 10 +++++----- tests/bits/BitSet.cpp | 10 +++++----- tests/bits/BitVector.cpp | 10 +++++----- tests/bits/bitset_utils.cpp | 10 +++++----- tests/compiler/DFA.cpp | 10 +++++----- tests/compiler/Lexer.cpp | 10 +++++----- tests/compiler/NFA.cpp | 10 +++++----- tests/compiler/RegEx.cpp | 10 +++++----- tests/compiler/lexer_utils.cpp | 10 +++++----- tests/config/ArgManager.cpp | 10 +++++----- tests/config/ConfigManager.cpp | 10 +++++----- tests/config/SettingCombos.cpp | 10 +++++----- tests/config/SettingConfig.cpp | 10 +++++----- tests/config/assets/config_setup.hpp | 8 ++++---- tests/config/command_line.cpp | 10 +++++----- tests/config/config.cpp | 10 +++++----- tests/config/config_utils.cpp | 10 +++++----- tests/control/Action.cpp | 10 +++++----- tests/control/ActionManager.cpp | 10 +++++----- tests/control/Signal.cpp | 10 +++++----- tests/control/SignalControl.cpp | 10 +++++----- tests/control/SignalManager.cpp | 10 +++++----- tests/data/DataFile.cpp | 10 +++++----- tests/data/DataInterface.cpp | 10 +++++----- tests/data/DataLayout.cpp | 10 +++++----- tests/data/DataLog.cpp | 10 +++++----- tests/data/DataManager.cpp | 10 +++++----- tests/data/DataMap.cpp | 10 +++++----- tests/data/DataNode.cpp | 10 +++++----- tests/data/MemoryImage.cpp | 10 +++++----- tests/data/Trait.cpp | 10 +++++----- tests/data/VarMap.cpp | 10 +++++----- tests/datastructs/BloomFilter.cpp | 10 +++++----- tests/datastructs/Bool.cpp | 10 +++++----- tests/datastructs/Cache.cpp | 10 +++++----- tests/datastructs/DynamicString.cpp | 10 +++++----- tests/datastructs/Graph.cpp | 10 +++++----- tests/datastructs/IndexMap.cpp | 10 +++++----- tests/datastructs/QueueCache.cpp | 10 +++++----- tests/datastructs/SmallFifoMap.cpp | 10 +++++----- tests/datastructs/SmallVector.cpp | 10 +++++----- tests/datastructs/StringMap.cpp | 10 +++++----- tests/datastructs/TimeQueue.cpp | 10 +++++----- tests/datastructs/TypeMap.cpp | 10 +++++----- tests/datastructs/UnorderedIndexMap.cpp | 10 +++++----- tests/datastructs/graph_utils.cpp | 10 +++++----- tests/datastructs/hash_utils.cpp | 10 +++++----- tests/datastructs/map_utils.cpp | 10 +++++----- tests/datastructs/ra_set.cpp | 10 +++++----- tests/datastructs/reference_vector.cpp | 10 +++++----- tests/datastructs/set_utils.cpp | 10 +++++----- tests/datastructs/tuple_struct.cpp | 10 +++++----- tests/datastructs/tuple_utils.cpp | 10 +++++----- tests/datastructs/valsort_map.cpp | 10 +++++----- tests/datastructs/vector_utils.cpp | 10 +++++----- tests/debug/alert.cpp | 10 +++++----- tests/debug/debug.cpp | 10 +++++----- tests/debug/mem_track.cpp | 10 +++++----- tests/functional/AnyFunction.cpp | 10 +++++----- tests/functional/FunctionSet.cpp | 10 +++++----- tests/functional/GenericFunction.cpp | 10 +++++----- tests/functional/flex_function.cpp | 10 +++++----- tests/functional/memo_function.cpp | 10 +++++----- tests/games/Mancala.cpp | 10 +++++----- tests/games/Othello.cpp | 10 +++++----- tests/games/Othello8.cpp | 10 +++++----- tests/games/PayoffMatrix.cpp | 10 +++++----- tests/geometry/Angle2D.cpp | 10 +++++----- tests/geometry/Body2D.cpp | 10 +++++----- tests/geometry/Circle2D.cpp | 10 +++++----- tests/geometry/Physics2D.cpp | 10 +++++----- tests/geometry/Point2D.cpp | 10 +++++----- tests/geometry/Surface.cpp | 10 +++++----- tests/geometry/Surface2D.cpp | 10 +++++----- tests/hardware/BitSorter.cpp | 10 +++++----- tests/hardware/LinearCode.cpp | 10 +++++----- tests/hardware/avida_gp.cpp | 10 +++++----- tests/hardware/event_driven_gp.cpp | 10 +++++----- tests/io/ContiguousStream.cpp | 10 +++++----- tests/io/File.cpp | 10 +++++----- tests/io/MemoryIStream.cpp | 10 +++++----- tests/io/NullStream.cpp | 10 +++++----- tests/io/StreamManager.cpp | 10 +++++----- tests/io/ascii_utils.cpp | 10 +++++----- tests/io/serialize.cpp | 10 +++++----- tests/matching/MatchBin.cpp | 10 +++++----- tests/matching/MatchBin_logging.cpp | 10 +++++----- tests/matching/MatchDepository.cpp | 10 +++++----- tests/matching/RankedSelector.cpp | 10 +++++----- tests/matching/_DepositoryEntry.cpp | 10 +++++----- tests/matching/matchbin_utils.cpp | 10 +++++----- tests/math/Distribution.cpp | 10 +++++----- tests/math/Random.cpp | 10 +++++----- tests/math/Range.cpp | 10 +++++----- tests/math/combos.cpp | 10 +++++----- tests/math/distances.cpp | 10 +++++----- tests/math/info_theory.cpp | 10 +++++----- tests/math/math.cpp | 10 +++++----- tests/math/random_utils.cpp | 10 +++++----- tests/math/sequence_utils.cpp | 10 +++++----- tests/math/spatial_stats.cpp | 10 +++++----- tests/math/stats.cpp | 10 +++++----- tests/meta/ConceptWrapper.cpp | 10 +++++----- tests/meta/TypeID.cpp | 10 +++++----- tests/meta/TypePack.cpp | 10 +++++----- tests/meta/ValPack.cpp | 10 +++++----- tests/meta/macro_math.cpp | 10 +++++----- tests/meta/macros.cpp | 10 +++++----- tests/meta/meta.cpp | 10 +++++----- tests/meta/reflection.cpp | 10 +++++----- tests/meta/type_traits.cpp | 10 +++++----- tests/scholar/Author.cpp | 10 +++++----- tests/scholar/Bibliography.cpp | 10 +++++----- tests/scholar/Citation.cpp | 10 +++++----- tests/testing/unit_tests.cpp | 10 +++++----- tests/tools/SolveState.cpp | 10 +++++----- tests/tools/TypeTracker.cpp | 10 +++++----- tests/tools/attrs.cpp | 10 +++++----- tests/tools/hash_namify.cpp | 10 +++++----- tests/tools/keyname_utils.cpp | 10 +++++----- tests/tools/string_utils.cpp | 10 +++++----- tests/tools/timing.cpp | 10 +++++----- tests/tools/unique.cpp | 10 +++++----- tests/tools/value_utils.cpp | 10 +++++----- tests/web/Card.cpp | 10 +++++----- tests/web/ClickCollapseDemo.cpp | 10 +++++----- tests/web/ClickCounterDemo.cpp | 10 +++++----- tests/web/CodeBlock.cpp | 10 +++++----- tests/web/Collapse.cpp | 10 +++++----- tests/web/CommentBox.cpp | 10 +++++----- tests/web/ConfigPanel.cpp | 10 +++++----- tests/web/Element.cpp | 10 +++++----- tests/web/FontAwesomeIcon.cpp | 10 +++++----- tests/web/GetUrlParams.cpp | 10 +++++----- tests/web/JSWrap.cpp | 10 +++++----- tests/web/LoadingIcon.cpp | 10 +++++----- tests/web/LoadingModal.cpp | 10 +++++----- tests/web/Modal.cpp | 10 +++++----- tests/web/ReadoutPanel.cpp | 10 +++++----- tests/web/TextFeed.cpp | 10 +++++----- tests/web/ToggleSwitch.cpp | 10 +++++----- tests/web/ValueBox.cpp | 10 +++++----- tests/web/Widget.cpp | 10 +++++----- tests/web/assets/Config.hpp | 8 ++++---- tests/web/color_map.cpp | 10 +++++----- tests/web/js_utils.cpp | 10 +++++----- tests/web/visualizations.cpp | 10 +++++----- 376 files changed, 1842 insertions(+), 1841 deletions(-) diff --git a/ci/impl/generate_license_notices.sh b/ci/impl/generate_license_notices.sh index 711a21fc5b..ac2b7ccfeb 100755 --- a/ci/impl/generate_license_notices.sh +++ b/ci/impl/generate_license_notices.sh @@ -26,11 +26,12 @@ for filename in $(find . -name '*.cpp' -type f ! -path "./third-party/*") $(find # and https://stackoverflow.com/a/12178023 # and https://stackoverflow.com/a/9053163 sed -i "/^ \* date: /b; 4s/^.*\$/ * date: $(date +'%Y')/" "${filename}" - sed -i '5s/^.*$/ */' "${filename}" + sed -i '5s|^.*$|*/|' "${filename}" # sed -i "6s/^.*\$/ * @file $(basename "${filename}")/" "${filename}" # only match empty lines # add extra * to replace later with */ when constructing fresh - sed -i '6s/^$/ */' "${filename}" + # sed -i '6s/^$/ */' "${filename}" + sed -i '6s|^.*$|/**|' "${filename}" # close boilerplate file docstring # must accomodate possible additional content in docstring diff --git a/demos/EasyChair/ProcessReviews.cpp b/demos/EasyChair/ProcessReviews.cpp index 4014d101bb..5ef17a292a 100644 --- a/demos/EasyChair/ProcessReviews.cpp +++ b/demos/EasyChair/ProcessReviews.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ProcessReviews.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/demos/MAP-Elites-Arm/source/ArmWorld.hpp b/demos/MAP-Elites-Arm/source/ArmWorld.hpp index 8f3ef64003..f8bf963674 100644 --- a/demos/MAP-Elites-Arm/source/ArmWorld.hpp +++ b/demos/MAP-Elites-Arm/source/ArmWorld.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file ArmWorld.hpp +*/ +/** * @brief Defines the specialized world for the MAP-Elites app. */ diff --git a/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp b/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp index f70a8719bc..e26417c5c4 100644 --- a/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp +++ b/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file MAP-Elites-Arm.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Controller for NATIVE (Command Line) version of MAP-Elites app. */ diff --git a/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp b/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp index 54f1bc70c1..f2a63af3b9 100644 --- a/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp +++ b/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file MAP-Elites-Arm-web.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Controller for WEB version of MAP-Elites app. */ diff --git a/demos/NK/source/NKWorld.hpp b/demos/NK/source/NKWorld.hpp index c7d0c9fe7b..b1a76c7c33 100644 --- a/demos/NK/source/NKWorld.hpp +++ b/demos/NK/source/NKWorld.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file NKWorld.hpp +*/ +/** * */ diff --git a/demos/NK/source/native/NK.cpp b/demos/NK/source/native/NK.cpp index e5a5506041..45f1e3856a 100644 --- a/demos/NK/source/native/NK.cpp +++ b/demos/NK/source/native/NK.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file NK.cpp +*/ +/** * @brief This file explores the template defined in evo::Population.h with an NK landscape. */ diff --git a/demos/NK/source/web/NK-web.cpp b/demos/NK/source/web/NK-web.cpp index 561138faf4..a99f9cf577 100644 --- a/demos/NK/source/web/NK-web.cpp +++ b/demos/NK/source/web/NK-web.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file NK-web.cpp +*/ +/** * @brief This file contains an easy-to-manipulate NK world. */ diff --git a/demos/SelectionAnalyze/Analyze.cpp b/demos/SelectionAnalyze/Analyze.cpp index 64bd52b4c4..09c9878c11 100644 --- a/demos/SelectionAnalyze/Analyze.cpp +++ b/demos/SelectionAnalyze/Analyze.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file Analyze.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** * @brief Analyze probabilities for selection using various selection techniques. */ diff --git a/demos/SelectionAnalyze/Lexicase.cpp b/demos/SelectionAnalyze/Lexicase.cpp index 8375fcf720..83a91024c6 100644 --- a/demos/SelectionAnalyze/Lexicase.cpp +++ b/demos/SelectionAnalyze/Lexicase.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file Lexicase.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** * @brief Calculate probabilities for selection using Lexicase Selection. */ diff --git a/demos/SelectionAnalyze/Roulette.cpp b/demos/SelectionAnalyze/Roulette.cpp index e859df6de9..0dc24d3276 100644 --- a/demos/SelectionAnalyze/Roulette.cpp +++ b/demos/SelectionAnalyze/Roulette.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file Roulette.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Calculate probabilities for selection using Roulette Selection (easy!) */ diff --git a/demos/SelectionAnalyze/SelectionData.hpp b/demos/SelectionAnalyze/SelectionData.hpp index 226ccb33bf..402d7e96bf 100644 --- a/demos/SelectionAnalyze/SelectionData.hpp +++ b/demos/SelectionAnalyze/SelectionData.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019 - * - * @file SelectionData.hpp +*/ +/** * @brief This class maintains all of the fitness data for a population of organisms. */ diff --git a/demos/SelectionAnalyze/test_gen.cpp b/demos/SelectionAnalyze/test_gen.cpp index 23242bf576..9e90e8089a 100644 --- a/demos/SelectionAnalyze/test_gen.cpp +++ b/demos/SelectionAnalyze/test_gen.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file test_gen.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "emp/config/command_line.hpp" diff --git a/demos/Slideshow.hpp b/demos/Slideshow.hpp index 869cdc945d..27f9d94542 100644 --- a/demos/Slideshow.hpp +++ b/demos/Slideshow.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2015-2017 - * - * @file Slideshow.hpp +*/ +/** * */ diff --git a/demos/SpatialCoop2017/source/SimplePDWorld.hpp b/demos/SpatialCoop2017/source/SimplePDWorld.hpp index c4c35b7eae..cd550d87e2 100644 --- a/demos/SpatialCoop2017/source/SimplePDWorld.hpp +++ b/demos/SpatialCoop2017/source/SimplePDWorld.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file SimplePDWorld.hpp +*/ +/** */ #ifndef DEMOS_SPATIALCOOP2017_SOURCE_SIMPLEPDWORLD_HPP_INCLUDE diff --git a/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp b/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp index 7edabbae31..60ebcbefba 100644 --- a/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp +++ b/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file SimplePDWorld.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp b/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp index 4220676634..003f046008 100644 --- a/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp +++ b/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file SimplePDWorld-web.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** */ #include "emp/web/web.hpp" diff --git a/demos/Sudoku/Sudoku.cpp b/demos/Sudoku/Sudoku.cpp index 4584c45c4f..d8f634965e 100644 --- a/demos/Sudoku/Sudoku.cpp +++ b/demos/Sudoku/Sudoku.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file Sudoku.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/base/array.hpp" diff --git a/demos/utils/data/Histogram.cpp b/demos/utils/data/Histogram.cpp index ebced27c1d..90c46ccf00 100644 --- a/demos/utils/data/Histogram.cpp +++ b/demos/utils/data/Histogram.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Histogram.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../../include/emp/base/vector.hpp" diff --git a/demos/utils/data/reorder_cols.cpp b/demos/utils/data/reorder_cols.cpp index 812616da70..2d50b56a34 100644 --- a/demos/utils/data/reorder_cols.cpp +++ b/demos/utils/data/reorder_cols.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file reorder_cols.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** * @brief This utility loads in a space-separated file and reorders the columns. * * Identify a file and a set of columns (starting with column 1). Load the diff --git a/demos/utils/data/summarize.cpp b/demos/utils/data/summarize.cpp index e2702612bf..7c1b4785ad 100644 --- a/demos/utils/data/summarize.cpp +++ b/demos/utils/data/summarize.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020 - * - * @file summarize.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020 +*/ +/** * @brief This file takes in one or more CSV files with values and, for each, calculates the mnimium, * maximum, and average values found in each column. */ diff --git a/demos/utils/edit_dist/edit_dist.cpp b/demos/utils/edit_dist/edit_dist.cpp index c6501a80d8..9d344c32b3 100644 --- a/demos/utils/edit_dist/edit_dist.cpp +++ b/demos/utils/edit_dist/edit_dist.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file edit_dist.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** * @brief Load input from standard in that begins with a value "N" and then contains N pairs of strings. * * Output will be the edit distances between each string pair. diff --git a/demos/utils/edit_dist/string_gen.cpp b/demos/utils/edit_dist/string_gen.cpp index 3a73247be0..b0c62f9192 100644 --- a/demos/utils/edit_dist/string_gen.cpp +++ b/demos/utils/edit_dist/string_gen.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file string_gen.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** * @brief Generate a series of string pairs with a prescribed number of changes between them. */ diff --git a/demos/utils/extras/calc_log.cpp b/demos/utils/extras/calc_log.cpp index e9239bccc8..bc1cc62336 100644 --- a/demos/utils/extras/calc_log.cpp +++ b/demos/utils/extras/calc_log.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file calc_log.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/demos/utils/extras/calc_pow.cpp b/demos/utils/extras/calc_pow.cpp index 45fd5029df..54957071ee 100644 --- a/demos/utils/extras/calc_pow.cpp +++ b/demos/utils/extras/calc_pow.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file calc_pow.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/demos/utils/graphs/make_graph.cpp b/demos/utils/graphs/make_graph.cpp index 2e0526007a..cad01f990f 100644 --- a/demos/utils/graphs/make_graph.cpp +++ b/demos/utils/graphs/make_graph.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file make_graph.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief Build graphs of various types in the standard format. * * NOTE: All questions can be answered by providing command-line arguments. diff --git a/demos/utils/graphs/vcover.cpp b/demos/utils/graphs/vcover.cpp index 0fc13cc52c..59996793db 100644 --- a/demos/utils/graphs/vcover.cpp +++ b/demos/utils/graphs/vcover.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file vcover.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** * @brief Determine the minimum vertex cover for a graph provided on standard input. */ diff --git a/demos/utils/graphs/web/vcover.cpp b/demos/utils/graphs/web/vcover.cpp index 4b63f298e2..156bca9c81 100644 --- a/demos/utils/graphs/web/vcover.cpp +++ b/demos/utils/graphs/web/vcover.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file vcover.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/demos/utils/graphs/web/web_UI.cpp b/demos/utils/graphs/web/web_UI.cpp index 8a7007f0e6..5eee902fbe 100644 --- a/demos/utils/graphs/web/web_UI.cpp +++ b/demos/utils/graphs/web/web_UI.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file web_UI.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "web_UI.h" diff --git a/demos/utils/graphs/web/web_UI.hpp b/demos/utils/graphs/web/web_UI.hpp index 4641b134e8..b82fd5bd09 100644 --- a/demos/utils/graphs/web/web_UI.hpp +++ b/demos/utils/graphs/web/web_UI.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file web_UI.hpp +*/ +/** * */ diff --git a/demos/utils/levelize/levelize.cpp b/demos/utils/levelize/levelize.cpp index fa8336fff0..388df44785 100644 --- a/demos/utils/levelize/levelize.cpp +++ b/demos/utils/levelize/levelize.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file levelize.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/demos/utils/words/annotate-length.cpp b/demos/utils/words/annotate-length.cpp index d9630c3744..7e5b32dd06 100644 --- a/demos/utils/words/annotate-length.cpp +++ b/demos/utils/words/annotate-length.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file annotate-length.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** * @brief Annotate all of the words in an input list with their length. */ diff --git a/demos/utils/words/has-letters.cpp b/demos/utils/words/has-letters.cpp index d103a8267b..f45499b0a0 100644 --- a/demos/utils/words/has-letters.cpp +++ b/demos/utils/words/has-letters.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file has-letters.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** * @brief Find all words in a dictionary with a combination of letters IN ORDER, annotated by length. */ diff --git a/demos/utils/words/wordplay-remove.cpp b/demos/utils/words/wordplay-remove.cpp index 84681ac902..9bba9467ae 100644 --- a/demos/utils/words/wordplay-remove.cpp +++ b/demos/utils/words/wordplay-remove.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file wordplay-remove.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief Test the removal of letters through an alphabet to see if new words are formed. */ diff --git a/demos/utils/words/wordplay-rot.cpp b/demos/utils/words/wordplay-rot.cpp index 113f1c14a2..e0213803ea 100644 --- a/demos/utils/words/wordplay-rot.cpp +++ b/demos/utils/words/wordplay-rot.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file wordplay-rot.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief Test the rotation of letters through an alphabet to see if new words are formed. * * Build graphs of various types in the standard format. diff --git a/demos/utils/words/wordplay-shuffle.cpp b/demos/utils/words/wordplay-shuffle.cpp index bbc85aa67b..3c44531dc2 100644 --- a/demos/utils/words/wordplay-shuffle.cpp +++ b/demos/utils/words/wordplay-shuffle.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file wordplay-shuffle.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Find words that are a shuffle of another word. */ diff --git a/examples/Evolve/AvidaGP-Evo.cpp b/examples/Evolve/AvidaGP-Evo.cpp index 67146dbeb0..2c5cac1954 100644 --- a/examples/Evolve/AvidaGP-Evo.cpp +++ b/examples/Evolve/AvidaGP-Evo.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file AvidaGP-Evo.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief A test of AvidaGP with World; organisms must find squares of values. */ diff --git a/examples/Evolve/AvidaGP-Mancala.cpp b/examples/Evolve/AvidaGP-Mancala.cpp index bdd749eeaf..67ed3c2861 100644 --- a/examples/Evolve/AvidaGP-Mancala.cpp +++ b/examples/Evolve/AvidaGP-Mancala.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file AvidaGP-Mancala.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** */ #include diff --git a/examples/Evolve/AvidaGP-Resource.cpp b/examples/Evolve/AvidaGP-Resource.cpp index 9ab13d70eb..5eeb60dd28 100644 --- a/examples/Evolve/AvidaGP-Resource.cpp +++ b/examples/Evolve/AvidaGP-Resource.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file AvidaGP-Resource.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief A test of AvidaGP with World; organisms must find squares of values. */ diff --git a/examples/Evolve/AvidaGP-StateGrid.cpp b/examples/Evolve/AvidaGP-StateGrid.cpp index 47d1c0afc8..3d3ffdde84 100644 --- a/examples/Evolve/AvidaGP-StateGrid.cpp +++ b/examples/Evolve/AvidaGP-StateGrid.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file AvidaGP-StateGrid.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief A example of using AvidaGP evolving with a StateGrid. * * Example file of AvidaGP-based organisms (called SGOrg here) moving through a state grid, diff --git a/examples/Evolve/AvidaGP-Test.cpp b/examples/Evolve/AvidaGP-Test.cpp index 9a2b46125a..d4c7af673b 100644 --- a/examples/Evolve/AvidaGP-Test.cpp +++ b/examples/Evolve/AvidaGP-Test.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file AvidaGP-Test.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief A simple test of AvidaGP with World for copies and mutations. * * A few basic steps to examine AvidaGP organisms in a world. diff --git a/examples/Evolve/DiagnosticNiches.cpp b/examples/Evolve/DiagnosticNiches.cpp index 3857306c26..61c90bcec8 100644 --- a/examples/Evolve/DiagnosticNiches.cpp +++ b/examples/Evolve/DiagnosticNiches.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file DiagnosticNiches.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** */ #include diff --git a/examples/Evolve/EvoSorter.cpp b/examples/Evolve/EvoSorter.cpp index 44c1d2c5a7..c6f3013c22 100644 --- a/examples/Evolve/EvoSorter.cpp +++ b/examples/Evolve/EvoSorter.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file EvoSorter.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief This file explores the evolving BitSorter sorting networks. */ diff --git a/examples/Evolve/Fitness_Share_NK.cpp b/examples/Evolve/Fitness_Share_NK.cpp index d3999fc939..e03066c18a 100644 --- a/examples/Evolve/Fitness_Share_NK.cpp +++ b/examples/Evolve/Fitness_Share_NK.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file Fitness_Share_NK.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief This file uses the Fitness Sharing functionality defined in evo::World.hpp */ diff --git a/examples/Evolve/Grid.cpp b/examples/Evolve/Grid.cpp index 2f3112c163..c35eabf842 100644 --- a/examples/Evolve/Grid.cpp +++ b/examples/Evolve/Grid.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file Grid.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief This file explores the grid options for emp::World.hpp */ diff --git a/examples/Evolve/MAP-Elites.cpp b/examples/Evolve/MAP-Elites.cpp index 8fad578d7d..6ac9c4e815 100644 --- a/examples/Evolve/MAP-Elites.cpp +++ b/examples/Evolve/MAP-Elites.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file MAP-Elites.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief This file explores the MAP-Elites selection scheme. * * In this example, we will be evolving 4-digit integers. diff --git a/examples/Evolve/NK.cpp b/examples/Evolve/NK.cpp index e6572d8ddd..5aa2121a87 100644 --- a/examples/Evolve/NK.cpp +++ b/examples/Evolve/NK.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file NK.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief This file explores the template defined in evo::Population.h with an NK landscape. */ diff --git a/examples/Evolve/Pools.cpp b/examples/Evolve/Pools.cpp index 00b67665a8..6995043f6f 100644 --- a/examples/Evolve/Pools.cpp +++ b/examples/Evolve/Pools.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file Pools.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief This file explores the pool options for emp::World.h */ diff --git a/examples/Evolve/Roulette.cpp b/examples/Evolve/Roulette.cpp index f92bf1d539..083a8ac025 100644 --- a/examples/Evolve/Roulette.cpp +++ b/examples/Evolve/Roulette.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file Roulette.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief This file explores the RouletteSelect() function */ diff --git a/examples/Evolve/ShrinkPop.cpp b/examples/Evolve/ShrinkPop.cpp index 34a28eca44..0b36c7b077 100644 --- a/examples/Evolve/ShrinkPop.cpp +++ b/examples/Evolve/ShrinkPop.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file ShrinkPop.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief This file explores the grid options for emp::World.hpp */ diff --git a/examples/Evolve/Systematics.cpp b/examples/Evolve/Systematics.cpp index 0fa8bccac3..590a9aed99 100644 --- a/examples/Evolve/Systematics.cpp +++ b/examples/Evolve/Systematics.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file Systematics.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief This file explores the grid options for emp::World.hpp */ diff --git a/examples/Evolve/World.cpp b/examples/Evolve/World.cpp index e6454bf79f..0cf80e258f 100644 --- a/examples/Evolve/World.cpp +++ b/examples/Evolve/World.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file World.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief This file is an example for using the re-vamped World template. */ diff --git a/examples/Evolve/World2.cpp b/examples/Evolve/World2.cpp index 0b1fd4704d..840446b305 100644 --- a/examples/Evolve/World2.cpp +++ b/examples/Evolve/World2.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file World2.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief This file is an example for using the re-vamped World template. */ diff --git a/examples/OLD/Empower/Empower.cpp b/examples/OLD/Empower/Empower.cpp index 8c16e395d8..408705592e 100644 --- a/examples/OLD/Empower/Empower.cpp +++ b/examples/OLD/Empower/Empower.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Empower.cpp +*/ +/** * @brief Some examples code for using emp::Empower */ diff --git a/examples/OLD/Empower/Struct.cpp b/examples/OLD/Empower/Struct.cpp index ffbbbe2f4e..4668790c24 100644 --- a/examples/OLD/Empower/Struct.cpp +++ b/examples/OLD/Empower/Struct.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file Struct.cpp +*/ +/** * @brief Some examples code for using emp::Struct */ diff --git a/examples/OLD/Empower/Type.cpp b/examples/OLD/Empower/Type.cpp index aa0adf7449..988222ef3f 100644 --- a/examples/OLD/Empower/Type.cpp +++ b/examples/OLD/Empower/Type.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Type.cpp +*/ +/** * @brief Some examples code for using emp::Type */ diff --git a/examples/OLD/Empower/TypeManager.cpp b/examples/OLD/Empower/TypeManager.cpp index db70574fcf..fc90ff2bfa 100644 --- a/examples/OLD/Empower/TypeManager.cpp +++ b/examples/OLD/Empower/TypeManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file TypeManager.cpp +*/ +/** * @brief Some examples code for using emp::TypeManager */ diff --git a/examples/OLD/Random14.cpp b/examples/OLD/Random14.cpp index 18f901bad5..90b9656f0b 100644 --- a/examples/OLD/Random14.cpp +++ b/examples/OLD/Random14.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file Random14.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::Random */ diff --git a/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp b/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp index c5c1afb92c..2202b5d8b7 100644 --- a/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file AvidaGP-AltInst.cpp +*/ +/** */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Evo.cpp b/examples/OLD/hardware/bak/AvidaGP-Evo.cpp index a6b424034e..e3fb97aaea 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Evo.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Evo.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file AvidaGP-Evo.cpp +*/ +/** */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp b/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp index e01b02a54b..0db952f364 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file AvidaGP-Interpreter.cpp +*/ +/** */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp b/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp index 5dde29fe1c..a376abdb2d 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file AvidaGP-Mancala-EcoEA.cpp +*/ +/** */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp b/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp index ce7ec274bd..467821a976 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file AvidaGP-Mancala.cpp +*/ +/** */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp b/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp index 8ffec975ea..e85779775d 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file AvidaGP-Sorting.cpp +*/ +/** * @brief This is an example file, evolving AvidaGP organisms to sort numbers. */ diff --git a/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp b/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp index 61b8216b43..f838ce63cd 100644 --- a/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp +++ b/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file EventDrivenGP-ChgEnv.cpp +*/ +/** */ // ------- DEPRECATED ------- diff --git a/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp b/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp index 1845b767cc..f631eee9b1 100644 --- a/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp +++ b/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file EventDrivenGP-Roles.cpp +*/ +/** */ // ------- DEPRECATED ------- diff --git a/examples/OLD/hardware/bak/EventDrivenGP.cpp b/examples/OLD/hardware/bak/EventDrivenGP.cpp index b8a5e832cc..285c58f8b6 100644 --- a/examples/OLD/hardware/bak/EventDrivenGP.cpp +++ b/examples/OLD/hardware/bak/EventDrivenGP.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file EventDrivenGP.cpp +*/ +/** */ // ------- DEPRECATED ------- diff --git a/examples/OLD/hardware/bak/Play-Mancala.cpp b/examples/OLD/hardware/bak/Play-Mancala.cpp index eed77e90c3..14489db867 100644 --- a/examples/OLD/hardware/bak/Play-Mancala.cpp +++ b/examples/OLD/hardware/bak/Play-Mancala.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file Play-Mancala.cpp +*/ +/** */ #include diff --git a/examples/OLD/hardware/bak/RunTournament.cpp b/examples/OLD/hardware/bak/RunTournament.cpp index 582be8e972..dd82418ea0 100644 --- a/examples/OLD/hardware/bak/RunTournament.cpp +++ b/examples/OLD/hardware/bak/RunTournament.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file RunTournament.cpp +*/ +/** */ #include diff --git a/examples/ProjectTemplate/source/native/project_name.cpp b/examples/ProjectTemplate/source/native/project_name.cpp index e09d1f96c5..c2ee65642c 100644 --- a/examples/ProjectTemplate/source/native/project_name.cpp +++ b/examples/ProjectTemplate/source/native/project_name.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file project_name.cpp +*/ +/** */ // This is the main function for the NATIVE version of this project. diff --git a/examples/ProjectTemplate/source/web/project_name-web.cpp b/examples/ProjectTemplate/source/web/project_name-web.cpp index 8d3a7b0e57..40ddeed419 100644 --- a/examples/ProjectTemplate/source/web/project_name-web.cpp +++ b/examples/ProjectTemplate/source/web/project_name-web.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file project_name-web.cpp +*/ +/** * * WARNING: the Cookiecutter Empirical Project, which you can find at * https://github.com/devosoft/cookiecutter-empirical-project, should be diff --git a/examples/TO_REPAIR/base/array.cpp b/examples/TO_REPAIR/base/array.cpp index b1a9aff2ee..08d7e208f4 100644 --- a/examples/TO_REPAIR/base/array.cpp +++ b/examples/TO_REPAIR/base/array.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016-2018 - * - * @file array.cpp +*/ +/** */ #include "emp/base/array.hpp" diff --git a/examples/TO_REPAIR/config/SettingConfig.cpp b/examples/TO_REPAIR/config/SettingConfig.cpp index c8d88fb857..80359e9338 100644 --- a/examples/TO_REPAIR/config/SettingConfig.cpp +++ b/examples/TO_REPAIR/config/SettingConfig.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2020 - * - * @file SettingConfig.cpp +*/ +/** * @brief Some examples code for using emp::SettingConfig */ diff --git a/examples/TO_REPAIR/data/DataMap.cpp b/examples/TO_REPAIR/data/DataMap.cpp index 5dc14400ed..a286895aae 100644 --- a/examples/TO_REPAIR/data/DataMap.cpp +++ b/examples/TO_REPAIR/data/DataMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2019-2020. - * - * @file DataMap.cpp +*/ +/** * @brief An example file for using DataMaps */ diff --git a/examples/TO_REPAIR/games/Mancala.cpp b/examples/TO_REPAIR/games/Mancala.cpp index 99a7e141fe..f889856b68 100644 --- a/examples/TO_REPAIR/games/Mancala.cpp +++ b/examples/TO_REPAIR/games/Mancala.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file Mancala.cpp +*/ +/** * @brief This is an example file demonstrating Manacala. */ diff --git a/examples/TO_REPAIR/games/Othello.cpp b/examples/TO_REPAIR/games/Othello.cpp index ef2ef7cf39..37a5acbc71 100644 --- a/examples/TO_REPAIR/games/Othello.cpp +++ b/examples/TO_REPAIR/games/Othello.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2017 - * - * @file Othello.cpp +*/ +/** * @brief This is an example file demonstrating Othello. */ diff --git a/examples/TO_REPAIR/timing/short_strings.cpp b/examples/TO_REPAIR/timing/short_strings.cpp index 70e881bf54..0b775f8ada 100644 --- a/examples/TO_REPAIR/timing/short_strings.cpp +++ b/examples/TO_REPAIR/timing/short_strings.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2018 - * - * @file short_strings.cpp +*/ +/** * @brief Code comparing various methods of accessing entries in an unsorted_map. * * We are comparing the timings for accessing an unsorted map using: diff --git a/examples/base/Ptr.cpp b/examples/base/Ptr.cpp index 797ba6f111..de03742bea 100644 --- a/examples/base/Ptr.cpp +++ b/examples/base/Ptr.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file Ptr.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** * @brief An example file for using emp::Ptr. */ diff --git a/examples/base/assert.cpp b/examples/base/assert.cpp index 44ab837b07..b28e00d5fb 100644 --- a/examples/base/assert.cpp +++ b/examples/base/assert.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file assert.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** * @brief Some examples code demonstrating use of the error system. */ diff --git a/examples/base/errors.cpp b/examples/base/errors.cpp index f22623fc56..743701c6ca 100644 --- a/examples/base/errors.cpp +++ b/examples/base/errors.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file errors.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code demonstrating use of the error system. */ diff --git a/examples/base/map.cpp b/examples/base/map.cpp index 33e89a27ae..bd08d084ef 100644 --- a/examples/base/map.cpp +++ b/examples/base/map.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2020 - * - * @file map.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019-2020 +*/ +/** */ #include diff --git a/examples/base/unordered_map.cpp b/examples/base/unordered_map.cpp index a5793065b1..47a26b8655 100644 --- a/examples/base/unordered_map.cpp +++ b/examples/base/unordered_map.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file unordered_map.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/base/vector.cpp b/examples/base/vector.cpp index 155bb9c10e..9c1836e2f2 100644 --- a/examples/base/vector.cpp +++ b/examples/base/vector.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file vector.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** */ #include diff --git a/examples/bits/BitSet.cpp b/examples/bits/BitSet.cpp index 1ead5b037c..f002671668 100644 --- a/examples/bits/BitSet.cpp +++ b/examples/bits/BitSet.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 - * - * @file BitSet.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2018 +*/ +/** * @brief Some example code for using emp::BitSet */ diff --git a/examples/bits/BitVector.cpp b/examples/bits/BitVector.cpp index d57d8c2db5..ae4aac3017 100644 --- a/examples/bits/BitVector.cpp +++ b/examples/bits/BitVector.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file BitVector.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some example code for using emp::Ptr */ diff --git a/examples/compiler/DFA.cpp b/examples/compiler/DFA.cpp index 17c25a6d1d..e6c2381bdb 100644 --- a/examples/compiler/DFA.cpp +++ b/examples/compiler/DFA.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file DFA.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::DFA */ diff --git a/examples/compiler/Lexer.cpp b/examples/compiler/Lexer.cpp index 15c577ae14..e3e8063cf3 100644 --- a/examples/compiler/Lexer.cpp +++ b/examples/compiler/Lexer.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file Lexer.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::Lexer */ diff --git a/examples/compiler/NFA.cpp b/examples/compiler/NFA.cpp index e62a729998..7ed91cb628 100644 --- a/examples/compiler/NFA.cpp +++ b/examples/compiler/NFA.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file NFA.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::NFA */ diff --git a/examples/compiler/RegEx.cpp b/examples/compiler/RegEx.cpp index 8d7370b5f4..acf3703d2c 100644 --- a/examples/compiler/RegEx.cpp +++ b/examples/compiler/RegEx.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file RegEx.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** * @brief Some examples code for using emp::RegEx */ diff --git a/examples/compiler/lexer_utils.cpp b/examples/compiler/lexer_utils.cpp index 201cba3c33..82fe09e8c2 100644 --- a/examples/compiler/lexer_utils.cpp +++ b/examples/compiler/lexer_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file lexer_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Example code for converting string pattern representations. */ diff --git a/examples/config/SettingCombos.cpp b/examples/config/SettingCombos.cpp index e5ad2cffcb..6a471545ec 100644 --- a/examples/config/SettingCombos.cpp +++ b/examples/config/SettingCombos.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file SettingCombos.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** * @brief Some examples code for using emp::SettingCombos */ diff --git a/examples/config/config.cpp b/examples/config/config.cpp index ec69f5af17..7a6eb2b94d 100644 --- a/examples/config/config.cpp +++ b/examples/config/config.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file config.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/examples/config/config_setup.hpp b/examples/config/config_setup.hpp index 915f754a2d..eb161534b7 100644 --- a/examples/config/config_setup.hpp +++ b/examples/config/config_setup.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file config_setup.hpp +*/ +/** * @brief This file provides an example of how to build a configuration class. * * To create a new config from scratch, the format is: diff --git a/examples/config/namespaces.cpp b/examples/config/namespaces.cpp index 8a5826f9d6..71e2403d75 100644 --- a/examples/config/namespaces.cpp +++ b/examples/config/namespaces.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file namespaces.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/examples/config/test-macro.hpp b/examples/config/test-macro.hpp index 0f4e20a304..9e269b336d 100644 --- a/examples/config/test-macro.hpp +++ b/examples/config/test-macro.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file test-macro.hpp +*/ +/** * @brief This is an auto-generated file that defines a set of configuration options. * To create a new config from scratch, the format is: * EMP_BUILD_CONFIG( CLASS_NAME, OPTIONS... ) diff --git a/examples/control/Action.cpp b/examples/control/Action.cpp index c8d674403d..5b704abcba 100644 --- a/examples/control/Action.cpp +++ b/examples/control/Action.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file Action.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::Action */ diff --git a/examples/control/ActionManager.cpp b/examples/control/ActionManager.cpp index 62cefe1d83..b647d37197 100644 --- a/examples/control/ActionManager.cpp +++ b/examples/control/ActionManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file ActionManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::ActionManager */ diff --git a/examples/control/Signal.cpp b/examples/control/Signal.cpp index d589616677..81103805d2 100644 --- a/examples/control/Signal.cpp +++ b/examples/control/Signal.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file Signal.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::Signal */ diff --git a/examples/control/SignalControl.cpp b/examples/control/SignalControl.cpp index 3bd7e0ed1f..38d3cc99c5 100644 --- a/examples/control/SignalControl.cpp +++ b/examples/control/SignalControl.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file SignalControl.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::Signal */ diff --git a/examples/data/DataFile.cpp b/examples/data/DataFile.cpp index c4b150eca8..2613f29f54 100644 --- a/examples/data/DataFile.cpp +++ b/examples/data/DataFile.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file DataFile.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Examples for DataFile demonstrating how to generate */ diff --git a/examples/data/DataInterface.cpp b/examples/data/DataInterface.cpp index 2b77cbc308..9ab814a847 100644 --- a/examples/data/DataInterface.cpp +++ b/examples/data/DataInterface.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file DataInterface.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Examples for DataInterface demonstrating how to track different types of data. */ diff --git a/examples/data/DataManager.cpp b/examples/data/DataManager.cpp index 2dcbeff148..2a36070997 100644 --- a/examples/data/DataManager.cpp +++ b/examples/data/DataManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file DataManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Examples for DataNode demonstrating how to track different types of data. */ diff --git a/examples/data/DataNode.cpp b/examples/data/DataNode.cpp index e390f7acdd..42ef867970 100644 --- a/examples/data/DataNode.cpp +++ b/examples/data/DataNode.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file DataNode.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Examples for DataNode demonstrating how to track different types of data. */ diff --git a/examples/data/Trait.cpp b/examples/data/Trait.cpp index 006fc5598e..aa249b2817 100644 --- a/examples/data/Trait.cpp +++ b/examples/data/Trait.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file Trait.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief An example file for Trait and TraitSet classes. */ diff --git a/examples/data/VarMap.cpp b/examples/data/VarMap.cpp index 2a9ade706b..692c7ae71b 100644 --- a/examples/data/VarMap.cpp +++ b/examples/data/VarMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file VarMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** * @brief An example file for using VarMap */ diff --git a/examples/datastructs/Cache.cpp b/examples/datastructs/Cache.cpp index eed0eed7cf..073b293dd6 100644 --- a/examples/datastructs/Cache.cpp +++ b/examples/datastructs/Cache.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file Cache.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::Cache */ diff --git a/examples/datastructs/IndexMap.cpp b/examples/datastructs/IndexMap.cpp index 5c1f5060bb..1cdcc3683a 100644 --- a/examples/datastructs/IndexMap.cpp +++ b/examples/datastructs/IndexMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file IndexMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** */ #include diff --git a/examples/datastructs/StringMap.cpp b/examples/datastructs/StringMap.cpp index 24105954ab..9da9cd32c5 100644 --- a/examples/datastructs/StringMap.cpp +++ b/examples/datastructs/StringMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018-2021 - * - * @file StringMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018-2021 +*/ +/** * @brief Some examples code for using emp::StringMap and emp::StringID */ diff --git a/examples/datastructs/TimeQueue.cpp b/examples/datastructs/TimeQueue.cpp index cda4c0a5ed..e28b909508 100644 --- a/examples/datastructs/TimeQueue.cpp +++ b/examples/datastructs/TimeQueue.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file TimeQueue.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** * @brief Some examples code for using emp::TimeQueue */ diff --git a/examples/datastructs/TypeMap.cpp b/examples/datastructs/TypeMap.cpp index c828a06112..cdc562666d 100644 --- a/examples/datastructs/TypeMap.cpp +++ b/examples/datastructs/TypeMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file TypeMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Some example code for using emp::BitSet */ diff --git a/examples/datastructs/hash_utils.cpp b/examples/datastructs/hash_utils.cpp index 757169bad6..ce1570fdd4 100644 --- a/examples/datastructs/hash_utils.cpp +++ b/examples/datastructs/hash_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file hash_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** * @brief Some examples code for using hash_utils.hpp */ diff --git a/examples/datastructs/ra_set.cpp b/examples/datastructs/ra_set.cpp index cfde12939b..17f4fd3906 100644 --- a/examples/datastructs/ra_set.cpp +++ b/examples/datastructs/ra_set.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file ra_set.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Some example code for using emp::ra_set */ diff --git a/examples/datastructs/tuple_utils.cpp b/examples/datastructs/tuple_utils.cpp index 034031223b..adbeace264 100644 --- a/examples/datastructs/tuple_utils.cpp +++ b/examples/datastructs/tuple_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 - * - * @file tuple_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 +*/ +/** * @brief Some examples code for using tuple_utils.hpp */ diff --git a/examples/datastructs/valsort_map.cpp b/examples/datastructs/valsort_map.cpp index a539dbe4f3..576e225b6d 100644 --- a/examples/datastructs/valsort_map.cpp +++ b/examples/datastructs/valsort_map.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file valsort_map.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Some example code for using emp::valsort_map */ diff --git a/examples/datastructs/vector_utils.cpp b/examples/datastructs/vector_utils.cpp index 0dfb1581da..93ae38df94 100644 --- a/examples/datastructs/vector_utils.cpp +++ b/examples/datastructs/vector_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2020 - * - * @file vector_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2020 +*/ +/** * @brief Some examples code for using vector_utils.hpp */ diff --git a/examples/functional/AnyFunction.cpp b/examples/functional/AnyFunction.cpp index 5b6a424606..a22cc6e7d8 100644 --- a/examples/functional/AnyFunction.cpp +++ b/examples/functional/AnyFunction.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file AnyFunction.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** * @brief Some example code for using emp::AnyFunction */ diff --git a/examples/functional/GenericFunction.cpp b/examples/functional/GenericFunction.cpp index 1652eea3e3..a803822d73 100644 --- a/examples/functional/GenericFunction.cpp +++ b/examples/functional/GenericFunction.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file GenericFunction.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Some example code for using emp::GenericFunction */ diff --git a/examples/functional/flex_function.cpp b/examples/functional/flex_function.cpp index e9e705c3ed..78d9ba0bab 100644 --- a/examples/functional/flex_function.cpp +++ b/examples/functional/flex_function.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file flex_function.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::flex_function */ diff --git a/examples/functional/memo_function.cpp b/examples/functional/memo_function.cpp index c16450cef5..7161d74401 100644 --- a/examples/functional/memo_function.cpp +++ b/examples/functional/memo_function.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file memo_function.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::memo_function */ diff --git a/examples/geometry/Surface.cpp b/examples/geometry/Surface.cpp index 4a5e39161c..9966f54cef 100644 --- a/examples/geometry/Surface.cpp +++ b/examples/geometry/Surface.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file Surface.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** */ #include diff --git a/examples/hardware/AvidaGP.cpp b/examples/hardware/AvidaGP.cpp index 044628b242..7f460932dc 100644 --- a/examples/hardware/AvidaGP.cpp +++ b/examples/hardware/AvidaGP.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file AvidaGP.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief This is example code for using AvidaGP. */ diff --git a/examples/hardware/BitSorter.cpp b/examples/hardware/BitSorter.cpp index 896ad6cb71..d120861112 100644 --- a/examples/hardware/BitSorter.cpp +++ b/examples/hardware/BitSorter.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file BitSorter.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief This is example code for using BitSorter.h */ diff --git a/examples/hardware/LinearCode.cpp b/examples/hardware/LinearCode.cpp index e8deb1002b..d2ebdecbf7 100644 --- a/examples/hardware/LinearCode.cpp +++ b/examples/hardware/LinearCode.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file LinearCode.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief This is example code for using LinearCode.hpp */ diff --git a/examples/hardware/SignalGP.cpp b/examples/hardware/SignalGP.cpp index 0a48013fa7..8913113fbf 100644 --- a/examples/hardware/SignalGP.cpp +++ b/examples/hardware/SignalGP.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file SignalGP.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief This is example code for using EventDrivenGP (SignalGP). */ diff --git a/examples/io/ContiguousStream.cpp b/examples/io/ContiguousStream.cpp index 360025810e..9ed9e78ade 100644 --- a/examples/io/ContiguousStream.cpp +++ b/examples/io/ContiguousStream.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ContiguousStream.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/examples/io/File.cpp b/examples/io/File.cpp index 012180b8e7..2868abb7de 100644 --- a/examples/io/File.cpp +++ b/examples/io/File.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file File.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief An example file for using File.hpp */ diff --git a/examples/io/StreamManager.cpp b/examples/io/StreamManager.cpp index 42e2b88653..3970a622db 100644 --- a/examples/io/StreamManager.cpp +++ b/examples/io/StreamManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file StreamManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** * @brief An example file for using StreamManager.hpp */ diff --git a/examples/math/Distribution.cpp b/examples/math/Distribution.cpp index f6fd090659..4c5a4817a8 100644 --- a/examples/math/Distribution.cpp +++ b/examples/math/Distribution.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018-2020 - * - * @file Distribution.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018-2020 +*/ +/** * @brief Some examples code for using emp::Distribution and derived classes. */ diff --git a/examples/math/Random.cpp b/examples/math/Random.cpp index 45be7dffb1..03e862507d 100644 --- a/examples/math/Random.cpp +++ b/examples/math/Random.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file Random.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using emp::Random */ diff --git a/examples/math/Range.cpp b/examples/math/Range.cpp index c9ed443b97..82ff6384a3 100644 --- a/examples/math/Range.cpp +++ b/examples/math/Range.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file Range.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** */ #include diff --git a/examples/math/combos.cpp b/examples/math/combos.cpp index d65709a586..254ad9286a 100644 --- a/examples/math/combos.cpp +++ b/examples/math/combos.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file combos.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Example code for emp::ComboIDs class, emp::ComboGenerator class, and emp::combos function. */ diff --git a/examples/math/constants.cpp b/examples/math/constants.cpp index 9ca1e511fb..502ed50212 100644 --- a/examples/math/constants.cpp +++ b/examples/math/constants.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file constants.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** */ #include diff --git a/examples/math/info_theory.cpp b/examples/math/info_theory.cpp index 02092df03b..39b2329ad9 100644 --- a/examples/math/info_theory.cpp +++ b/examples/math/info_theory.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file info_theory.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples code for using info theory tools. */ diff --git a/examples/math/math.cpp b/examples/math/math.cpp index 3fbf096160..30323e364b 100644 --- a/examples/math/math.cpp +++ b/examples/math/math.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file math.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** * @brief Some examples code for using math functions. */ diff --git a/examples/math/stats.cpp b/examples/math/stats.cpp index f39fc4b941..0bc0c116e9 100644 --- a/examples/math/stats.cpp +++ b/examples/math/stats.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file stats.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/meta/ConceptWrapper.cpp b/examples/meta/ConceptWrapper.cpp index 00d11f4a07..341b2ef5f8 100644 --- a/examples/meta/ConceptWrapper.cpp +++ b/examples/meta/ConceptWrapper.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file ConceptWrapper.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Some examples code for using emp::ConceptWrapper template */ diff --git a/examples/meta/TypePack.cpp b/examples/meta/TypePack.cpp index 87b8d43ccb..d29b4d7c37 100644 --- a/examples/meta/TypePack.cpp +++ b/examples/meta/TypePack.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2019 - * - * @file TypePack.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2019 +*/ +/** * @brief Some examples of code using reflection techniques. */ diff --git a/examples/meta/ValPack.cpp b/examples/meta/ValPack.cpp index ee5aaac084..19f149a822 100644 --- a/examples/meta/ValPack.cpp +++ b/examples/meta/ValPack.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file ValPack.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Some example code for using ValPack */ diff --git a/examples/meta/macros.cpp b/examples/meta/macros.cpp index a0ced5e11b..22ddf38cf9 100644 --- a/examples/meta/macros.cpp +++ b/examples/meta/macros.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 - * - * @file macros.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 +*/ +/** */ #include diff --git a/examples/meta/meta.cpp b/examples/meta/meta.cpp index 0061e8c6a6..95e73d3fe9 100644 --- a/examples/meta/meta.cpp +++ b/examples/meta/meta.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 - * - * @file meta.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 +*/ +/** */ #include diff --git a/examples/meta/reflection.cpp b/examples/meta/reflection.cpp index 1a834b459b..acdf9747c3 100644 --- a/examples/meta/reflection.cpp +++ b/examples/meta/reflection.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 - * - * @file reflection.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016 +*/ +/** * @brief Some examples of code using reflection techniques. */ diff --git a/examples/prefab/Card.cpp b/examples/prefab/Card.cpp index ffe857cf6f..ee6f753b34 100644 --- a/examples/prefab/Card.cpp +++ b/examples/prefab/Card.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Card.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/CodeBlock.cpp b/examples/prefab/CodeBlock.cpp index 550447de4e..7aa1880fdd 100644 --- a/examples/prefab/CodeBlock.cpp +++ b/examples/prefab/CodeBlock.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file CodeBlock.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/Collapse.cpp b/examples/prefab/Collapse.cpp index fc75853a11..02da3fff0b 100644 --- a/examples/prefab/Collapse.cpp +++ b/examples/prefab/Collapse.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Collapse.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/CommentBox.cpp b/examples/prefab/CommentBox.cpp index 1bc5324c75..f0edfad450 100644 --- a/examples/prefab/CommentBox.cpp +++ b/examples/prefab/CommentBox.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file CommentBox.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/ConfigPanel.cpp b/examples/prefab/ConfigPanel.cpp index 46aab2197d..2a8f85b834 100644 --- a/examples/prefab/ConfigPanel.cpp +++ b/examples/prefab/ConfigPanel.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file ConfigPanel.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/FontAwesomeIcon.cpp b/examples/prefab/FontAwesomeIcon.cpp index b8cb828d01..59313a7e60 100644 --- a/examples/prefab/FontAwesomeIcon.cpp +++ b/examples/prefab/FontAwesomeIcon.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file FontAwesomeIcon.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/LoadingIcon.cpp b/examples/prefab/LoadingIcon.cpp index e6ae836fee..7630af6f91 100644 --- a/examples/prefab/LoadingIcon.cpp +++ b/examples/prefab/LoadingIcon.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file LoadingIcon.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/LoadingModal.cpp b/examples/prefab/LoadingModal.cpp index e93293c64e..87ff0e5f48 100644 --- a/examples/prefab/LoadingModal.cpp +++ b/examples/prefab/LoadingModal.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file LoadingModal.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/Modal.cpp b/examples/prefab/Modal.cpp index 3de710d89a..f7bafd43fb 100644 --- a/examples/prefab/Modal.cpp +++ b/examples/prefab/Modal.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Modal.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/examples/prefab/ReadoutPanel.cpp b/examples/prefab/ReadoutPanel.cpp index c34a1620a9..433e9668d8 100644 --- a/examples/prefab/ReadoutPanel.cpp +++ b/examples/prefab/ReadoutPanel.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ReadoutPanel.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "emp/math/Random.hpp" diff --git a/examples/prefab/ToggleSwitch.cpp b/examples/prefab/ToggleSwitch.cpp index d0c9038a3f..ec71c20cad 100644 --- a/examples/prefab/ToggleSwitch.cpp +++ b/examples/prefab/ToggleSwitch.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date ,020 - * - * @file ToggleSwitch.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: ,020 +*/ +/** */ #include diff --git a/examples/prefab/assets/SampleConfig.hpp b/examples/prefab/assets/SampleConfig.hpp index f4bfaa44b7..773f5c175d 100644 --- a/examples/prefab/assets/SampleConfig.hpp +++ b/examples/prefab/assets/SampleConfig.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file SampleConfig.hpp +*/ +/** * @note Adapted from Emily's memic_model project * https://github.com/emilydolson/memic_model */ diff --git a/examples/scholar/Citation.cpp b/examples/scholar/Citation.cpp index 46a1eeda5e..174f8d7ece 100644 --- a/examples/scholar/Citation.cpp +++ b/examples/scholar/Citation.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Citation.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/examples/testing/ExampleFail.cpp b/examples/testing/ExampleFail.cpp index cb8f9d8b06..455146b0b7 100644 --- a/examples/testing/ExampleFail.cpp +++ b/examples/testing/ExampleFail.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file ExampleFail.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief An example file to show what FAILING unit tests look like, with commentary. */ diff --git a/examples/testing/ExampleFail2.cpp b/examples/testing/ExampleFail2.cpp index 27d722da48..5c4be27bd5 100644 --- a/examples/testing/ExampleFail2.cpp +++ b/examples/testing/ExampleFail2.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file ExampleFail2.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief An second example file to show what a single FAILING unit test looks like. */ diff --git a/examples/testing/ExamplePass.cpp b/examples/testing/ExamplePass.cpp index 573c156248..d9212bf8b7 100644 --- a/examples/testing/ExamplePass.cpp +++ b/examples/testing/ExamplePass.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file ExamplePass.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief An example file to show what PASSING unit tests look like, with commentary. * * Unit tests can be built easily, with a good bit of flexibility, as described below. diff --git a/examples/testing/Template.cpp b/examples/testing/Template.cpp index 1ce482aa7c..7aa68a9429 100644 --- a/examples/testing/Template.cpp +++ b/examples/testing/Template.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file Template.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief A starting point for writing unit tests. */ diff --git a/examples/timing/IndexMap.cpp b/examples/timing/IndexMap.cpp index 3748288922..2804a5ed1f 100644 --- a/examples/timing/IndexMap.cpp +++ b/examples/timing/IndexMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file IndexMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Comparing the ordered versus unordered versions of IndexMap */ diff --git a/examples/timing/Othello.cpp b/examples/timing/Othello.cpp index a89544b996..1ecebe5aeb 100644 --- a/examples/timing/Othello.cpp +++ b/examples/timing/Othello.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file Othello.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** * @brief Code examining the speed of an Othello board. */ diff --git a/examples/timing/Random_timings.cpp b/examples/timing/Random_timings.cpp index a56ba0808d..7370848c23 100644 --- a/examples/timing/Random_timings.cpp +++ b/examples/timing/Random_timings.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Random_timings.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** * @brief Some code testing the speed of random operations. */ diff --git a/examples/timing/bit_timings.cpp b/examples/timing/bit_timings.cpp index c6a62a011c..795e0fc725 100644 --- a/examples/timing/bit_timings.cpp +++ b/examples/timing/bit_timings.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020-2021 - * - * @file bit_timings.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020-2021 +*/ +/** * @brief Some code testing the speed of operations on BitSet and BitVector. */ diff --git a/examples/timing/pointers.cpp b/examples/timing/pointers.cpp index aea6ca11c2..fc64b28537 100644 --- a/examples/timing/pointers.cpp +++ b/examples/timing/pointers.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file pointers.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** * @brief Some code comparing T*, emp::Ptr, and std::shared_ptr * * We are comparing the timings and code complexity for creating a series of N pointers, diff --git a/examples/tools/TypeTracker.cpp b/examples/tools/TypeTracker.cpp index 0c8255a8df..1bedd08cd9 100644 --- a/examples/tools/TypeTracker.cpp +++ b/examples/tools/TypeTracker.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file TypeTracker.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** * @brief Some example code for using TypeTracker */ diff --git a/examples/tools/attrs.cpp b/examples/tools/attrs.cpp index 81743fdb66..5d7ee03a5a 100644 --- a/examples/tools/attrs.cpp +++ b/examples/tools/attrs.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file attrs.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/examples/web/Animate.cpp b/examples/web/Animate.cpp index f2d9ce8c84..63b157981d 100644 --- a/examples/web/Animate.cpp +++ b/examples/web/Animate.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 - * - * @file Animate.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 +*/ +/** */ #include "emp/math/Random.hpp" diff --git a/examples/web/Animate2.cpp b/examples/web/Animate2.cpp index cf5f6f1457..8fabe6751d 100644 --- a/examples/web/Animate2.cpp +++ b/examples/web/Animate2.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 - * - * @file Animate2.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 +*/ +/** */ #include "emp/math/Random.hpp" diff --git a/examples/web/Attributes.cpp b/examples/web/Attributes.cpp index 744758e2c5..c6e63b419f 100644 --- a/examples/web/Attributes.cpp +++ b/examples/web/Attributes.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file Attributes.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/web/web.hpp" diff --git a/examples/web/Canvas.cpp b/examples/web/Canvas.cpp index e4cfbf14be..6c0ffd56b0 100644 --- a/examples/web/Canvas.cpp +++ b/examples/web/Canvas.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 - * - * @file Canvas.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 +*/ +/** */ #include "emp/math/Random.hpp" diff --git a/examples/web/DP.cpp b/examples/web/DP.cpp index 044d86175e..7f9fc20a85 100644 --- a/examples/web/DP.cpp +++ b/examples/web/DP.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file DP.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** */ #include diff --git a/examples/web/Div.cpp b/examples/web/Div.cpp index e1b5d5ee7d..65d40b8156 100644 --- a/examples/web/Div.cpp +++ b/examples/web/Div.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file Div.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/web/commands.hpp" diff --git a/examples/web/Example.cpp b/examples/web/Example.cpp index c67b8e24e8..156852d2a9 100644 --- a/examples/web/Example.cpp +++ b/examples/web/Example.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file Example.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** */ #include "emp/web/web.hpp" diff --git a/examples/web/Font.cpp b/examples/web/Font.cpp index 04b0a7befb..c8fa7f356b 100644 --- a/examples/web/Font.cpp +++ b/examples/web/Font.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file Font.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** */ #include "emp/web/web.hpp" diff --git a/examples/web/Graph.cpp b/examples/web/Graph.cpp index dba2229b2b..8dae9e1b88 100644 --- a/examples/web/Graph.cpp +++ b/examples/web/Graph.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 - * - * @file Graph.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017 +*/ +/** */ #include "emp/base/vector.hpp" diff --git a/examples/web/Hello.cpp b/examples/web/Hello.cpp index 272676a5ff..e8ae673686 100644 --- a/examples/web/Hello.cpp +++ b/examples/web/Hello.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 - * - * @file Hello.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2019 +*/ +/** */ #include "emp/web/web.hpp" diff --git a/examples/web/Image.cpp b/examples/web/Image.cpp index 5d9e8da769..24282f825b 100644 --- a/examples/web/Image.cpp +++ b/examples/web/Image.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 - * - * @file Image.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2018 +*/ +/** */ #include "emp/math/Random.hpp" diff --git a/examples/web/RPS.cpp b/examples/web/RPS.cpp index 374031113f..bc9d0dae54 100644 --- a/examples/web/RPS.cpp +++ b/examples/web/RPS.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2018 - * - * @file RPS.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2018 +*/ +/** */ #include "emp/geometry/Surface.hpp" diff --git a/examples/web/Sudoku.cpp b/examples/web/Sudoku.cpp index def1a8c3eb..1900ebd307 100644 --- a/examples/web/Sudoku.cpp +++ b/examples/web/Sudoku.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file Sudoku.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/base/vector.hpp" diff --git a/examples/web/Table.cpp b/examples/web/Table.cpp index f1622a96fc..e0f841737f 100644 --- a/examples/web/Table.cpp +++ b/examples/web/Table.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file Table.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/web/web.hpp" diff --git a/examples/web/TextArea.cpp b/examples/web/TextArea.cpp index 7abbc1f692..473f86b9b8 100644 --- a/examples/web/TextArea.cpp +++ b/examples/web/TextArea.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file TextArea.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/web/web.hpp" diff --git a/examples/web/Tween.cpp b/examples/web/Tween.cpp index e60fafb468..38d49714e0 100644 --- a/examples/web/Tween.cpp +++ b/examples/web/Tween.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file Tween.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/web/Tween.hpp" diff --git a/examples/web/Web.cpp b/examples/web/Web.cpp index df55f48ec5..3698af613c 100644 --- a/examples/web/Web.cpp +++ b/examples/web/Web.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file Web.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/debug/alert.hpp" diff --git a/examples/web/assert.cpp b/examples/web/assert.cpp index d023d395bc..1c5cfb54f9 100644 --- a/examples/web/assert.cpp +++ b/examples/web/assert.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file assert.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include "emp/base/assert.hpp" diff --git a/examples/web/keypress.cpp b/examples/web/keypress.cpp index 30a53ecd6e..8d99f648b8 100644 --- a/examples/web/keypress.cpp +++ b/examples/web/keypress.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 - * - * @file keypress.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2017 +*/ +/** */ #include "emp/web/KeypressManager.hpp" diff --git a/tests/Evolve/NK-const.cpp b/tests/Evolve/NK-const.cpp index fde043ec96..a4cbf16d1c 100644 --- a/tests/Evolve/NK-const.cpp +++ b/tests/Evolve/NK-const.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file NK-const.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/NK.cpp b/tests/Evolve/NK.cpp index d6d36a2a18..ab203c9e19 100644 --- a/tests/Evolve/NK.cpp +++ b/tests/Evolve/NK.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file NK.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #define EMP_TDEBUG diff --git a/tests/Evolve/OEE.cpp b/tests/Evolve/OEE.cpp index b0cec6394b..4d806c4ac7 100644 --- a/tests/Evolve/OEE.cpp +++ b/tests/Evolve/OEE.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file OEE.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #ifndef EMP_TRACK_MEM diff --git a/tests/Evolve/Resource.cpp b/tests/Evolve/Resource.cpp index f263485ecb..9691edeabf 100644 --- a/tests/Evolve/Resource.cpp +++ b/tests/Evolve/Resource.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Resource.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/StateGrid.cpp b/tests/Evolve/StateGrid.cpp index d0e02719b8..e4377fab7c 100644 --- a/tests/Evolve/StateGrid.cpp +++ b/tests/Evolve/StateGrid.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file StateGrid.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/Systematics.cpp b/tests/Evolve/Systematics.cpp index f2d40ac3a1..baf78749ee 100644 --- a/tests/Evolve/Systematics.cpp +++ b/tests/Evolve/Systematics.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Systematics.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/Evolve/World.cpp b/tests/Evolve/World.cpp index c313d6f9be..bedd69ceef 100644 --- a/tests/Evolve/World.cpp +++ b/tests/Evolve/World.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file World.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/World_iterator.cpp b/tests/Evolve/World_iterator.cpp index 9de0153861..6189d53393 100644 --- a/tests/Evolve/World_iterator.cpp +++ b/tests/Evolve/World_iterator.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file World_iterator.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/World_output.cpp b/tests/Evolve/World_output.cpp index 1731738535..915466e6a2 100644 --- a/tests/Evolve/World_output.cpp +++ b/tests/Evolve/World_output.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file World_output.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/World_reflect.cpp b/tests/Evolve/World_reflect.cpp index 694ad9e63d..2316e42a0a 100644 --- a/tests/Evolve/World_reflect.cpp +++ b/tests/Evolve/World_reflect.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file World_reflect.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/Evolve/World_select.cpp b/tests/Evolve/World_select.cpp index dbe5e2b9d8..7510faee49 100644 --- a/tests/Evolve/World_select.cpp +++ b/tests/Evolve/World_select.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file World_select.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/Evolve/World_structure.cpp b/tests/Evolve/World_structure.cpp index 34b516eba0..1d39137e77 100644 --- a/tests/Evolve/World_structure.cpp +++ b/tests/Evolve/World_structure.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file World_structure.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #define EMP_TDEBUG diff --git a/tests/OLD/Slideshow/Slideshow.cpp b/tests/OLD/Slideshow/Slideshow.cpp index e7007f7631..60d77380d4 100644 --- a/tests/OLD/Slideshow/Slideshow.cpp +++ b/tests/OLD/Slideshow/Slideshow.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file Slideshow.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Animate.cpp b/tests/OLD/UI/Animate.cpp index 9b41b2a599..2fbd3a7a2d 100644 --- a/tests/OLD/UI/Animate.cpp +++ b/tests/OLD/UI/Animate.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Animate.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../tools/Random.h" diff --git a/tests/OLD/UI/Canvas.cpp b/tests/OLD/UI/Canvas.cpp index e154abfd71..9c21042097 100644 --- a/tests/OLD/UI/Canvas.cpp +++ b/tests/OLD/UI/Canvas.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Canvas.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Element.cpp b/tests/OLD/UI/Element.cpp index 25a8249563..5f50a12c31 100644 --- a/tests/OLD/UI/Element.cpp +++ b/tests/OLD/UI/Element.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Element.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../jquery/jquery.h" diff --git a/tests/OLD/UI/ElementSlate.cpp b/tests/OLD/UI/ElementSlate.cpp index c63f860a17..432d66e18d 100644 --- a/tests/OLD/UI/ElementSlate.cpp +++ b/tests/OLD/UI/ElementSlate.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ElementSlate.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/ElementTable.cpp b/tests/OLD/UI/ElementTable.cpp index e958a3fcfe..48252e3031 100644 --- a/tests/OLD/UI/ElementTable.cpp +++ b/tests/OLD/UI/ElementTable.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ElementTable.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Example.cpp b/tests/OLD/UI/Example.cpp index c11c1993f9..c19cdba020 100644 --- a/tests/OLD/UI/Example.cpp +++ b/tests/OLD/UI/Example.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Example.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Example2.cpp b/tests/OLD/UI/Example2.cpp index 46ea137e02..c491f57fe9 100644 --- a/tests/OLD/UI/Example2.cpp +++ b/tests/OLD/UI/Example2.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Example2.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/base_tests/test2.cpp b/tests/OLD/UI/base_tests/test2.cpp index 5bfbf1aa20..cc323fe254 100644 --- a/tests/OLD/UI/base_tests/test2.cpp +++ b/tests/OLD/UI/base_tests/test2.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file test2.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/OLD/UI/base_tests/test3.cpp b/tests/OLD/UI/base_tests/test3.cpp index 64ffaf7d64..866fea5ccb 100644 --- a/tests/OLD/UI/base_tests/test3.cpp +++ b/tests/OLD/UI/base_tests/test3.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file test3.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/OLD/UI/base_tests/test4.cpp b/tests/OLD/UI/base_tests/test4.cpp index 7ffce0ebee..e60f43e14b 100644 --- a/tests/OLD/UI/base_tests/test4.cpp +++ b/tests/OLD/UI/base_tests/test4.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file test4.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/OLD/UI/canvas_utils.cpp b/tests/OLD/UI/canvas_utils.cpp index 66e4807574..b9bc46c550 100644 --- a/tests/OLD/UI/canvas_utils.cpp +++ b/tests/OLD/UI/canvas_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file canvas_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "../../tools/Random.h" diff --git a/tests/OLD/UI/events.cpp b/tests/OLD/UI/events.cpp index 06c6f32a13..b6476295c9 100644 --- a/tests/OLD/UI/events.cpp +++ b/tests/OLD/UI/events.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file events.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/OLD/UI/mini_evoke.cpp b/tests/OLD/UI/mini_evoke.cpp index f770ae1885..ac7b074f95 100644 --- a/tests/OLD/UI/mini_evoke.cpp +++ b/tests/OLD/UI/mini_evoke.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file mini_evoke.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/OLD/kinetic/BatchDraw.cpp b/tests/OLD/kinetic/BatchDraw.cpp index eed5a60d1c..54717245b9 100644 --- a/tests/OLD/kinetic/BatchDraw.cpp +++ b/tests/OLD/kinetic/BatchDraw.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file BatchDraw.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include diff --git a/tests/OLD/kinetic/LayerManagement.cpp b/tests/OLD/kinetic/LayerManagement.cpp index fecd5c7191..3468377dd9 100644 --- a/tests/OLD/kinetic/LayerManagement.cpp +++ b/tests/OLD/kinetic/LayerManagement.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file LayerManagement.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include diff --git a/tests/OLD/kinetic/Simple.cpp b/tests/OLD/kinetic/Simple.cpp index 5a0f705a4b..4a6c2c8d42 100644 --- a/tests/OLD/kinetic/Simple.cpp +++ b/tests/OLD/kinetic/Simple.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file Simple.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include diff --git a/tests/OLD/kinetic/VaderImage.cpp b/tests/OLD/kinetic/VaderImage.cpp index 22cad574f4..52a0f47b72 100644 --- a/tests/OLD/kinetic/VaderImage.cpp +++ b/tests/OLD/kinetic/VaderImage.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file VaderImage.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include diff --git a/tests/OLD/kinetic/test.cpp b/tests/OLD/kinetic/test.cpp index 65919eb6e8..4c43ba9935 100644 --- a/tests/OLD/kinetic/test.cpp +++ b/tests/OLD/kinetic/test.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file test.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include diff --git a/tests/base/MapProxy.cpp b/tests/base/MapProxy.cpp index 29b4107b64..445929769f 100644 --- a/tests/base/MapProxy.cpp +++ b/tests/base/MapProxy.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file MapProxy.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/base/Ptr.cpp b/tests/base/Ptr.cpp index 18560a07ad..dc015b16b1 100644 --- a/tests/base/Ptr.cpp +++ b/tests/base/Ptr.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Ptr.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ //#ifndef EMP_TRACK_MEM diff --git a/tests/base/always_assert.cpp b/tests/base/always_assert.cpp index 937685fd8a..6ca5db6568 100644 --- a/tests/base/always_assert.cpp +++ b/tests/base/always_assert.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file always_assert.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/base/always_assert_warning.cpp b/tests/base/always_assert_warning.cpp index f560552371..41319a4129 100644 --- a/tests/base/always_assert_warning.cpp +++ b/tests/base/always_assert_warning.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file always_assert_warning.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/base/array.cpp b/tests/base/array.cpp index b9a47fb39d..4ab8dfd8cd 100644 --- a/tests/base/array.cpp +++ b/tests/base/array.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file array.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** */ #include diff --git a/tests/base/assert.cpp b/tests/base/assert.cpp index d9c92fd57c..ff3c27abb5 100644 --- a/tests/base/assert.cpp +++ b/tests/base/assert.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file assert.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** */ #undef NDEBUG diff --git a/tests/base/assert_warning.cpp b/tests/base/assert_warning.cpp index 7ef966113d..95425001a1 100644 --- a/tests/base/assert_warning.cpp +++ b/tests/base/assert_warning.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file assert_warning.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #undef NDEBUG diff --git a/tests/base/error.cpp b/tests/base/error.cpp index bc0416c5fc..b5a298e399 100644 --- a/tests/base/error.cpp +++ b/tests/base/error.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2021 - * - * @file error.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2021 +*/ +/** */ #undef NDEBUG diff --git a/tests/base/errors.cpp b/tests/base/errors.cpp index 13f04d3545..a7e74f4973 100644 --- a/tests/base/errors.cpp +++ b/tests/base/errors.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file errors.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** */ #include diff --git a/tests/base/map.cpp b/tests/base/map.cpp index 5985ebf3f5..750a1c9506 100644 --- a/tests/base/map.cpp +++ b/tests/base/map.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file map.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/base/optional.cpp b/tests/base/optional.cpp index 9485436f2c..e158c3d945 100644 --- a/tests/base/optional.cpp +++ b/tests/base/optional.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file optional.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/base/unordered_map.cpp b/tests/base/unordered_map.cpp index b0159b03f1..3b0e2fce4e 100644 --- a/tests/base/unordered_map.cpp +++ b/tests/base/unordered_map.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file unordered_map.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/base/vector.cpp b/tests/base/vector.cpp index f220c3d8ac..85002f1c95 100644 --- a/tests/base/vector.cpp +++ b/tests/base/vector.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file vector.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/bits/BitArray.cpp b/tests/bits/BitArray.cpp index 76e8742556..8583e78896 100644 --- a/tests/bits/BitArray.cpp +++ b/tests/bits/BitArray.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file BitArray.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #define EMP_DECORATE(X) [X] diff --git a/tests/bits/BitMatrix.cpp b/tests/bits/BitMatrix.cpp index 7eb7a1595d..24d127dcbc 100644 --- a/tests/bits/BitMatrix.cpp +++ b/tests/bits/BitMatrix.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file BitMatrix.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** * */ diff --git a/tests/bits/BitSet.cpp b/tests/bits/BitSet.cpp index ce1513e146..28ff21117f 100644 --- a/tests/bits/BitSet.cpp +++ b/tests/bits/BitSet.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file BitSet.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #define EMP_DECORATE(X) [X] diff --git a/tests/bits/BitVector.cpp b/tests/bits/BitVector.cpp index 03dc2eddef..04c80dc45a 100644 --- a/tests/bits/BitVector.cpp +++ b/tests/bits/BitVector.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file BitVector.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/bits/bitset_utils.cpp b/tests/bits/bitset_utils.cpp index 6cd87e705c..cce509bc2a 100644 --- a/tests/bits/bitset_utils.cpp +++ b/tests/bits/bitset_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file bitset_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/compiler/DFA.cpp b/tests/compiler/DFA.cpp index 0c3f3607f4..b8e301def1 100644 --- a/tests/compiler/DFA.cpp +++ b/tests/compiler/DFA.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DFA.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/compiler/Lexer.cpp b/tests/compiler/Lexer.cpp index c14da58979..fb9aaad339 100644 --- a/tests/compiler/Lexer.cpp +++ b/tests/compiler/Lexer.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Lexer.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/compiler/NFA.cpp b/tests/compiler/NFA.cpp index d673797787..672c349ffa 100644 --- a/tests/compiler/NFA.cpp +++ b/tests/compiler/NFA.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file NFA.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/compiler/RegEx.cpp b/tests/compiler/RegEx.cpp index ad3fbb87e1..f7618dea2b 100644 --- a/tests/compiler/RegEx.cpp +++ b/tests/compiler/RegEx.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file RegEx.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/compiler/lexer_utils.cpp b/tests/compiler/lexer_utils.cpp index f16eb83ef2..0c015b6b0a 100644 --- a/tests/compiler/lexer_utils.cpp +++ b/tests/compiler/lexer_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file lexer_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/config/ArgManager.cpp b/tests/config/ArgManager.cpp index de14f922c0..a4ac1d6cf5 100644 --- a/tests/config/ArgManager.cpp +++ b/tests/config/ArgManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file ArgManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/ConfigManager.cpp b/tests/config/ConfigManager.cpp index dd27d1f8d9..070f88630e 100644 --- a/tests/config/ConfigManager.cpp +++ b/tests/config/ConfigManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ConfigManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/SettingCombos.cpp b/tests/config/SettingCombos.cpp index 165fb79128..b5a26f7058 100644 --- a/tests/config/SettingCombos.cpp +++ b/tests/config/SettingCombos.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file SettingCombos.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/SettingConfig.cpp b/tests/config/SettingConfig.cpp index 679f641bba..a987f42b07 100644 --- a/tests/config/SettingConfig.cpp +++ b/tests/config/SettingConfig.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file SettingConfig.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/assets/config_setup.hpp b/tests/config/assets/config_setup.hpp index 84075af730..8a6e96f29c 100644 --- a/tests/config/assets/config_setup.hpp +++ b/tests/config/assets/config_setup.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2016 - * - * @file config_setup.hpp +*/ +/** * @brief This file provides an example of how to build a configuration class. * * To create a new config from scratch, the format is: diff --git a/tests/config/command_line.cpp b/tests/config/command_line.cpp index 8b36e42ff5..e2738e3001 100644 --- a/tests/config/command_line.cpp +++ b/tests/config/command_line.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file command_line.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/config.cpp b/tests/config/config.cpp index d0be0bc547..ff35dab4d7 100644 --- a/tests/config/config.cpp +++ b/tests/config/config.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015 - * - * @file config.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/config_utils.cpp b/tests/config/config_utils.cpp index f4a65d6e40..804deb00a2 100644 --- a/tests/config/config_utils.cpp +++ b/tests/config/config_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file config_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/Action.cpp b/tests/control/Action.cpp index 63ca00b990..0d6fab0a4b 100644 --- a/tests/control/Action.cpp +++ b/tests/control/Action.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Action.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/ActionManager.cpp b/tests/control/ActionManager.cpp index c309caf2bc..deefad08db 100644 --- a/tests/control/ActionManager.cpp +++ b/tests/control/ActionManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ActionManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/Signal.cpp b/tests/control/Signal.cpp index 76b9383c4e..853e0e95da 100644 --- a/tests/control/Signal.cpp +++ b/tests/control/Signal.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Signal.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/SignalControl.cpp b/tests/control/SignalControl.cpp index 0a2f554edd..a912cdc15d 100644 --- a/tests/control/SignalControl.cpp +++ b/tests/control/SignalControl.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file SignalControl.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/SignalManager.cpp b/tests/control/SignalManager.cpp index c28f1b52ed..920a81267d 100644 --- a/tests/control/SignalManager.cpp +++ b/tests/control/SignalManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file SignalManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/DataFile.cpp b/tests/data/DataFile.cpp index bd35c60ff8..32d6f3b304 100644 --- a/tests/data/DataFile.cpp +++ b/tests/data/DataFile.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DataFile.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataInterface.cpp b/tests/data/DataInterface.cpp index 19f834d9bb..c37688d117 100644 --- a/tests/data/DataInterface.cpp +++ b/tests/data/DataInterface.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DataInterface.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataLayout.cpp b/tests/data/DataLayout.cpp index 4e6266be2e..6c56d64748 100644 --- a/tests/data/DataLayout.cpp +++ b/tests/data/DataLayout.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DataLayout.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/DataLog.cpp b/tests/data/DataLog.cpp index e0636ad4ac..03aa072213 100644 --- a/tests/data/DataLog.cpp +++ b/tests/data/DataLog.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DataLog.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataManager.cpp b/tests/data/DataManager.cpp index b2fffcc650..1f50dc5312 100644 --- a/tests/data/DataManager.cpp +++ b/tests/data/DataManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DataManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataMap.cpp b/tests/data/DataMap.cpp index 2fe58fbcc8..510435bca9 100644 --- a/tests/data/DataMap.cpp +++ b/tests/data/DataMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DataMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/DataNode.cpp b/tests/data/DataNode.cpp index 56191ef5e5..00990d96f2 100644 --- a/tests/data/DataNode.cpp +++ b/tests/data/DataNode.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DataNode.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/MemoryImage.cpp b/tests/data/MemoryImage.cpp index a905ae830f..c81bd48c9f 100644 --- a/tests/data/MemoryImage.cpp +++ b/tests/data/MemoryImage.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file MemoryImage.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/Trait.cpp b/tests/data/Trait.cpp index a1cf3e73d2..772b4717ab 100644 --- a/tests/data/Trait.cpp +++ b/tests/data/Trait.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Trait.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/VarMap.cpp b/tests/data/VarMap.cpp index 66489df240..a3f2b4e40e 100644 --- a/tests/data/VarMap.cpp +++ b/tests/data/VarMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file VarMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/BloomFilter.cpp b/tests/datastructs/BloomFilter.cpp index d1be1338f8..763aa91363 100644 --- a/tests/datastructs/BloomFilter.cpp +++ b/tests/datastructs/BloomFilter.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file BloomFilter.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/Bool.cpp b/tests/datastructs/Bool.cpp index ed03f2600a..4cd2c7903e 100644 --- a/tests/datastructs/Bool.cpp +++ b/tests/datastructs/Bool.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Bool.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/Cache.cpp b/tests/datastructs/Cache.cpp index 82e832af1c..a7b708e377 100644 --- a/tests/datastructs/Cache.cpp +++ b/tests/datastructs/Cache.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Cache.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/DynamicString.cpp b/tests/datastructs/DynamicString.cpp index ece941d08a..5d54b604ac 100644 --- a/tests/datastructs/DynamicString.cpp +++ b/tests/datastructs/DynamicString.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file DynamicString.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/Graph.cpp b/tests/datastructs/Graph.cpp index 20a57744b5..0ba4abd6a2 100644 --- a/tests/datastructs/Graph.cpp +++ b/tests/datastructs/Graph.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Graph.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/IndexMap.cpp b/tests/datastructs/IndexMap.cpp index 3e939c3481..177c9d4067 100644 --- a/tests/datastructs/IndexMap.cpp +++ b/tests/datastructs/IndexMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file IndexMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/QueueCache.cpp b/tests/datastructs/QueueCache.cpp index 2d1f7262e8..39c2ecc8f8 100644 --- a/tests/datastructs/QueueCache.cpp +++ b/tests/datastructs/QueueCache.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file QueueCache.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/SmallFifoMap.cpp b/tests/datastructs/SmallFifoMap.cpp index 2b79f69e17..b42fd58b9a 100644 --- a/tests/datastructs/SmallFifoMap.cpp +++ b/tests/datastructs/SmallFifoMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file SmallFifoMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/SmallVector.cpp b/tests/datastructs/SmallVector.cpp index da95b0bb19..00dd1d89c9 100644 --- a/tests/datastructs/SmallVector.cpp +++ b/tests/datastructs/SmallVector.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file SmallVector.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** * * Adapted in part from the LLVM Project, under the Apache License v2.0 with * LLVM Exceptions. See https://llvm.org/LICENSE.txt for license information. diff --git a/tests/datastructs/StringMap.cpp b/tests/datastructs/StringMap.cpp index 06775485b4..1e7eaff8c0 100644 --- a/tests/datastructs/StringMap.cpp +++ b/tests/datastructs/StringMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file StringMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/TimeQueue.cpp b/tests/datastructs/TimeQueue.cpp index b3d4306f4d..a70dd059ea 100644 --- a/tests/datastructs/TimeQueue.cpp +++ b/tests/datastructs/TimeQueue.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file TimeQueue.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/TypeMap.cpp b/tests/datastructs/TypeMap.cpp index 171b8280d6..9f74f03e02 100644 --- a/tests/datastructs/TypeMap.cpp +++ b/tests/datastructs/TypeMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file TypeMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/UnorderedIndexMap.cpp b/tests/datastructs/UnorderedIndexMap.cpp index abc75eaae5..3bbbb55313 100644 --- a/tests/datastructs/UnorderedIndexMap.cpp +++ b/tests/datastructs/UnorderedIndexMap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file UnorderedIndexMap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/graph_utils.cpp b/tests/datastructs/graph_utils.cpp index f5ad309d80..2a4b6e5bbc 100644 --- a/tests/datastructs/graph_utils.cpp +++ b/tests/datastructs/graph_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file graph_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/hash_utils.cpp b/tests/datastructs/hash_utils.cpp index b6bc415f45..723fd78695 100644 --- a/tests/datastructs/hash_utils.cpp +++ b/tests/datastructs/hash_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file hash_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/map_utils.cpp b/tests/datastructs/map_utils.cpp index 6ef82eb21f..d3b78eeba6 100644 --- a/tests/datastructs/map_utils.cpp +++ b/tests/datastructs/map_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file map_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/ra_set.cpp b/tests/datastructs/ra_set.cpp index 3f5fb43c8f..0f7b0a29a5 100644 --- a/tests/datastructs/ra_set.cpp +++ b/tests/datastructs/ra_set.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ra_set.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/reference_vector.cpp b/tests/datastructs/reference_vector.cpp index ced9d670aa..56078f69a2 100644 --- a/tests/datastructs/reference_vector.cpp +++ b/tests/datastructs/reference_vector.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file reference_vector.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/set_utils.cpp b/tests/datastructs/set_utils.cpp index ea5ae64f97..8b675dd516 100644 --- a/tests/datastructs/set_utils.cpp +++ b/tests/datastructs/set_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file set_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/tuple_struct.cpp b/tests/datastructs/tuple_struct.cpp index 86839c8c87..f9cd32ebf2 100644 --- a/tests/datastructs/tuple_struct.cpp +++ b/tests/datastructs/tuple_struct.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file tuple_struct.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/tuple_utils.cpp b/tests/datastructs/tuple_utils.cpp index daa5cf256a..a167a3378c 100644 --- a/tests/datastructs/tuple_utils.cpp +++ b/tests/datastructs/tuple_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file tuple_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/datastructs/valsort_map.cpp b/tests/datastructs/valsort_map.cpp index a5addda7f3..e4431a749c 100644 --- a/tests/datastructs/valsort_map.cpp +++ b/tests/datastructs/valsort_map.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file valsort_map.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/vector_utils.cpp b/tests/datastructs/vector_utils.cpp index 4665b2db84..98985620e6 100644 --- a/tests/datastructs/vector_utils.cpp +++ b/tests/datastructs/vector_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file vector_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/debug/alert.cpp b/tests/debug/alert.cpp index bf628aa887..6baed8dadc 100644 --- a/tests/debug/alert.cpp +++ b/tests/debug/alert.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file alert.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/debug/debug.cpp b/tests/debug/debug.cpp index 84f8ffd870..c98bafca96 100644 --- a/tests/debug/debug.cpp +++ b/tests/debug/debug.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file debug.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/debug/mem_track.cpp b/tests/debug/mem_track.cpp index 8ee0a7d09b..e818363072 100644 --- a/tests/debug/mem_track.cpp +++ b/tests/debug/mem_track.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file mem_track.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #define EMP_TRACK_MEM diff --git a/tests/functional/AnyFunction.cpp b/tests/functional/AnyFunction.cpp index cf3acda126..355c7ca0df 100644 --- a/tests/functional/AnyFunction.cpp +++ b/tests/functional/AnyFunction.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file AnyFunction.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/functional/FunctionSet.cpp b/tests/functional/FunctionSet.cpp index 0ecee6ea0d..eef3291d83 100644 --- a/tests/functional/FunctionSet.cpp +++ b/tests/functional/FunctionSet.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file FunctionSet.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/functional/GenericFunction.cpp b/tests/functional/GenericFunction.cpp index 7b40edfe51..006cc69787 100644 --- a/tests/functional/GenericFunction.cpp +++ b/tests/functional/GenericFunction.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file GenericFunction.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/functional/flex_function.cpp b/tests/functional/flex_function.cpp index f48874fc38..2f79ac2b6f 100644 --- a/tests/functional/flex_function.cpp +++ b/tests/functional/flex_function.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file flex_function.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/functional/memo_function.cpp b/tests/functional/memo_function.cpp index 3eca1ea7e3..7f2bca27a6 100644 --- a/tests/functional/memo_function.cpp +++ b/tests/functional/memo_function.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file memo_function.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** * @note doing any sort of copying of memo_functions seems to give my terminal a stack overflow error (using mingw on windows 10) * @MAM not sure who left this comment about stack overflow on mingw... */ diff --git a/tests/games/Mancala.cpp b/tests/games/Mancala.cpp index 39d490e2fb..fd3fac35fd 100644 --- a/tests/games/Mancala.cpp +++ b/tests/games/Mancala.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Mancala.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/games/Othello.cpp b/tests/games/Othello.cpp index c5a30a785b..3a9783b3b5 100644 --- a/tests/games/Othello.cpp +++ b/tests/games/Othello.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Othello.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/games/Othello8.cpp b/tests/games/Othello8.cpp index d848fe6a7f..f955280ba7 100644 --- a/tests/games/Othello8.cpp +++ b/tests/games/Othello8.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Othello8.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/games/PayoffMatrix.cpp b/tests/games/PayoffMatrix.cpp index a5945968e4..04b84a29e1 100644 --- a/tests/games/PayoffMatrix.cpp +++ b/tests/games/PayoffMatrix.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file PayoffMatrix.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Angle2D.cpp b/tests/geometry/Angle2D.cpp index b1f996164d..edc3ab4f07 100644 --- a/tests/geometry/Angle2D.cpp +++ b/tests/geometry/Angle2D.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Angle2D.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Body2D.cpp b/tests/geometry/Body2D.cpp index 29cd561d28..e900290e07 100644 --- a/tests/geometry/Body2D.cpp +++ b/tests/geometry/Body2D.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Body2D.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/geometry/Circle2D.cpp b/tests/geometry/Circle2D.cpp index 4a8a84b2f1..a5a6b4c9f2 100644 --- a/tests/geometry/Circle2D.cpp +++ b/tests/geometry/Circle2D.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Circle2D.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/geometry/Physics2D.cpp b/tests/geometry/Physics2D.cpp index bf2a70faa0..6e583d088c 100644 --- a/tests/geometry/Physics2D.cpp +++ b/tests/geometry/Physics2D.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Physics2D.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Point2D.cpp b/tests/geometry/Point2D.cpp index 093217a53b..c2c997abfa 100644 --- a/tests/geometry/Point2D.cpp +++ b/tests/geometry/Point2D.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Point2D.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/geometry/Surface.cpp b/tests/geometry/Surface.cpp index 8bdca2af0c..99c18a4167 100644 --- a/tests/geometry/Surface.cpp +++ b/tests/geometry/Surface.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Surface.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Surface2D.cpp b/tests/geometry/Surface2D.cpp index a20d0b559f..ebc25c3710 100644 --- a/tests/geometry/Surface2D.cpp +++ b/tests/geometry/Surface2D.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Surface2D.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/hardware/BitSorter.cpp b/tests/hardware/BitSorter.cpp index 82f9dd0355..1f53606aca 100644 --- a/tests/hardware/BitSorter.cpp +++ b/tests/hardware/BitSorter.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file BitSorter.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/hardware/LinearCode.cpp b/tests/hardware/LinearCode.cpp index 89382af20b..02a08dd1b8 100644 --- a/tests/hardware/LinearCode.cpp +++ b/tests/hardware/LinearCode.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file LinearCode.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/hardware/avida_gp.cpp b/tests/hardware/avida_gp.cpp index 46bc354692..89e27dcc2c 100644 --- a/tests/hardware/avida_gp.cpp +++ b/tests/hardware/avida_gp.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file avida_gp.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/hardware/event_driven_gp.cpp b/tests/hardware/event_driven_gp.cpp index 60d2551c61..657883b27b 100644 --- a/tests/hardware/event_driven_gp.cpp +++ b/tests/hardware/event_driven_gp.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file event_driven_gp.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/io/ContiguousStream.cpp b/tests/io/ContiguousStream.cpp index e1e0877629..7183c31773 100644 --- a/tests/io/ContiguousStream.cpp +++ b/tests/io/ContiguousStream.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ContiguousStream.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/io/File.cpp b/tests/io/File.cpp index 20c9e0a82d..ab625990bf 100644 --- a/tests/io/File.cpp +++ b/tests/io/File.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file File.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/io/MemoryIStream.cpp b/tests/io/MemoryIStream.cpp index 789b22ff97..778ec4abfc 100644 --- a/tests/io/MemoryIStream.cpp +++ b/tests/io/MemoryIStream.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file MemoryIStream.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/io/NullStream.cpp b/tests/io/NullStream.cpp index 97a405198f..0a5c718535 100644 --- a/tests/io/NullStream.cpp +++ b/tests/io/NullStream.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file NullStream.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/io/StreamManager.cpp b/tests/io/StreamManager.cpp index a5a2cfd6c6..c5a95b9c69 100644 --- a/tests/io/StreamManager.cpp +++ b/tests/io/StreamManager.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file StreamManager.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/io/ascii_utils.cpp b/tests/io/ascii_utils.cpp index 82d9580da5..1cba1c57e3 100644 --- a/tests/io/ascii_utils.cpp +++ b/tests/io/ascii_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ascii_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/io/serialize.cpp b/tests/io/serialize.cpp index 5499a1e89f..1f25548c7b 100644 --- a/tests/io/serialize.cpp +++ b/tests/io/serialize.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file serialize.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/matching/MatchBin.cpp b/tests/matching/MatchBin.cpp index d0f46b3d08..f91d184fc5 100644 --- a/tests/matching/MatchBin.cpp +++ b/tests/matching/MatchBin.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file MatchBin.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/matching/MatchBin_logging.cpp b/tests/matching/MatchBin_logging.cpp index 31dfe4d78c..b089907a01 100644 --- a/tests/matching/MatchBin_logging.cpp +++ b/tests/matching/MatchBin_logging.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020 - * - * @file MatchBin_logging.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020 +*/ +/** */ #define EMP_DECORATE(X) [X] diff --git a/tests/matching/MatchDepository.cpp b/tests/matching/MatchDepository.cpp index 815c332c12..79553fdbaf 100644 --- a/tests/matching/MatchDepository.cpp +++ b/tests/matching/MatchDepository.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file MatchDepository.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/matching/RankedSelector.cpp b/tests/matching/RankedSelector.cpp index 7592f86739..65670a20b2 100644 --- a/tests/matching/RankedSelector.cpp +++ b/tests/matching/RankedSelector.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file RankedSelector.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/matching/_DepositoryEntry.cpp b/tests/matching/_DepositoryEntry.cpp index e03023909a..5c314d3693 100644 --- a/tests/matching/_DepositoryEntry.cpp +++ b/tests/matching/_DepositoryEntry.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file _DepositoryEntry.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/matching/matchbin_utils.cpp b/tests/matching/matchbin_utils.cpp index aaf329efb1..030cea5b88 100644 --- a/tests/matching/matchbin_utils.cpp +++ b/tests/matching/matchbin_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020-2021 - * - * @file matchbin_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020-2021 +*/ +/** */ #include diff --git a/tests/math/Distribution.cpp b/tests/math/Distribution.cpp index 0720fe6571..87acbdc339 100644 --- a/tests/math/Distribution.cpp +++ b/tests/math/Distribution.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Distribution.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/math/Random.cpp b/tests/math/Random.cpp index 8182df62dc..e68163b8c8 100644 --- a/tests/math/Random.cpp +++ b/tests/math/Random.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Random.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/math/Range.cpp b/tests/math/Range.cpp index 5bf8efe8a2..794f133aab 100644 --- a/tests/math/Range.cpp +++ b/tests/math/Range.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Range.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/math/combos.cpp b/tests/math/combos.cpp index cff03349f2..00559cd6c2 100644 --- a/tests/math/combos.cpp +++ b/tests/math/combos.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file combos.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/math/distances.cpp b/tests/math/distances.cpp index 32ce90acc4..414e63e01d 100644 --- a/tests/math/distances.cpp +++ b/tests/math/distances.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file distances.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/math/info_theory.cpp b/tests/math/info_theory.cpp index bd1851ee17..f95bff1d69 100644 --- a/tests/math/info_theory.cpp +++ b/tests/math/info_theory.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file info_theory.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/math/math.cpp b/tests/math/math.cpp index b7cc709706..e492a9aa18 100644 --- a/tests/math/math.cpp +++ b/tests/math/math.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file math.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/math/random_utils.cpp b/tests/math/random_utils.cpp index 6fa3c938e7..f12cca38a8 100644 --- a/tests/math/random_utils.cpp +++ b/tests/math/random_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file random_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/math/sequence_utils.cpp b/tests/math/sequence_utils.cpp index 488caf47c0..05fae07e93 100644 --- a/tests/math/sequence_utils.cpp +++ b/tests/math/sequence_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file sequence_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/math/spatial_stats.cpp b/tests/math/spatial_stats.cpp index 782623368b..56b1d1d3de 100644 --- a/tests/math/spatial_stats.cpp +++ b/tests/math/spatial_stats.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file spatial_stats.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/math/stats.cpp b/tests/math/stats.cpp index aa3ffbbab6..cdcb3b07be 100644 --- a/tests/math/stats.cpp +++ b/tests/math/stats.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file stats.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/meta/ConceptWrapper.cpp b/tests/meta/ConceptWrapper.cpp index 979499fa01..14250996ec 100644 --- a/tests/meta/ConceptWrapper.cpp +++ b/tests/meta/ConceptWrapper.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ConceptWrapper.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/meta/TypeID.cpp b/tests/meta/TypeID.cpp index e5200e4edd..d8d3b1d335 100644 --- a/tests/meta/TypeID.cpp +++ b/tests/meta/TypeID.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file TypeID.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/meta/TypePack.cpp b/tests/meta/TypePack.cpp index 276f584b7b..dd927dad45 100644 --- a/tests/meta/TypePack.cpp +++ b/tests/meta/TypePack.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file TypePack.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/meta/ValPack.cpp b/tests/meta/ValPack.cpp index 260a9ee242..c6859fbffe 100644 --- a/tests/meta/ValPack.cpp +++ b/tests/meta/ValPack.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ValPack.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/meta/macro_math.cpp b/tests/meta/macro_math.cpp index 5885e5d233..4a4b351c18 100644 --- a/tests/meta/macro_math.cpp +++ b/tests/meta/macro_math.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 - * - * @file macro_math.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2018 +*/ +/** */ #include diff --git a/tests/meta/macros.cpp b/tests/meta/macros.cpp index da217fc8f7..aab1e4ea27 100644 --- a/tests/meta/macros.cpp +++ b/tests/meta/macros.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020 - * - * @file macros.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020 +*/ +/** */ #include diff --git a/tests/meta/meta.cpp b/tests/meta/meta.cpp index 4b48702182..2a5aacf78f 100644 --- a/tests/meta/meta.cpp +++ b/tests/meta/meta.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file meta.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/meta/reflection.cpp b/tests/meta/reflection.cpp index bf149e871d..e0e32d8b99 100644 --- a/tests/meta/reflection.cpp +++ b/tests/meta/reflection.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file reflection.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/meta/type_traits.cpp b/tests/meta/type_traits.cpp index 92ad1a6bd1..8b27ed927e 100644 --- a/tests/meta/type_traits.cpp +++ b/tests/meta/type_traits.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file type_traits.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/scholar/Author.cpp b/tests/scholar/Author.cpp index 679aca915a..54a56a45b5 100644 --- a/tests/scholar/Author.cpp +++ b/tests/scholar/Author.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Author.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/scholar/Bibliography.cpp b/tests/scholar/Bibliography.cpp index f3c8c41746..2329849658 100644 --- a/tests/scholar/Bibliography.cpp +++ b/tests/scholar/Bibliography.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Bibliography.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/scholar/Citation.cpp b/tests/scholar/Citation.cpp index 7de72a1c4e..8798c43eb7 100644 --- a/tests/scholar/Citation.cpp +++ b/tests/scholar/Citation.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Citation.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/testing/unit_tests.cpp b/tests/testing/unit_tests.cpp index f7cc7fe056..cbb0146c71 100644 --- a/tests/testing/unit_tests.cpp +++ b/tests/testing/unit_tests.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file unit_tests.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/SolveState.cpp b/tests/tools/SolveState.cpp index 4567fdd2ef..c11d6626ba 100644 --- a/tests/tools/SolveState.cpp +++ b/tests/tools/SolveState.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file SolveState.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/tools/TypeTracker.cpp b/tests/tools/TypeTracker.cpp index 81b302d40b..67a19c6a90 100644 --- a/tests/tools/TypeTracker.cpp +++ b/tests/tools/TypeTracker.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file TypeTracker.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/tools/attrs.cpp b/tests/tools/attrs.cpp index c6918090ab..f2f0b91a42 100644 --- a/tests/tools/attrs.cpp +++ b/tests/tools/attrs.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file attrs.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/hash_namify.cpp b/tests/tools/hash_namify.cpp index d5f3cec7be..7e7291ac9a 100644 --- a/tests/tools/hash_namify.cpp +++ b/tests/tools/hash_namify.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file hash_namify.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/keyname_utils.cpp b/tests/tools/keyname_utils.cpp index e0825523d5..577269a145 100644 --- a/tests/tools/keyname_utils.cpp +++ b/tests/tools/keyname_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file keyname_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/tools/string_utils.cpp b/tests/tools/string_utils.cpp index 1628993ccf..282af2fb73 100644 --- a/tests/tools/string_utils.cpp +++ b/tests/tools/string_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file string_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include "../third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/timing.cpp b/tests/tools/timing.cpp index f0fa91d43a..4cb0c88f4e 100644 --- a/tests/tools/timing.cpp +++ b/tests/tools/timing.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file timing.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/unique.cpp b/tests/tools/unique.cpp index 9bf98b57c0..542a2328f1 100644 --- a/tests/tools/unique.cpp +++ b/tests/tools/unique.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file unique.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/tools/value_utils.cpp b/tests/tools/value_utils.cpp index f61b0094c6..fb1f91c1e9 100644 --- a/tests/tools/value_utils.cpp +++ b/tests/tools/value_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file value_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/web/Card.cpp b/tests/web/Card.cpp index d759516406..129de14ec8 100644 --- a/tests/web/Card.cpp +++ b/tests/web/Card.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Card.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/ClickCollapseDemo.cpp b/tests/web/ClickCollapseDemo.cpp index 3b525c060f..a609b765c8 100644 --- a/tests/web/ClickCollapseDemo.cpp +++ b/tests/web/ClickCollapseDemo.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file ClickCollapseDemo.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** * @brief This file can be used to test triggering a mouse click by the user. * * It appears that .click() can be used to trigger a click. diff --git a/tests/web/ClickCounterDemo.cpp b/tests/web/ClickCounterDemo.cpp index 1c0896b8b6..d44f47449a 100644 --- a/tests/web/ClickCounterDemo.cpp +++ b/tests/web/ClickCounterDemo.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file ClickCounterDemo.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** * @brief This file provides a simple example of clicking a web * element at multiple points within a test. * diff --git a/tests/web/CodeBlock.cpp b/tests/web/CodeBlock.cpp index b3b38695b3..0468960867 100644 --- a/tests/web/CodeBlock.cpp +++ b/tests/web/CodeBlock.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file CodeBlock.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/Collapse.cpp b/tests/web/Collapse.cpp index 5b6392eadc..cf6f090738 100644 --- a/tests/web/Collapse.cpp +++ b/tests/web/Collapse.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Collapse.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/CommentBox.cpp b/tests/web/CommentBox.cpp index 13c143e6d5..3735b06379 100644 --- a/tests/web/CommentBox.cpp +++ b/tests/web/CommentBox.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file CommentBox.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/ConfigPanel.cpp b/tests/web/ConfigPanel.cpp index 00cced7825..b5450975fb 100644 --- a/tests/web/ConfigPanel.cpp +++ b/tests/web/ConfigPanel.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file ConfigPanel.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/Element.cpp b/tests/web/Element.cpp index 2f5670a05f..35bc472f4c 100644 --- a/tests/web/Element.cpp +++ b/tests/web/Element.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Element.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/FontAwesomeIcon.cpp b/tests/web/FontAwesomeIcon.cpp index a4ecb76640..a054d6e34b 100644 --- a/tests/web/FontAwesomeIcon.cpp +++ b/tests/web/FontAwesomeIcon.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file FontAwesomeIcon.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/GetUrlParams.cpp b/tests/web/GetUrlParams.cpp index 7ef5ce7880..8e788150d1 100644 --- a/tests/web/GetUrlParams.cpp +++ b/tests/web/GetUrlParams.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2019 - * - * @file GetUrlParams.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2019 +*/ +/** */ #include diff --git a/tests/web/JSWrap.cpp b/tests/web/JSWrap.cpp index ce41ca2d29..68e0f2a0dd 100644 --- a/tests/web/JSWrap.cpp +++ b/tests/web/JSWrap.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2020 - * - * @file JSWrap.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2015-2020 +*/ +/** */ #include diff --git a/tests/web/LoadingIcon.cpp b/tests/web/LoadingIcon.cpp index 70cc1067ec..13c73d8b09 100644 --- a/tests/web/LoadingIcon.cpp +++ b/tests/web/LoadingIcon.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file LoadingIcon.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/LoadingModal.cpp b/tests/web/LoadingModal.cpp index c0104b7d9a..f9eac60f08 100644 --- a/tests/web/LoadingModal.cpp +++ b/tests/web/LoadingModal.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file LoadingModal.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/Modal.cpp b/tests/web/Modal.cpp index 6f08c6451e..558885c495 100644 --- a/tests/web/Modal.cpp +++ b/tests/web/Modal.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Modal.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/ReadoutPanel.cpp b/tests/web/ReadoutPanel.cpp index d86e31b159..48b5419f65 100644 --- a/tests/web/ReadoutPanel.cpp +++ b/tests/web/ReadoutPanel.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ReadoutPanel.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include "emp/base/assert.hpp" diff --git a/tests/web/TextFeed.cpp b/tests/web/TextFeed.cpp index cbc8b1a08c..0008d4040d 100644 --- a/tests/web/TextFeed.cpp +++ b/tests/web/TextFeed.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file TextFeed.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/ToggleSwitch.cpp b/tests/web/ToggleSwitch.cpp index 7a80e8b12c..642435f89b 100644 --- a/tests/web/ToggleSwitch.cpp +++ b/tests/web/ToggleSwitch.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file ToggleSwitch.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/ValueBox.cpp b/tests/web/ValueBox.cpp index d3b89581de..826d32bf61 100644 --- a/tests/web/ValueBox.cpp +++ b/tests/web/ValueBox.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file ValueBox.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ #include diff --git a/tests/web/Widget.cpp b/tests/web/Widget.cpp index 90a7d72983..1597d815b1 100644 --- a/tests/web/Widget.cpp +++ b/tests/web/Widget.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 - * - * @file Widget.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2020 +*/ +/** */ #include diff --git a/tests/web/assets/Config.hpp b/tests/web/assets/Config.hpp index da638e16da..7ae4a58586 100644 --- a/tests/web/assets/Config.hpp +++ b/tests/web/assets/Config.hpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * @date 2021 - * - * @file Config.hpp +*/ +/** * */ diff --git a/tests/web/color_map.cpp b/tests/web/color_map.cpp index 9571263a98..9e16a2022e 100644 --- a/tests/web/color_map.cpp +++ b/tests/web/color_map.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2017 - * - * @file color_map.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2017 +*/ +/** */ #include diff --git a/tests/web/js_utils.cpp b/tests/web/js_utils.cpp index cc7b850d29..fb926055ab 100644 --- a/tests/web/js_utils.cpp +++ b/tests/web/js_utils.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2020 - * - * @file js_utils.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2016-2020 +*/ +/** */ #include diff --git a/tests/web/visualizations.cpp b/tests/web/visualizations.cpp index d29d5af727..59f5039542 100644 --- a/tests/web/visualizations.cpp +++ b/tests/web/visualizations.cpp @@ -1,9 +1,9 @@ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file visualizations.cpp + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ +/** */ // This file is a monstrosity, because including multiple emscripten-generated From 8897cdd84070985b84dd5bbc2e359a0c28bb39a8 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 23 Jun 2023 22:52:41 -0400 Subject: [PATCH 10/80] Remove callout for Status: RELEASE --- doc/library/bits/bits.md | 3 ++- include/emp/base/_assert_macros.hpp | 2 +- include/emp/base/always_assert.hpp | 2 +- include/emp/base/array.hpp | 2 +- include/emp/base/assert.hpp | 2 +- include/emp/base/optional.hpp | 2 +- include/emp/bits/BitArray.hpp | 2 +- include/emp/bits/BitSet.hpp | 2 +- include/emp/bits/BitVector.hpp | 2 +- include/emp/datastructs/tuple_utils.hpp | 2 +- include/emp/debug/alert.hpp | 2 +- include/emp/io/ContiguousStream.hpp | 2 +- include/emp/io/MemoryIStream.hpp | 2 +- include/emp/math/Random.hpp | 2 +- include/emp/math/constants.hpp | 2 +- include/emp/math/random_utils.hpp | 2 +- include/emp/meta/macro_math.hpp | 2 +- include/emp/meta/macros.hpp | 2 +- include/emp/tools/string_utils.hpp | 2 +- 19 files changed, 20 insertions(+), 19 deletions(-) diff --git a/doc/library/bits/bits.md b/doc/library/bits/bits.md index e468987442..4dad8383c9 100644 --- a/doc/library/bits/bits.md +++ b/doc/library/bits/bits.md @@ -21,13 +21,14 @@ ```{eval-rst} .. doxygenfile:: emp/bits/bitset_utils.hpp :project: Empirical - :no-link: + ``` ## BitVector ```{eval-rst} .. doxygenclass:: emp::BitVector + :sections: briefdescription detaileddescription :members: :undoc-members: ``` diff --git a/include/emp/base/_assert_macros.hpp b/include/emp/base/_assert_macros.hpp index b2fe6b8d6a..c6ed59c174 100644 --- a/include/emp/base/_assert_macros.hpp +++ b/include/emp/base/_assert_macros.hpp @@ -5,7 +5,7 @@ */ /** * @brief Helper macros for building proper assert commands. - * @note Status: RELEASE + * Status: RELEASE * */ diff --git a/include/emp/base/always_assert.hpp b/include/emp/base/always_assert.hpp index aacfb36e93..223611eb3c 100644 --- a/include/emp/base/always_assert.hpp +++ b/include/emp/base/always_assert.hpp @@ -5,7 +5,7 @@ */ /** * @brief A more dynamic replacement for standard library asserts. - * @note Status: RELEASE + * Status: RELEASE * * A replacement for the system-level assert.h, called "emp_always_assert" * Added functionality: diff --git a/include/emp/base/array.hpp b/include/emp/base/array.hpp index e039af713e..15886fa676 100644 --- a/include/emp/base/array.hpp +++ b/include/emp/base/array.hpp @@ -5,7 +5,7 @@ */ /** * @brief A drop-in wrapper for std::array; adds on bounds checking in debug mode. - * @note Status: RELEASE + * Status: RELEASE * * If EMP_NDEBUG is set, emp::array is just an alias for std::array. * Otherwise, every time an array is accessed, tests are done to make sure that the diff --git a/include/emp/base/assert.hpp b/include/emp/base/assert.hpp index f341faba59..e8e9c90ffb 100644 --- a/include/emp/base/assert.hpp +++ b/include/emp/base/assert.hpp @@ -5,7 +5,7 @@ */ /** * @brief A more dynamic replacement for standard library asserts. - * @note Status: RELEASE + * Status: RELEASE * * A replacement for the system-level assert.h, called "emp_assert" * Added functionality: diff --git a/include/emp/base/optional.hpp b/include/emp/base/optional.hpp index fb02ad74c9..be1da0a493 100644 --- a/include/emp/base/optional.hpp +++ b/include/emp/base/optional.hpp @@ -5,7 +5,7 @@ */ /** * @brief Audited implementation of std::optional. - * @note Status: RELEASE + * Status: RELEASE * * Drop-in replacements for std::optional. * In debug mode, operator * and operator-> value accesses are checked for undefined behavior. diff --git a/include/emp/bits/BitArray.hpp b/include/emp/bits/BitArray.hpp index 06739a20f5..3b92586288 100644 --- a/include/emp/bits/BitArray.hpp +++ b/include/emp/bits/BitArray.hpp @@ -5,7 +5,7 @@ */ /** * @brief An Array of a fixed number of bits; similar to std::bitset, but with extra bit magic. - * @note Status: RELEASE + * Status: RELEASE * * @todo Some of the functions allow a start bit and end bit; each of these should be checked * to make sure that they will work if the start and end are part of the same byte. One diff --git a/include/emp/bits/BitSet.hpp b/include/emp/bits/BitSet.hpp index e9ed26868c..198dbe4345 100644 --- a/include/emp/bits/BitSet.hpp +++ b/include/emp/bits/BitSet.hpp @@ -5,7 +5,7 @@ */ /** * @brief A drop-in replacement for std::bitset, with additional bit magic features; aliases BitArray. - * @note Status: RELEASE + * Status: RELEASE * */ diff --git a/include/emp/bits/BitVector.hpp b/include/emp/bits/BitVector.hpp index 6c8a3a019f..2b59f64a8d 100644 --- a/include/emp/bits/BitVector.hpp +++ b/include/emp/bits/BitVector.hpp @@ -5,7 +5,7 @@ */ /** * @brief A drop-in replacement for std::vector, with additional bitwise logic features. - * @note Status: RELEASE + * Status: RELEASE * * @note Compile with -O3 and -msse4.2 for fast bit counting. * diff --git a/include/emp/datastructs/tuple_utils.hpp b/include/emp/datastructs/tuple_utils.hpp index 780256ca16..a9328ed146 100644 --- a/include/emp/datastructs/tuple_utils.hpp +++ b/include/emp/datastructs/tuple_utils.hpp @@ -5,7 +5,7 @@ */ /** * @brief Functions to simplify the use of std::tuple - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_DATASTRUCTS_TUPLE_UTILS_HPP_INCLUDE diff --git a/include/emp/debug/alert.hpp b/include/emp/debug/alert.hpp index 8e72b85d23..7260c26926 100644 --- a/include/emp/debug/alert.hpp +++ b/include/emp/debug/alert.hpp @@ -5,7 +5,7 @@ */ /** * @brief Define an Alert function that goes to std::cerr in c++ or to Alert() in Javascript. - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_DEBUG_ALERT_HPP_INCLUDE diff --git a/include/emp/io/ContiguousStream.hpp b/include/emp/io/ContiguousStream.hpp index 46f77a938f..2623612a99 100644 --- a/include/emp/io/ContiguousStream.hpp +++ b/include/emp/io/ContiguousStream.hpp @@ -5,7 +5,7 @@ */ /** * @brief Useful for streaming data to contiguous memory. - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_IO_CONTIGUOUSSTREAM_HPP_INCLUDE diff --git a/include/emp/io/MemoryIStream.hpp b/include/emp/io/MemoryIStream.hpp index 74f28deaba..a1282d8116 100644 --- a/include/emp/io/MemoryIStream.hpp +++ b/include/emp/io/MemoryIStream.hpp @@ -5,7 +5,7 @@ */ /** * @brief Useful for streaming data from contiguous memory. - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_IO_MEMORYISTREAM_HPP_INCLUDE diff --git a/include/emp/math/Random.hpp b/include/emp/math/Random.hpp index 85f4a1ae74..b27aac47d1 100644 --- a/include/emp/math/Random.hpp +++ b/include/emp/math/Random.hpp @@ -5,7 +5,7 @@ */ /** * @brief A versatile and non-patterned pseudo-random-number generator. - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_MATH_RANDOM_HPP_INCLUDE diff --git a/include/emp/math/constants.hpp b/include/emp/math/constants.hpp index e02c1e7a18..865a67c89b 100644 --- a/include/emp/math/constants.hpp +++ b/include/emp/math/constants.hpp @@ -5,7 +5,7 @@ */ /** * @brief Commonly used constant values. - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_MATH_CONSTANTS_HPP_INCLUDE diff --git a/include/emp/math/random_utils.hpp b/include/emp/math/random_utils.hpp index e7062ed649..ef3be54d15 100644 --- a/include/emp/math/random_utils.hpp +++ b/include/emp/math/random_utils.hpp @@ -5,7 +5,7 @@ */ /** * @brief Helper functions for emp::Random for common random tasks. - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_MATH_RANDOM_UTILS_HPP_INCLUDE diff --git a/include/emp/meta/macro_math.hpp b/include/emp/meta/macro_math.hpp index 7f7ccfe6cb..e5be4ec46e 100644 --- a/include/emp/meta/macro_math.hpp +++ b/include/emp/meta/macro_math.hpp @@ -5,7 +5,7 @@ */ /** * @brief Macros to build a pre-processor calculator system. - * @note Status: RELEASE + * Status: RELEASE * * Working macros include: * EMP_INC(A) : converts to result of A+1 diff --git a/include/emp/meta/macros.hpp b/include/emp/meta/macros.hpp index 96a2e7d475..902fa2b62b 100644 --- a/include/emp/meta/macros.hpp +++ b/include/emp/meta/macros.hpp @@ -5,7 +5,7 @@ */ /** * @brief Generally useful macros that can perform cools tricks. - * @note Status: RELEASE + * Status: RELEASE * * * Generally useful macros that can perform cools tricks. As with all macros, use only diff --git a/include/emp/tools/string_utils.hpp b/include/emp/tools/string_utils.hpp index 73ab3e3dec..02adfa6791 100644 --- a/include/emp/tools/string_utils.hpp +++ b/include/emp/tools/string_utils.hpp @@ -5,7 +5,7 @@ */ /** * @brief Simple functions to manipulate strings. - * @note Status: RELEASE + * Status: RELEASE */ #ifndef EMP_TOOLS_STRING_UTILS_HPP_INCLUDE From 0f1e021f45ae5304f8b0c0e4feac5998ce70197e Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 24 Jun 2023 15:24:05 -0400 Subject: [PATCH 11/80] Add file directive back in --- ci/impl/generate_boilerplate_file_docstrings.sh | 6 +++--- include/emp/Evolve/NK-const.hpp | 1 + include/emp/Evolve/NK.hpp | 1 + include/emp/Evolve/OEE.hpp | 1 + include/emp/Evolve/OrgInterface.hpp | 1 + include/emp/Evolve/Resource.hpp | 1 + include/emp/Evolve/StateGrid.hpp | 1 + include/emp/Evolve/Systematics.hpp | 1 + include/emp/Evolve/SystematicsAnalysis.hpp | 1 + include/emp/Evolve/World.hpp | 1 + include/emp/Evolve/World_iterator.hpp | 1 + include/emp/Evolve/World_output.hpp | 1 + include/emp/Evolve/World_reflect.hpp | 1 + include/emp/Evolve/World_select.hpp | 1 + include/emp/Evolve/World_structure.hpp | 1 + include/emp/base/MapProxy.hpp | 1 + include/emp/base/Ptr.hpp | 1 + include/emp/base/_assert_macros.hpp | 1 + include/emp/base/_assert_trigger.hpp | 1 + include/emp/base/_emscripten_assert_trigger.hpp | 1 + include/emp/base/_emscripten_error_trigger.hpp | 1 + include/emp/base/_error_trigger.hpp | 1 + include/emp/base/_is_streamable.hpp | 1 + include/emp/base/_native_assert_trigger.hpp | 1 + include/emp/base/_native_error_trigger.hpp | 1 + include/emp/base/_tdebug_assert_trigger.hpp | 1 + include/emp/base/_tdebug_error_trigger.hpp | 1 + include/emp/base/always_assert.hpp | 1 + include/emp/base/always_assert_warning.hpp | 3 ++- include/emp/base/array.hpp | 1 + include/emp/base/assert.hpp | 1 + include/emp/base/assert_warning.hpp | 1 + include/emp/base/emscripten_assert.hpp | 1 + include/emp/base/error.hpp | 1 + include/emp/base/errors.hpp | 1 + include/emp/base/map.hpp | 1 + include/emp/base/optional.hpp | 1 + include/emp/base/unordered_map.hpp | 1 + include/emp/base/vector.hpp | 1 + include/emp/bits/BitArray.hpp | 1 + include/emp/bits/BitMatrix.hpp | 1 + include/emp/bits/BitSet.hpp | 1 + include/emp/bits/BitVector.hpp | 1 + include/emp/bits/_bitset_helpers.hpp | 1 + include/emp/bits/bitset_utils.hpp | 1 + include/emp/compiler/DFA.hpp | 1 + include/emp/compiler/Lexer.hpp | 1 + include/emp/compiler/NFA.hpp | 1 + include/emp/compiler/RegEx.hpp | 1 + include/emp/compiler/lexer_utils.hpp | 1 + include/emp/config/ArgManager.hpp | 1 + include/emp/config/ConfigManager.hpp | 1 + include/emp/config/SettingCombos.hpp | 1 + include/emp/config/SettingConfig.hpp | 1 + include/emp/config/command_line.hpp | 1 + include/emp/config/config.hpp | 1 + include/emp/config/config_utils.hpp | 1 + include/emp/config/config_web_interface.hpp | 1 + include/emp/control/Action.hpp | 1 + include/emp/control/ActionManager.hpp | 1 + include/emp/control/Signal.hpp | 1 + include/emp/control/SignalControl.hpp | 1 + include/emp/control/SignalManager.hpp | 1 + include/emp/data/DataFile.hpp | 1 + include/emp/data/DataInterface.hpp | 1 + include/emp/data/DataLayout.hpp | 1 + include/emp/data/DataLog.hpp | 1 + include/emp/data/DataManager.hpp | 1 + include/emp/data/DataMap.hpp | 1 + include/emp/data/DataNode.hpp | 1 + include/emp/data/MemoryImage.hpp | 1 + include/emp/data/Trait.hpp | 1 + include/emp/data/VarMap.hpp | 1 + include/emp/datastructs/BloomFilter.hpp | 1 + include/emp/datastructs/Bool.hpp | 1 + include/emp/datastructs/Cache.hpp | 1 + include/emp/datastructs/DynamicString.hpp | 1 + include/emp/datastructs/Graph.hpp | 1 + include/emp/datastructs/IndexMap.hpp | 1 + include/emp/datastructs/QueueCache.hpp | 1 + include/emp/datastructs/SmallFifoMap.hpp | 1 + include/emp/datastructs/SmallVector.hpp | 1 + include/emp/datastructs/StringMap.hpp | 1 + include/emp/datastructs/TimeQueue.hpp | 1 + include/emp/datastructs/TypeMap.hpp | 1 + include/emp/datastructs/UnorderedIndexMap.hpp | 1 + include/emp/datastructs/graph_utils.hpp | 1 + include/emp/datastructs/hash_utils.hpp | 1 + include/emp/datastructs/map_utils.hpp | 1 + include/emp/datastructs/ra_set.hpp | 1 + include/emp/datastructs/reference_vector.hpp | 1 + include/emp/datastructs/set_utils.hpp | 1 + include/emp/datastructs/tuple_struct.hpp | 1 + include/emp/datastructs/tuple_utils.hpp | 1 + include/emp/datastructs/valsort_map.hpp | 1 + include/emp/datastructs/vector_utils.hpp | 1 + include/emp/debug/alert.hpp | 1 + include/emp/debug/debug.hpp | 1 + include/emp/debug/mem_track.hpp | 1 + include/emp/functional/AnyFunction.hpp | 1 + include/emp/functional/FunctionSet.hpp | 1 + include/emp/functional/GenericFunction.hpp | 1 + include/emp/functional/flex_function.hpp | 1 + include/emp/functional/memo_function.hpp | 1 + include/emp/games/Mancala.hpp | 1 + include/emp/games/Othello.hpp | 1 + include/emp/games/Othello8.hpp | 1 + include/emp/games/PayoffMatrix.hpp | 1 + include/emp/geometry/Angle2D.hpp | 1 + include/emp/geometry/Body2D.hpp | 1 + include/emp/geometry/Circle2D.hpp | 1 + include/emp/geometry/Physics2D.hpp | 1 + include/emp/geometry/Point2D.hpp | 1 + include/emp/geometry/Surface.hpp | 1 + include/emp/geometry/Surface2D.hpp | 1 + include/emp/hardware/AvidaCPU_InstLib.hpp | 1 + include/emp/hardware/AvidaGP.hpp | 1 + include/emp/hardware/BitSorter.hpp | 1 + include/emp/hardware/EventDrivenGP.hpp | 1 + include/emp/hardware/EventLib.hpp | 1 + include/emp/hardware/Genome.hpp | 1 + include/emp/hardware/InstLib.hpp | 1 + include/emp/hardware/LinearCode.hpp | 1 + include/emp/hardware/signalgp_utils.hpp | 1 + include/emp/in_progress/BatchConfig.hpp | 1 + include/emp/in_progress/ConfigLexer.hpp | 1 + include/emp/in_progress/ConfigParser.hpp | 1 + include/emp/in_progress/Empower/Empower.hpp | 1 + include/emp/in_progress/Empower/MemoryImage.hpp | 1 + include/emp/in_progress/Empower/Struct.hpp | 1 + include/emp/in_progress/Empower/StructType.hpp | 1 + include/emp/in_progress/Empower/Type.hpp | 1 + include/emp/in_progress/Empower/TypeManager.hpp | 1 + include/emp/in_progress/Empower/Var.hpp | 1 + include/emp/in_progress/Empower/VarInfo.hpp | 1 + include/emp/in_progress/Empower2/Var.hpp | 1 + include/emp/in_progress/Parser.hpp | 1 + include/emp/in_progress/Trait.hpp | 1 + include/emp/in_progress/class.hpp | 1 + include/emp/in_progress/constexpr/ce_array.hpp | 1 + include/emp/in_progress/constexpr/ce_random.hpp | 1 + include/emp/in_progress/constexpr/ce_string.hpp | 1 + include/emp/in_progress/fixed.hpp | 1 + include/emp/in_progress/struct.hpp | 1 + include/emp/io/ContiguousStream.hpp | 1 + include/emp/io/File.hpp | 1 + include/emp/io/MemoryIStream.hpp | 1 + include/emp/io/NullStream.hpp | 1 + include/emp/io/StreamManager.hpp | 1 + include/emp/io/ascii_utils.hpp | 1 + include/emp/io/serialize.hpp | 1 + include/emp/io/serialize_macros.hpp | 1 + include/emp/matching/MatchBin.hpp | 1 + include/emp/matching/MatchDepository.hpp | 1 + include/emp/matching/_DepositoryEntry.hpp | 1 + include/emp/matching/matchbin_metrics.hpp | 1 + include/emp/matching/matchbin_regulators.hpp | 1 + include/emp/matching/matchbin_selectors.hpp | 1 + include/emp/matching/matchbin_utils.hpp | 1 + include/emp/matching/regulators/PlusCountdownRegulator.hpp | 1 + include/emp/matching/selectors_static/RankedSelector.hpp | 1 + include/emp/math/Distribution.hpp | 1 + include/emp/math/Fraction.hpp | 1 + include/emp/math/Random.hpp | 1 + include/emp/math/Range.hpp | 1 + include/emp/math/combos.hpp | 1 + include/emp/math/constants.hpp | 1 + include/emp/math/distances.hpp | 1 + include/emp/math/info_theory.hpp | 1 + include/emp/math/math.hpp | 1 + include/emp/math/random_utils.hpp | 1 + include/emp/math/sequence_utils.hpp | 1 + include/emp/math/spatial_stats.hpp | 1 + include/emp/math/stats.hpp | 1 + include/emp/meta/ConceptWrapper.hpp | 1 + include/emp/meta/TypeID.hpp | 1 + include/emp/meta/TypePack.hpp | 1 + include/emp/meta/ValPack.hpp | 1 + include/emp/meta/macro_math.hpp | 1 + include/emp/meta/macros.hpp | 1 + include/emp/meta/meta.hpp | 1 + include/emp/meta/reflection.hpp | 1 + include/emp/meta/type_traits.hpp | 1 + include/emp/polyfill/span.hpp | 1 + include/emp/prefab/Card.hpp | 1 + include/emp/prefab/CodeBlock.hpp | 1 + include/emp/prefab/Collapse.hpp | 1 + include/emp/prefab/CommentBox.hpp | 1 + include/emp/prefab/ConfigPanel.hpp | 1 + include/emp/prefab/FontAwesomeIcon.hpp | 1 + include/emp/prefab/LoadingIcon.hpp | 1 + include/emp/prefab/LoadingModal.hpp | 1 + include/emp/prefab/Modal.hpp | 1 + include/emp/prefab/ReadoutPanel.hpp | 1 + include/emp/prefab/ToggleSwitch.hpp | 1 + include/emp/prefab/ValueBox.hpp | 1 + include/emp/scholar/Author.hpp | 1 + include/emp/scholar/Bibliography.hpp | 1 + include/emp/scholar/Citation.hpp | 1 + include/emp/testing/unit_tests.hpp | 1 + include/emp/tools/SolveState.hpp | 1 + include/emp/tools/TypeTracker.hpp | 1 + include/emp/tools/attrs.hpp | 1 + include/emp/tools/hash_namify.hpp | 1 + include/emp/tools/keyname_utils.hpp | 1 + include/emp/tools/string_utils.hpp | 1 + include/emp/tools/timing.hpp | 1 + include/emp/tools/unique.hpp | 1 + include/emp/tools/value_utils.hpp | 1 + include/emp/web/Animate.hpp | 1 + include/emp/web/Attributes.hpp | 1 + include/emp/web/Button.hpp | 1 + include/emp/web/Canvas.hpp | 1 + include/emp/web/CanvasAction.hpp | 1 + include/emp/web/CanvasShape.hpp | 1 + include/emp/web/Div.hpp | 1 + include/emp/web/DocuExtras.hpp | 1 + include/emp/web/Document.hpp | 1 + include/emp/web/Element.hpp | 1 + include/emp/web/FileInput.hpp | 1 + include/emp/web/Font.hpp | 1 + include/emp/web/Image.hpp | 1 + include/emp/web/Input.hpp | 1 + include/emp/web/JSWrap.hpp | 1 + include/emp/web/KeypressManager.hpp | 1 + include/emp/web/Listeners.hpp | 1 + include/emp/web/NodeDomShim.hpp | 1 + include/emp/web/RawImage.hpp | 1 + include/emp/web/Selector.hpp | 1 + include/emp/web/Style.hpp | 1 + include/emp/web/Table.hpp | 1 + include/emp/web/Text.hpp | 1 + include/emp/web/TextArea.hpp | 1 + include/emp/web/TextFeed.hpp | 1 + include/emp/web/Tween.hpp | 1 + include/emp/web/UrlParams.hpp | 1 + include/emp/web/Widget.hpp | 1 + include/emp/web/WidgetExtras.hpp | 1 + include/emp/web/_FacetedWidget.hpp | 1 + include/emp/web/_MochaTestRunner.hpp | 1 + include/emp/web/_TableCell.hpp | 1 + include/emp/web/_TableCol.hpp | 1 + include/emp/web/_TableColGroup.hpp | 1 + include/emp/web/_TableRow.hpp | 1 + include/emp/web/_TableRowGroup.hpp | 1 + include/emp/web/canvas_utils.hpp | 1 + include/emp/web/color_map.hpp | 1 + include/emp/web/commands.hpp | 1 + include/emp/web/d3/axis.hpp | 1 + include/emp/web/d3/d3_init.hpp | 1 + include/emp/web/d3/dataset.hpp | 1 + include/emp/web/d3/histogram.hpp | 1 + include/emp/web/d3/layout.hpp | 1 + include/emp/web/d3/scales.hpp | 1 + include/emp/web/d3/selection.hpp | 1 + include/emp/web/d3/svg_shapes.hpp | 1 + include/emp/web/d3/utils.hpp | 1 + include/emp/web/d3/visual_elements.hpp | 1 + include/emp/web/d3/visualizations.hpp | 1 + include/emp/web/emfunctions.hpp | 1 + include/emp/web/events.hpp | 1 + include/emp/web/init.hpp | 1 + include/emp/web/js_utils.hpp | 1 + include/emp/web/web.hpp | 1 + 264 files changed, 267 insertions(+), 4 deletions(-) diff --git a/ci/impl/generate_boilerplate_file_docstrings.sh b/ci/impl/generate_boilerplate_file_docstrings.sh index 55cb004cb6..8157495c28 100755 --- a/ci/impl/generate_boilerplate_file_docstrings.sh +++ b/ci/impl/generate_boilerplate_file_docstrings.sh @@ -26,11 +26,11 @@ for filename in $(cd include && find -- * -name '*.hpp' -type f); do sed -i '5s|^.*$|*/|' "include/${filename}" # only match if a @brief isn't currently in place # adapted from https://stackoverflow.com/a/5334825 - sed -i '6s|^.*$|/**|' "include/${filename}" - sed -i "/^ \* @brief /b; 7s/^.*\$/ * @brief TODO./" "include/${filename}" + sed -i '6s|^.*$|/**\n * @file|' "include/${filename}" + sed -i "/^ \* @brief /b; 8s/^.*\$/ * @brief TODO./" "include/${filename}" # only match empty lines # add extra * to replace later with */ when constructing fresh - sed -i '8s/^$/ */' "include/${filename}" + sed -i '9s/^$/ */' "include/${filename}" # close boilerplate file docstring # must accomodate possible additional content in docstring diff --git a/include/emp/Evolve/NK-const.hpp b/include/emp/Evolve/NK-const.hpp index 58526a6ad1..39bc66ee6d 100644 --- a/include/emp/Evolve/NK-const.hpp +++ b/include/emp/Evolve/NK-const.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief This file provides code to build NK landscapes, setup at compile time.. * * Knowing the size of N and K at compile time allow for slightly more optimized code, at the diff --git a/include/emp/Evolve/NK.hpp b/include/emp/Evolve/NK.hpp index 8ac638c63c..95851b742e 100644 --- a/include/emp/Evolve/NK.hpp +++ b/include/emp/Evolve/NK.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief This file provides code to build NK-based algorithms. * * Two version of landscapes are provided. NKLandscape pre-calculates the entire landscape, for diff --git a/include/emp/Evolve/OEE.hpp b/include/emp/Evolve/OEE.hpp index f5cb94dc3e..5a7e139801 100644 --- a/include/emp/Evolve/OEE.hpp +++ b/include/emp/Evolve/OEE.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/Evolve/OrgInterface.hpp b/include/emp/Evolve/OrgInterface.hpp index 83cdb0380f..513bd4bfca 100644 --- a/include/emp/Evolve/OrgInterface.hpp +++ b/include/emp/Evolve/OrgInterface.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief An interface between an organism and the outside world. * @note Status: PLANNING */ diff --git a/include/emp/Evolve/Resource.hpp b/include/emp/Evolve/Resource.hpp index 7b21aaf889..c1c87f5b56 100644 --- a/include/emp/Evolve/Resource.hpp +++ b/include/emp/Evolve/Resource.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief Implement resource-based selection. * * diff --git a/include/emp/Evolve/StateGrid.hpp b/include/emp/Evolve/StateGrid.hpp index 4446ee0355..ea36359c79 100644 --- a/include/emp/Evolve/StateGrid.hpp +++ b/include/emp/Evolve/StateGrid.hpp @@ -4,6 +4,7 @@ * date: 2017-2018. */ /** + * @file * @brief StateGrid maintains a rectilinear grid that agents can traverse. * * State grids are a matrix of values, representing states of a 2D environment that an organism diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 2e77147073..32edb585e4 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief Track genotypes, species, clades, or lineages of organisms in a world. * * diff --git a/include/emp/Evolve/SystematicsAnalysis.hpp b/include/emp/Evolve/SystematicsAnalysis.hpp index 0bdbc7e000..11bde6d3a7 100644 --- a/include/emp/Evolve/SystematicsAnalysis.hpp +++ b/include/emp/Evolve/SystematicsAnalysis.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/Evolve/World.hpp b/include/emp/Evolve/World.hpp index cd516bf79a..54f2b9c1f8 100644 --- a/include/emp/Evolve/World.hpp +++ b/include/emp/Evolve/World.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief Definition of a base class for a World template for use in evolutionary algorithms. * * A definition of the emp::World template, linking in specialized file handling, iterators, diff --git a/include/emp/Evolve/World_iterator.hpp b/include/emp/Evolve/World_iterator.hpp index 7832c9075d..4ca64405c2 100644 --- a/include/emp/Evolve/World_iterator.hpp +++ b/include/emp/Evolve/World_iterator.hpp @@ -4,6 +4,7 @@ * date: 2017-2021. */ /** + * @file * @brief This file defines iterators for use with emp::World objects. * * @note Originally called PopulationIterator.h diff --git a/include/emp/Evolve/World_output.hpp b/include/emp/Evolve/World_output.hpp index af7687a7de..e3ab82ae19 100644 --- a/include/emp/Evolve/World_output.hpp +++ b/include/emp/Evolve/World_output.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. * * This file contains functions for adding additional data files to Worlds. diff --git a/include/emp/Evolve/World_reflect.hpp b/include/emp/Evolve/World_reflect.hpp index abc7c7e6ab..63e0082322 100644 --- a/include/emp/Evolve/World_reflect.hpp +++ b/include/emp/Evolve/World_reflect.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief Handle reflection on organisms to setup reasonable defaults in World. * * @note None of the functions defined here should be called from outside the world object; diff --git a/include/emp/Evolve/World_select.hpp b/include/emp/Evolve/World_select.hpp index 6e800a6ef6..a0c93e77db 100644 --- a/include/emp/Evolve/World_select.hpp +++ b/include/emp/Evolve/World_select.hpp @@ -4,6 +4,7 @@ * date: 2017-2021. */ /** + * @file * @brief Functions for popular selection methods applied to worlds. */ diff --git a/include/emp/Evolve/World_structure.hpp b/include/emp/Evolve/World_structure.hpp index 5796a31d35..88ff392857 100644 --- a/include/emp/Evolve/World_structure.hpp +++ b/include/emp/Evolve/World_structure.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief Functions for popular world structure methods. */ diff --git a/include/emp/base/MapProxy.hpp b/include/emp/base/MapProxy.hpp index 5c216a041f..09ab236757 100644 --- a/include/emp/base/MapProxy.hpp +++ b/include/emp/base/MapProxy.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief A proxy for indecies returned from any map type to ensure they are initialized. * @note Status: ALPHA */ diff --git a/include/emp/base/Ptr.hpp b/include/emp/base/Ptr.hpp index 0e36438c13..9ed0e0f14e 100644 --- a/include/emp/base/Ptr.hpp +++ b/include/emp/base/Ptr.hpp @@ -4,6 +4,7 @@ * date: 2016-2020. */ /** + * @file * @brief A wrapper for pointers that does careful memory tracking (but only in debug mode). * @note Status: BETA * diff --git a/include/emp/base/_assert_macros.hpp b/include/emp/base/_assert_macros.hpp index c6ed59c174..a403b06b4c 100644 --- a/include/emp/base/_assert_macros.hpp +++ b/include/emp/base/_assert_macros.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Helper macros for building proper assert commands. * Status: RELEASE * diff --git a/include/emp/base/_assert_trigger.hpp b/include/emp/base/_assert_trigger.hpp index a199d68aae..a586af1e3f 100644 --- a/include/emp/base/_assert_trigger.hpp +++ b/include/emp/base/_assert_trigger.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief Assert trigger implementation selector. * @note For internal use. */ diff --git a/include/emp/base/_emscripten_assert_trigger.hpp b/include/emp/base/_emscripten_assert_trigger.hpp index db652cc49e..cac774cd39 100644 --- a/include/emp/base/_emscripten_assert_trigger.hpp +++ b/include/emp/base/_emscripten_assert_trigger.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief Assert trigger implementation. * @note For internal use. */ diff --git a/include/emp/base/_emscripten_error_trigger.hpp b/include/emp/base/_emscripten_error_trigger.hpp index 678b7b94f2..b8a1930c3f 100644 --- a/include/emp/base/_emscripten_error_trigger.hpp +++ b/include/emp/base/_emscripten_error_trigger.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Terminating error trigger implementation. * @note For internal use. * @TODO Reflect error message to browser (e.g., as an alert) diff --git a/include/emp/base/_error_trigger.hpp b/include/emp/base/_error_trigger.hpp index dfe60cb2a4..b0815eb83d 100644 --- a/include/emp/base/_error_trigger.hpp +++ b/include/emp/base/_error_trigger.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Error trigger implementation selector * @note For internal use. */ diff --git a/include/emp/base/_is_streamable.hpp b/include/emp/base/_is_streamable.hpp index 16ac8600c9..ee5aa908ac 100644 --- a/include/emp/base/_is_streamable.hpp +++ b/include/emp/base/_is_streamable.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief Test at compile time whether a type can be streamed. * @note This header is for internal use to preserve levelization. * Include meta/type_traits.hpp to use is_streamable. diff --git a/include/emp/base/_native_assert_trigger.hpp b/include/emp/base/_native_assert_trigger.hpp index 4d37548fd9..3e7b2c1511 100644 --- a/include/emp/base/_native_assert_trigger.hpp +++ b/include/emp/base/_native_assert_trigger.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief Native assert trigger implementation. * @note For internal use. */ diff --git a/include/emp/base/_native_error_trigger.hpp b/include/emp/base/_native_error_trigger.hpp index 09804d79b3..339a4fc7a4 100644 --- a/include/emp/base/_native_error_trigger.hpp +++ b/include/emp/base/_native_error_trigger.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Terminating error trigger implementation. * @note For internal use. */ diff --git a/include/emp/base/_tdebug_assert_trigger.hpp b/include/emp/base/_tdebug_assert_trigger.hpp index 2861a7fce6..7c2289a435 100644 --- a/include/emp/base/_tdebug_assert_trigger.hpp +++ b/include/emp/base/_tdebug_assert_trigger.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief Non-terminating assert trigger implementation for unit testing. * @note For internal use. */ diff --git a/include/emp/base/_tdebug_error_trigger.hpp b/include/emp/base/_tdebug_error_trigger.hpp index ff833f384c..8b30e72d8b 100644 --- a/include/emp/base/_tdebug_error_trigger.hpp +++ b/include/emp/base/_tdebug_error_trigger.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Non-terminating error trigger implementation for unit testing. * @note For internal use. */ diff --git a/include/emp/base/always_assert.hpp b/include/emp/base/always_assert.hpp index 223611eb3c..fe06b461e3 100644 --- a/include/emp/base/always_assert.hpp +++ b/include/emp/base/always_assert.hpp @@ -4,6 +4,7 @@ * date: 2020-2021. */ /** + * @file * @brief A more dynamic replacement for standard library asserts. * Status: RELEASE * diff --git a/include/emp/base/always_assert_warning.hpp b/include/emp/base/always_assert_warning.hpp index 4a33adad9e..3fd557b1c9 100644 --- a/include/emp/base/always_assert_warning.hpp +++ b/include/emp/base/always_assert_warning.hpp @@ -1,9 +1,10 @@ /* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020. + * date: 2023 */ /** + * @file * @brief A more dynamic replacement for standard library asserts. * @note Status: RELEASE * diff --git a/include/emp/base/array.hpp b/include/emp/base/array.hpp index 15886fa676..a52c71d579 100644 --- a/include/emp/base/array.hpp +++ b/include/emp/base/array.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief A drop-in wrapper for std::array; adds on bounds checking in debug mode. * Status: RELEASE * diff --git a/include/emp/base/assert.hpp b/include/emp/base/assert.hpp index e8e9c90ffb..4148807ff3 100644 --- a/include/emp/base/assert.hpp +++ b/include/emp/base/assert.hpp @@ -4,6 +4,7 @@ * date: 2016-2020. */ /** + * @file * @brief A more dynamic replacement for standard library asserts. * Status: RELEASE * diff --git a/include/emp/base/assert_warning.hpp b/include/emp/base/assert_warning.hpp index 6c476bdeeb..92935f65f5 100644 --- a/include/emp/base/assert_warning.hpp +++ b/include/emp/base/assert_warning.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief A non-terminating replacement for standard library asserts. * * A supplement for the system-level assert.h, called "emp_assert_warning" diff --git a/include/emp/base/emscripten_assert.hpp b/include/emp/base/emscripten_assert.hpp index 3c9411ac5d..62fad7cf5b 100644 --- a/include/emp/base/emscripten_assert.hpp +++ b/include/emp/base/emscripten_assert.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief Assert evaluated only in debug mode with Emscripten. */ diff --git a/include/emp/base/error.hpp b/include/emp/base/error.hpp index 1916cfb94c..d5ba39fc32 100644 --- a/include/emp/base/error.hpp +++ b/include/emp/base/error.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Nearly-universal error, to use in place of emp_assert(false, ...). * Aborts program in both debug and release mode, but does NOT terminate in TDEBUG for testing. */ diff --git a/include/emp/base/errors.hpp b/include/emp/base/errors.hpp index a4a8fe90d2..edb74f7b79 100644 --- a/include/emp/base/errors.hpp +++ b/include/emp/base/errors.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Tools to help manage various problems in command-line or Emscripten-based applications. * @note Status: ALPHA * diff --git a/include/emp/base/map.hpp b/include/emp/base/map.hpp index 9f5263489d..61faa7aff1 100644 --- a/include/emp/base/map.hpp +++ b/include/emp/base/map.hpp @@ -4,6 +4,7 @@ * date: 2019-2020. */ /** + * @file * @brief A drop-in wrapper for std::map and std:multimap; makes sure we create vars on access. * @note Status: ALPHA * diff --git a/include/emp/base/optional.hpp b/include/emp/base/optional.hpp index be1da0a493..565890b098 100644 --- a/include/emp/base/optional.hpp +++ b/include/emp/base/optional.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief Audited implementation of std::optional. * Status: RELEASE * diff --git a/include/emp/base/unordered_map.hpp b/include/emp/base/unordered_map.hpp index 37b98a2147..5b0a07e3f2 100644 --- a/include/emp/base/unordered_map.hpp +++ b/include/emp/base/unordered_map.hpp @@ -4,6 +4,7 @@ * date: 2019-2020. */ /** + * @file * @brief A drop-in wrapper for std::unordered_map and unordered_multi_map; makes sure we create vars on access. * @note Status: ALPHA */ diff --git a/include/emp/base/vector.hpp b/include/emp/base/vector.hpp index cce093a8c6..7cdff21de9 100644 --- a/include/emp/base/vector.hpp +++ b/include/emp/base/vector.hpp @@ -4,6 +4,7 @@ * date: 2016-2019. */ /** + * @file * @brief A drop-in wrapper for std::vector; adds on bounds checking in debug mode. * @note Status: BETA * diff --git a/include/emp/bits/BitArray.hpp b/include/emp/bits/BitArray.hpp index 3b92586288..aaa9d54447 100644 --- a/include/emp/bits/BitArray.hpp +++ b/include/emp/bits/BitArray.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief An Array of a fixed number of bits; similar to std::bitset, but with extra bit magic. * Status: RELEASE * diff --git a/include/emp/bits/BitMatrix.hpp b/include/emp/bits/BitMatrix.hpp index e1d917ce70..53c5b49323 100644 --- a/include/emp/bits/BitMatrix.hpp +++ b/include/emp/bits/BitMatrix.hpp @@ -4,6 +4,7 @@ * date: 2016-2021 */ /** + * @file * @brief A COL x ROW matrix of bits and provides easy indexing and manipulation * @note Status: BETA */ diff --git a/include/emp/bits/BitSet.hpp b/include/emp/bits/BitSet.hpp index 198dbe4345..c047a38593 100644 --- a/include/emp/bits/BitSet.hpp +++ b/include/emp/bits/BitSet.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief A drop-in replacement for std::bitset, with additional bit magic features; aliases BitArray. * Status: RELEASE * diff --git a/include/emp/bits/BitVector.hpp b/include/emp/bits/BitVector.hpp index 2b59f64a8d..787f533019 100644 --- a/include/emp/bits/BitVector.hpp +++ b/include/emp/bits/BitVector.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief A drop-in replacement for std::vector, with additional bitwise logic features. * Status: RELEASE * diff --git a/include/emp/bits/_bitset_helpers.hpp b/include/emp/bits/_bitset_helpers.hpp index 3356bef2b6..85292edb52 100644 --- a/include/emp/bits/_bitset_helpers.hpp +++ b/include/emp/bits/_bitset_helpers.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief An internal Empirical class with tools to build collections of bits. */ diff --git a/include/emp/bits/bitset_utils.hpp b/include/emp/bits/bitset_utils.hpp index 13245a4a8e..66528ff07c 100644 --- a/include/emp/bits/bitset_utils.hpp +++ b/include/emp/bits/bitset_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2020. */ /** + * @file * @brief A set of simple functions to manipulate bitsets. * @note Status: BETA */ diff --git a/include/emp/compiler/DFA.hpp b/include/emp/compiler/DFA.hpp index cd7a0be4a8..9a5d7ef232 100644 --- a/include/emp/compiler/DFA.hpp +++ b/include/emp/compiler/DFA.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief A Deterministic Finite Automata simulator. * @note Status: BETA */ diff --git a/include/emp/compiler/Lexer.hpp b/include/emp/compiler/Lexer.hpp index fd7eebfaaa..79ea77a79b 100644 --- a/include/emp/compiler/Lexer.hpp +++ b/include/emp/compiler/Lexer.hpp @@ -4,6 +4,7 @@ * date: 2016-2019. */ /** + * @file * @brief A general-purpose, fast lexer. * @note Status: ALPHA */ diff --git a/include/emp/compiler/NFA.hpp b/include/emp/compiler/NFA.hpp index 764f6fb4b7..6296a1467c 100644 --- a/include/emp/compiler/NFA.hpp +++ b/include/emp/compiler/NFA.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief A Non-deterministic Finite Automata simulator * @note Status: BETA * diff --git a/include/emp/compiler/RegEx.hpp b/include/emp/compiler/RegEx.hpp index 4bb5455fb3..ad35a2e09e 100644 --- a/include/emp/compiler/RegEx.hpp +++ b/include/emp/compiler/RegEx.hpp @@ -4,6 +4,7 @@ * date: 2016-2019. */ /** + * @file * @brief Basic regular expression handler. * @note Status: BETA * diff --git a/include/emp/compiler/lexer_utils.hpp b/include/emp/compiler/lexer_utils.hpp index 4102c1cc70..24e80e4274 100644 --- a/include/emp/compiler/lexer_utils.hpp +++ b/include/emp/compiler/lexer_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief A set of utilities to convert between NFAs and DFAs * @note Status: BETA */ diff --git a/include/emp/config/ArgManager.hpp b/include/emp/config/ArgManager.hpp index 72e975288a..2d3fdee2e0 100644 --- a/include/emp/config/ArgManager.hpp +++ b/include/emp/config/ArgManager.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief A tool for sythesizing command-line arguments, URL query params, and config files. * @note Status: BETA */ diff --git a/include/emp/config/ConfigManager.hpp b/include/emp/config/ConfigManager.hpp index 6680abdc37..c8e8afb458 100644 --- a/include/emp/config/ConfigManager.hpp +++ b/include/emp/config/ConfigManager.hpp @@ -4,6 +4,7 @@ * date: 2016 */ /** + * @file * @brief The ConfigManager templated class handles the building and configuration of new objects * of the target type. * diff --git a/include/emp/config/SettingCombos.hpp b/include/emp/config/SettingCombos.hpp index 916fb9ca28..ead6a21234 100644 --- a/include/emp/config/SettingCombos.hpp +++ b/include/emp/config/SettingCombos.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A tool for exploring all parameter combinations * @note Status: ALPHA */ diff --git a/include/emp/config/SettingConfig.hpp b/include/emp/config/SettingConfig.hpp index 0937399dd0..298a3300db 100644 --- a/include/emp/config/SettingConfig.hpp +++ b/include/emp/config/SettingConfig.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A tool for collecting settings, including from files and the command line. * @note Status: DEPRECATED! */ diff --git a/include/emp/config/command_line.hpp b/include/emp/config/command_line.hpp index b50b54c893..36a30a3ca0 100644 --- a/include/emp/config/command_line.hpp +++ b/include/emp/config/command_line.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief This file contains tools for dealing with command-line arguments (argv and argc). * * Functions here include: diff --git a/include/emp/config/config.hpp b/include/emp/config/config.hpp index 70af8f3eea..5e15b8540e 100644 --- a/include/emp/config/config.hpp +++ b/include/emp/config/config.hpp @@ -4,6 +4,7 @@ * date: 2016-2019. */ /** + * @file * @brief Maintains a set of configuration options. * * This file defines a master configuration option Config, whose values can be loaded diff --git a/include/emp/config/config_utils.hpp b/include/emp/config/config_utils.hpp index fa4d930675..522ac4fc17 100644 --- a/include/emp/config/config_utils.hpp +++ b/include/emp/config/config_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Helper functions for working with emp::Config objects. * */ diff --git a/include/emp/config/config_web_interface.hpp b/include/emp/config/config_web_interface.hpp index 0a1556a6a3..7fcdaf5459 100644 --- a/include/emp/config/config_web_interface.hpp +++ b/include/emp/config/config_web_interface.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/control/Action.hpp b/include/emp/control/Action.hpp index b475bbbe27..148384052c 100644 --- a/include/emp/control/Action.hpp +++ b/include/emp/control/Action.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief A mechanism to abstract functions from their underlying type and provide run-time names. * @note Status: Beta * diff --git a/include/emp/control/ActionManager.hpp b/include/emp/control/ActionManager.hpp index e5aa50f0b1..4ba1438e94 100644 --- a/include/emp/control/ActionManager.hpp +++ b/include/emp/control/ActionManager.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief ActionManager collects sets of Actions to be looked up or manipulated later. * @note Status: Beta */ diff --git a/include/emp/control/Signal.hpp b/include/emp/control/Signal.hpp index 00b166524a..27a04188af 100644 --- a/include/emp/control/Signal.hpp +++ b/include/emp/control/Signal.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Allow functions to be bundled (as Actions) and triggered enmasse. * @note Status: Beta * diff --git a/include/emp/control/SignalControl.hpp b/include/emp/control/SignalControl.hpp index 672281e0c6..c9bc8dc1c2 100644 --- a/include/emp/control/SignalControl.hpp +++ b/include/emp/control/SignalControl.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief The SignalControl class manages all of the signals and actions, linking them together * upon request (by name, base class, or derived class). * diff --git a/include/emp/control/SignalManager.hpp b/include/emp/control/SignalManager.hpp index 076c4a3e05..8699f8ed37 100644 --- a/include/emp/control/SignalManager.hpp +++ b/include/emp/control/SignalManager.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief This file defines the SignalManager class, which collects sets of Signals to be looked up * or manipulated later. */ diff --git a/include/emp/data/DataFile.hpp b/include/emp/data/DataFile.hpp index 2af39b8f5b..150911fe28 100644 --- a/include/emp/data/DataFile.hpp +++ b/include/emp/data/DataFile.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief DataFile objects use DataNode objects to dynamically fill out file contents. */ diff --git a/include/emp/data/DataInterface.hpp b/include/emp/data/DataInterface.hpp index a7f80ee2af..a767c949ea 100644 --- a/include/emp/data/DataInterface.hpp +++ b/include/emp/data/DataInterface.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief DataInterface is a *generic* interface to a DataNode. */ diff --git a/include/emp/data/DataLayout.hpp b/include/emp/data/DataLayout.hpp index 316ba87061..ade3d4d445 100644 --- a/include/emp/data/DataLayout.hpp +++ b/include/emp/data/DataLayout.hpp @@ -4,6 +4,7 @@ * date: 2019. */ /** + * @file * @brief A mapping of names to variables stored in a MemoryImage. * @note Status: ALPHA */ diff --git a/include/emp/data/DataLog.hpp b/include/emp/data/DataLog.hpp index 8875ef33c5..8a1ff33f4e 100644 --- a/include/emp/data/DataLog.hpp +++ b/include/emp/data/DataLog.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Tools for processing a single set of data. * @note Status: ALPHA * diff --git a/include/emp/data/DataManager.hpp b/include/emp/data/DataManager.hpp index 170b8852f2..be24e4869a 100644 --- a/include/emp/data/DataManager.hpp +++ b/include/emp/data/DataManager.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief DataManager handles a set of DataNode objects with the same tracking settings. */ diff --git a/include/emp/data/DataMap.hpp b/include/emp/data/DataMap.hpp index 9d20583555..6891935a7f 100644 --- a/include/emp/data/DataMap.hpp +++ b/include/emp/data/DataMap.hpp @@ -4,6 +4,7 @@ * date: 2018-2021. */ /** + * @file * @brief A DataMap links names to arbitrary object types. * @note Status: ALPHA * diff --git a/include/emp/data/DataNode.hpp b/include/emp/data/DataNode.hpp index 0b707067f1..7e150fbb42 100644 --- a/include/emp/data/DataNode.hpp +++ b/include/emp/data/DataNode.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief DataNode objects track a specific type of data over the course of a run. * * Collection: New data can be pushed or pulled. diff --git a/include/emp/data/MemoryImage.hpp b/include/emp/data/MemoryImage.hpp index 4f7f9f9a53..bec14e3164 100644 --- a/include/emp/data/MemoryImage.hpp +++ b/include/emp/data/MemoryImage.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief A managed set of Bytes to store any kind of data. * @note Status: ALPHA * diff --git a/include/emp/data/Trait.hpp b/include/emp/data/Trait.hpp index 7498b5f8e7..ef5844591f 100644 --- a/include/emp/data/Trait.hpp +++ b/include/emp/data/Trait.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief Directly measure a target quality about a type of object. * * These objects are able to measure a specific trait on another object. They diff --git a/include/emp/data/VarMap.hpp b/include/emp/data/VarMap.hpp index 51a9a7a52e..73c940d4be 100644 --- a/include/emp/data/VarMap.hpp +++ b/include/emp/data/VarMap.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief VarMaps track arbitrary data by name (slow) or id (faster). * @note Status: ALPHA */ diff --git a/include/emp/datastructs/BloomFilter.hpp b/include/emp/datastructs/BloomFilter.hpp index 0fc0ecbfb2..288fd035a7 100644 --- a/include/emp/datastructs/BloomFilter.hpp +++ b/include/emp/datastructs/BloomFilter.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief A Bloom filter implementation * * @note This file is included in Empirical (https://github.com/devosoft/Empirical) for convenience. diff --git a/include/emp/datastructs/Bool.hpp b/include/emp/datastructs/Bool.hpp index 01c39cc576..44ebd30afc 100644 --- a/include/emp/datastructs/Bool.hpp +++ b/include/emp/datastructs/Bool.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A bool representation that doesn't trip up std::vector * @note Status: ALPHA * diff --git a/include/emp/datastructs/Cache.hpp b/include/emp/datastructs/Cache.hpp index a0d640b19d..0dbb05c6e6 100644 --- a/include/emp/datastructs/Cache.hpp +++ b/include/emp/datastructs/Cache.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief similar to an std::unordered_map, but all lookups come with a function to generate the result should the lookup fail. * @note Status: BETA */ diff --git a/include/emp/datastructs/DynamicString.hpp b/include/emp/datastructs/DynamicString.hpp index 1a1eab1855..23afd8f187 100644 --- a/include/emp/datastructs/DynamicString.hpp +++ b/include/emp/datastructs/DynamicString.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief A string handler where sections update dynamically based on functions. * @note Status: BETA */ diff --git a/include/emp/datastructs/Graph.hpp b/include/emp/datastructs/Graph.hpp index b663bd2590..4e460afaf3 100644 --- a/include/emp/datastructs/Graph.hpp +++ b/include/emp/datastructs/Graph.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief A simple, fast class for managing verticies (nodes) and edges. * @note Status: BETA */ diff --git a/include/emp/datastructs/IndexMap.hpp b/include/emp/datastructs/IndexMap.hpp index ead7f22fe4..7548d93449 100644 --- a/include/emp/datastructs/IndexMap.hpp +++ b/include/emp/datastructs/IndexMap.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief A simple class to weight items differently within a container and return the correct index. * @note Status: BETA * diff --git a/include/emp/datastructs/QueueCache.hpp b/include/emp/datastructs/QueueCache.hpp index ee821b4307..a87b484a51 100644 --- a/include/emp/datastructs/QueueCache.hpp +++ b/include/emp/datastructs/QueueCache.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A simple implementation of a Least-Recently Used Cache. * It orders elements by access time and removes the stalest ones in case maximum capacity is reached. */ diff --git a/include/emp/datastructs/SmallFifoMap.hpp b/include/emp/datastructs/SmallFifoMap.hpp index eedb5512f5..cabb674aca 100644 --- a/include/emp/datastructs/SmallFifoMap.hpp +++ b/include/emp/datastructs/SmallFifoMap.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Store key value pairs in a fixed-sized array, bumping out the oldest * value when full. Optimized for small N. Requires N < 256. * diff --git a/include/emp/datastructs/SmallVector.hpp b/include/emp/datastructs/SmallVector.hpp index e0d23a9d8b..a9c27a9e9f 100644 --- a/include/emp/datastructs/SmallVector.hpp +++ b/include/emp/datastructs/SmallVector.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A drop-in replacement for std::vector with optimization to handle * small vector sizes without dynamic allocation. It contains some number of * elements in-place, which allows it to avoid heap allocation when the actual diff --git a/include/emp/datastructs/StringMap.hpp b/include/emp/datastructs/StringMap.hpp index 03ea74bfd4..fb238ca67f 100644 --- a/include/emp/datastructs/StringMap.hpp +++ b/include/emp/datastructs/StringMap.hpp @@ -4,6 +4,7 @@ * date: 2018-2021. */ /** + * @file * @brief An std::unordered_map wrapper that deals smoothly with strings and fast compile-time optimizations. * @note Status: ALPHA * diff --git a/include/emp/datastructs/TimeQueue.hpp b/include/emp/datastructs/TimeQueue.hpp index e3cc5264b5..f8728720e1 100644 --- a/include/emp/datastructs/TimeQueue.hpp +++ b/include/emp/datastructs/TimeQueue.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A priority queue for timings, always marching forward. * @note Status: ALPHA * diff --git a/include/emp/datastructs/TypeMap.hpp b/include/emp/datastructs/TypeMap.hpp index e03c4eafe9..e3919bf519 100644 --- a/include/emp/datastructs/TypeMap.hpp +++ b/include/emp/datastructs/TypeMap.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A class that will map types to values of a designated type. * @note Status: BETA */ diff --git a/include/emp/datastructs/UnorderedIndexMap.hpp b/include/emp/datastructs/UnorderedIndexMap.hpp index bec4d5490f..00bbf94fa6 100644 --- a/include/emp/datastructs/UnorderedIndexMap.hpp +++ b/include/emp/datastructs/UnorderedIndexMap.hpp @@ -4,6 +4,7 @@ * date: 2015-2021. */ /** + * @file * @brief A simple class to weight items differently within a container and return the correct index. * @note Status: BETA * diff --git a/include/emp/datastructs/graph_utils.hpp b/include/emp/datastructs/graph_utils.hpp index 1623ca176b..7931f99b92 100644 --- a/include/emp/datastructs/graph_utils.hpp +++ b/include/emp/datastructs/graph_utils.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief This file provides a number of tools for manipulating graphs. * @note Status: BETA */ diff --git a/include/emp/datastructs/hash_utils.hpp b/include/emp/datastructs/hash_utils.hpp index 7571ce1ac1..460041e879 100644 --- a/include/emp/datastructs/hash_utils.hpp +++ b/include/emp/datastructs/hash_utils.hpp @@ -4,6 +4,7 @@ * date: 2019-2021. */ /** + * @file * @brief This file provides tools for hashing values and containers. * @note Status: BETA */ diff --git a/include/emp/datastructs/map_utils.hpp b/include/emp/datastructs/map_utils.hpp index 4aeeeb0bd6..f93bf798ac 100644 --- a/include/emp/datastructs/map_utils.hpp +++ b/include/emp/datastructs/map_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief A set of simple functions to manipulate maps. * @note Status: BETA */ diff --git a/include/emp/datastructs/ra_set.hpp b/include/emp/datastructs/ra_set.hpp index b6aba1124c..59f5581dc7 100644 --- a/include/emp/datastructs/ra_set.hpp +++ b/include/emp/datastructs/ra_set.hpp @@ -4,6 +4,7 @@ * date: 2017-2019 */ /** + * @file * @brief This file defines a Random Access Set template. * @note Status: ALPHA */ diff --git a/include/emp/datastructs/reference_vector.hpp b/include/emp/datastructs/reference_vector.hpp index ca3c37e314..48d0073b10 100644 --- a/include/emp/datastructs/reference_vector.hpp +++ b/include/emp/datastructs/reference_vector.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief A version of vector that holds only references to objects. Be careful! * @note Status: ALPHA */ diff --git a/include/emp/datastructs/set_utils.hpp b/include/emp/datastructs/set_utils.hpp index acbd6786bc..feab36e3a5 100644 --- a/include/emp/datastructs/set_utils.hpp +++ b/include/emp/datastructs/set_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Tools to save and load data from classes. * @note Status: ALPHA */ diff --git a/include/emp/datastructs/tuple_struct.hpp b/include/emp/datastructs/tuple_struct.hpp index 8ac3c5c37c..c9cb546511 100644 --- a/include/emp/datastructs/tuple_struct.hpp +++ b/include/emp/datastructs/tuple_struct.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief These macros will build a tuple and accessors to that tuple's members inside of a * class definintion. * diff --git a/include/emp/datastructs/tuple_utils.hpp b/include/emp/datastructs/tuple_utils.hpp index a9328ed146..a6f9bd21f7 100644 --- a/include/emp/datastructs/tuple_utils.hpp +++ b/include/emp/datastructs/tuple_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief Functions to simplify the use of std::tuple * Status: RELEASE */ diff --git a/include/emp/datastructs/valsort_map.hpp b/include/emp/datastructs/valsort_map.hpp index 025708dd8a..ae3287b054 100644 --- a/include/emp/datastructs/valsort_map.hpp +++ b/include/emp/datastructs/valsort_map.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief This file defines a map that is sorted by value, not key. * @note Status: ALPHA * diff --git a/include/emp/datastructs/vector_utils.hpp b/include/emp/datastructs/vector_utils.hpp index 478c87e451..13cc016fa3 100644 --- a/include/emp/datastructs/vector_utils.hpp +++ b/include/emp/datastructs/vector_utils.hpp @@ -4,6 +4,7 @@ * date: 2017-2021. */ /** + * @file * @brief A set of simple functions to manipulate emp::vector * @note Status: BETA * diff --git a/include/emp/debug/alert.hpp b/include/emp/debug/alert.hpp index 7260c26926..14e2cb673c 100644 --- a/include/emp/debug/alert.hpp +++ b/include/emp/debug/alert.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Define an Alert function that goes to std::cerr in c++ or to Alert() in Javascript. * Status: RELEASE */ diff --git a/include/emp/debug/debug.hpp b/include/emp/debug/debug.hpp index 1167752f16..10a734022b 100644 --- a/include/emp/debug/debug.hpp +++ b/include/emp/debug/debug.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Basic tools for use in developing high-assurance code. * @note Status: BETA */ diff --git a/include/emp/debug/mem_track.hpp b/include/emp/debug/mem_track.hpp index 96342e441e..802a1ec545 100644 --- a/include/emp/debug/mem_track.hpp +++ b/include/emp/debug/mem_track.hpp @@ -4,6 +4,7 @@ * date: 2015-2019 */ /** + * @file * @brief A set of macros to track how many instances of specific classes are made. * @note Status: BETA * diff --git a/include/emp/functional/AnyFunction.hpp b/include/emp/functional/AnyFunction.hpp index 71badf2b85..4e679bee1e 100644 --- a/include/emp/functional/AnyFunction.hpp +++ b/include/emp/functional/AnyFunction.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief Based on std::function, but with a generic base class. * @note Status: ALPHA * diff --git a/include/emp/functional/FunctionSet.hpp b/include/emp/functional/FunctionSet.hpp index e8c1f3aff4..013996523e 100644 --- a/include/emp/functional/FunctionSet.hpp +++ b/include/emp/functional/FunctionSet.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief Setup a collection of functions, all with the same signature, that can be run as a group. * @note Status: BETA */ diff --git a/include/emp/functional/GenericFunction.hpp b/include/emp/functional/GenericFunction.hpp index f89b7bfef2..3725c03238 100644 --- a/include/emp/functional/GenericFunction.hpp +++ b/include/emp/functional/GenericFunction.hpp @@ -4,6 +4,7 @@ * date: 2017-2019 */ /** + * @file * @brief Based on std::function, but with a common base class. * @note Status: ALPHA * diff --git a/include/emp/functional/flex_function.hpp b/include/emp/functional/flex_function.hpp index c84016d0a0..63ef086de1 100644 --- a/include/emp/functional/flex_function.hpp +++ b/include/emp/functional/flex_function.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief Based on std::function, but holds default parameter values for calls with fewer args. * @note Status: ALPHA */ diff --git a/include/emp/functional/memo_function.hpp b/include/emp/functional/memo_function.hpp index 99167e996f..a0d66df0e7 100644 --- a/include/emp/functional/memo_function.hpp +++ b/include/emp/functional/memo_function.hpp @@ -4,6 +4,7 @@ * date: 2016-2019 */ /** + * @file * @brief A function that memorizes previous results to speed up any repeated calls. * @note Status: BETA */ diff --git a/include/emp/games/Mancala.hpp b/include/emp/games/Mancala.hpp index 614d834b2f..9a4d4fae35 100644 --- a/include/emp/games/Mancala.hpp +++ b/include/emp/games/Mancala.hpp @@ -4,6 +4,7 @@ * date: 2016-2021 */ /** + * @file * @brief A simple Malcala game state handler. */ diff --git a/include/emp/games/Othello.hpp b/include/emp/games/Othello.hpp index cc0787891f..89ca97380e 100644 --- a/include/emp/games/Othello.hpp +++ b/include/emp/games/Othello.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A simple Othello game state handler. * * @todo Add Hash for boards to be able to cachce moves. diff --git a/include/emp/games/Othello8.hpp b/include/emp/games/Othello8.hpp index 8ab967036c..f7c91f9b9b 100644 --- a/include/emp/games/Othello8.hpp +++ b/include/emp/games/Othello8.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A simple Othello game state handler limited to an 8x8 board. * * @todo Add Hash for boards to be able to cachce moves. diff --git a/include/emp/games/PayoffMatrix.hpp b/include/emp/games/PayoffMatrix.hpp index c9795b3b8b..db463c7030 100644 --- a/include/emp/games/PayoffMatrix.hpp +++ b/include/emp/games/PayoffMatrix.hpp @@ -4,6 +4,7 @@ * date: 2016-2021 */ /** + * @file * @brief A simple game theory payoff matrix. * */ diff --git a/include/emp/geometry/Angle2D.hpp b/include/emp/geometry/Angle2D.hpp index 92a4e68a95..2203695be5 100644 --- a/include/emp/geometry/Angle2D.hpp +++ b/include/emp/geometry/Angle2D.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief emp::Angle maintains an angle on a 2D surface. * * The internal representation uses an int to represent angles. diff --git a/include/emp/geometry/Body2D.hpp b/include/emp/geometry/Body2D.hpp index f1e7628f69..65c7b03307 100644 --- a/include/emp/geometry/Body2D.hpp +++ b/include/emp/geometry/Body2D.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief This file defines classes to represent bodies that exist on a 2D surface. * * Each class should be able to: diff --git a/include/emp/geometry/Circle2D.hpp b/include/emp/geometry/Circle2D.hpp index b3fe065721..786c8f43be 100644 --- a/include/emp/geometry/Circle2D.hpp +++ b/include/emp/geometry/Circle2D.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief A class to manage circles in a 2D plane. */ diff --git a/include/emp/geometry/Physics2D.hpp b/include/emp/geometry/Physics2D.hpp index 8bdcd52cb9..f076355c1e 100644 --- a/include/emp/geometry/Physics2D.hpp +++ b/include/emp/geometry/Physics2D.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Physics2D - handles movement and collissions in a simple 2D world. * */ diff --git a/include/emp/geometry/Point2D.hpp b/include/emp/geometry/Point2D.hpp index c430ff982c..e9a33f1888 100644 --- a/include/emp/geometry/Point2D.hpp +++ b/include/emp/geometry/Point2D.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief A simple class to track value pairs of any kind, optimized for points in 2D Space. * * @note For maximal efficiency, prefer SquareMagnitude() and SquareDistance() diff --git a/include/emp/geometry/Surface.hpp b/include/emp/geometry/Surface.hpp index f3dae691ae..7451024cc0 100644 --- a/include/emp/geometry/Surface.hpp +++ b/include/emp/geometry/Surface.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief This file defines a templated class to represent a 2D suface capable of maintaining data * about which 2D bodies are currently on that surface and rapidly identifying if they are * overlapping. diff --git a/include/emp/geometry/Surface2D.hpp b/include/emp/geometry/Surface2D.hpp index c3500ba29d..5e4d978cf0 100644 --- a/include/emp/geometry/Surface2D.hpp +++ b/include/emp/geometry/Surface2D.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief This file defines a templated class to represent a 2D suface capable of maintaining data * about which 2D bodies are currently on that surface and rapidly identifying if they are * overlapping. diff --git a/include/emp/hardware/AvidaCPU_InstLib.hpp b/include/emp/hardware/AvidaCPU_InstLib.hpp index eea268412d..67322b8998 100644 --- a/include/emp/hardware/AvidaCPU_InstLib.hpp +++ b/include/emp/hardware/AvidaCPU_InstLib.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief A specialized version of InstLib to handle AvidaCPU Instructions. */ diff --git a/include/emp/hardware/AvidaGP.hpp b/include/emp/hardware/AvidaGP.hpp index 2d5dda58fb..f0c298d62f 100644 --- a/include/emp/hardware/AvidaGP.hpp +++ b/include/emp/hardware/AvidaGP.hpp @@ -4,6 +4,7 @@ * date: 2017-2021. */ /** + * @file * @brief This is a simple, efficient CPU for and applied version of Avida. * * @todo Should we save a copy of the original genome? (or create a new "memory" member) diff --git a/include/emp/hardware/BitSorter.hpp b/include/emp/hardware/BitSorter.hpp index 0a9f7a4b39..100ea32dc7 100644 --- a/include/emp/hardware/BitSorter.hpp +++ b/include/emp/hardware/BitSorter.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A quick series of comparisons intended for sorting bits. */ diff --git a/include/emp/hardware/EventDrivenGP.hpp b/include/emp/hardware/EventDrivenGP.hpp index ec87db9d8a..8a0f1bbbff 100644 --- a/include/emp/hardware/EventDrivenGP.hpp +++ b/include/emp/hardware/EventDrivenGP.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/hardware/EventLib.hpp b/include/emp/hardware/EventLib.hpp index 7354b84f37..c32d9dc10e 100644 --- a/include/emp/hardware/EventLib.hpp +++ b/include/emp/hardware/EventLib.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief This file maintains information about events available in virtual hardware. * * This file is largely based on InstLib.h. diff --git a/include/emp/hardware/Genome.hpp b/include/emp/hardware/Genome.hpp index 788ea13d1a..d96af54864 100644 --- a/include/emp/hardware/Genome.hpp +++ b/include/emp/hardware/Genome.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief This is a simple, container for a series of instructions. * */ diff --git a/include/emp/hardware/InstLib.hpp b/include/emp/hardware/InstLib.hpp index 3843dc5f8c..15b8a4a592 100644 --- a/include/emp/hardware/InstLib.hpp +++ b/include/emp/hardware/InstLib.hpp @@ -4,6 +4,7 @@ * date: 2017-2021. */ /** + * @file * @brief This file maintains information about instructions availabel in virtual hardware. */ diff --git a/include/emp/hardware/LinearCode.hpp b/include/emp/hardware/LinearCode.hpp index 74a600f243..f58e013180 100644 --- a/include/emp/hardware/LinearCode.hpp +++ b/include/emp/hardware/LinearCode.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief A linear sequence of instructions. */ diff --git a/include/emp/hardware/signalgp_utils.hpp b/include/emp/hardware/signalgp_utils.hpp index dcc723709b..449bb79ca8 100644 --- a/include/emp/hardware/signalgp_utils.hpp +++ b/include/emp/hardware/signalgp_utils.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief Helper functions for working with SignalGP virtual hardware/programs. * @todo Mutator class * @todo tests diff --git a/include/emp/in_progress/BatchConfig.hpp b/include/emp/in_progress/BatchConfig.hpp index f0c16393b0..fe531445ab 100644 --- a/include/emp/in_progress/BatchConfig.hpp +++ b/include/emp/in_progress/BatchConfig.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief A tool to control a series of runs and keep them updated. * * Development notes: currently doesn't compile because of last line. diff --git a/include/emp/in_progress/ConfigLexer.hpp b/include/emp/in_progress/ConfigLexer.hpp index 5c7158c52d..2af0db3542 100644 --- a/include/emp/in_progress/ConfigLexer.hpp +++ b/include/emp/in_progress/ConfigLexer.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief A simple lexer for the Empirical configuration language. * * Development notes: Initially building the lexer to be language specific, but a diff --git a/include/emp/in_progress/ConfigParser.hpp b/include/emp/in_progress/ConfigParser.hpp index b0790d1656..f5b4c1db7b 100644 --- a/include/emp/in_progress/ConfigParser.hpp +++ b/include/emp/in_progress/ConfigParser.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief A simple parser for the Empirical configuration language. * * This parser is being implemented as a pushdown automata. diff --git a/include/emp/in_progress/Empower/Empower.hpp b/include/emp/in_progress/Empower/Empower.hpp index 488cce5aa1..76cd18ccd2 100644 --- a/include/emp/in_progress/Empower/Empower.hpp +++ b/include/emp/in_progress/Empower/Empower.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A scripting language built inside of C++ * * Empower is a scripting language built inside of Empirical to simplify and the use of fast diff --git a/include/emp/in_progress/Empower/MemoryImage.hpp b/include/emp/in_progress/Empower/MemoryImage.hpp index d1afd6c7c6..58a9c54757 100644 --- a/include/emp/in_progress/Empower/MemoryImage.hpp +++ b/include/emp/in_progress/Empower/MemoryImage.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A collection of arbitrary objects stored in a chunk of memory. */ diff --git a/include/emp/in_progress/Empower/Struct.hpp b/include/emp/in_progress/Empower/Struct.hpp index 44484672a5..558bd3da6f 100644 --- a/include/emp/in_progress/Empower/Struct.hpp +++ b/include/emp/in_progress/Empower/Struct.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief Struct is a set of active variables, grouped by name (organized by a specific StructType) */ diff --git a/include/emp/in_progress/Empower/StructType.hpp b/include/emp/in_progress/Empower/StructType.hpp index 1426017afa..e3699639ae 100644 --- a/include/emp/in_progress/Empower/StructType.hpp +++ b/include/emp/in_progress/Empower/StructType.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief StructType maps variables to a MemoryImage; Struct is an instance of StructType * * @todo Immediately before setting a StructType to active, we can optimize variable ordering. diff --git a/include/emp/in_progress/Empower/Type.hpp b/include/emp/in_progress/Empower/Type.hpp index 3745d5b933..8429113049 100644 --- a/include/emp/in_progress/Empower/Type.hpp +++ b/include/emp/in_progress/Empower/Type.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A collection of information about how to manage variables of a specified type. */ diff --git a/include/emp/in_progress/Empower/TypeManager.hpp b/include/emp/in_progress/Empower/TypeManager.hpp index 034ea31e35..0f2cfe54e8 100644 --- a/include/emp/in_progress/Empower/TypeManager.hpp +++ b/include/emp/in_progress/Empower/TypeManager.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief Handles creation or retrieval of type objects. */ diff --git a/include/emp/in_progress/Empower/Var.hpp b/include/emp/in_progress/Empower/Var.hpp index bf57beea7a..2d4966034c 100644 --- a/include/emp/in_progress/Empower/Var.hpp +++ b/include/emp/in_progress/Empower/Var.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A collection of information about a single, instantiated variable in Empower */ diff --git a/include/emp/in_progress/Empower/VarInfo.hpp b/include/emp/in_progress/Empower/VarInfo.hpp index 11bb2d8baf..7b6816c385 100644 --- a/include/emp/in_progress/Empower/VarInfo.hpp +++ b/include/emp/in_progress/Empower/VarInfo.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief Generic info about a single variable (across MemoryImages) */ diff --git a/include/emp/in_progress/Empower2/Var.hpp b/include/emp/in_progress/Empower2/Var.hpp index 1c49ec4d2f..6cbf1ac925 100644 --- a/include/emp/in_progress/Empower2/Var.hpp +++ b/include/emp/in_progress/Empower2/Var.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A collection of information about a single, instantiated variable in Empower * * diff --git a/include/emp/in_progress/Parser.hpp b/include/emp/in_progress/Parser.hpp index 079f3cf7b3..ef96a209dd 100644 --- a/include/emp/in_progress/Parser.hpp +++ b/include/emp/in_progress/Parser.hpp @@ -4,6 +4,7 @@ * date: 2016-2019. */ /** + * @file * @brief A general-purpose, fast parser. * @note Status: DEVELOPMENT * diff --git a/include/emp/in_progress/Trait.hpp b/include/emp/in_progress/Trait.hpp index 8bad104f94..c7b15c2f97 100644 --- a/include/emp/in_progress/Trait.hpp +++ b/include/emp/in_progress/Trait.hpp @@ -4,6 +4,7 @@ * date: 2016 */ /** + * @file * @brief The TraitDef class maintains a category of measuments about another class. * * Each trait is associated with a name, a description, and a type. Instance of that diff --git a/include/emp/in_progress/class.hpp b/include/emp/in_progress/class.hpp index ca0cc6234b..8330d90d8a 100644 --- a/include/emp/in_progress/class.hpp +++ b/include/emp/in_progress/class.hpp @@ -4,6 +4,7 @@ * date: 2016 */ /** + * @file * @brief A re-engineering of tuple_struct.h, intended to be usable throughout Empirical. * * The EMP_CLASS macro builds an inexpensive class that diff --git a/include/emp/in_progress/constexpr/ce_array.hpp b/include/emp/in_progress/constexpr/ce_array.hpp index f2a4b58d3a..cfce3c61ad 100644 --- a/include/emp/in_progress/constexpr/ce_array.hpp +++ b/include/emp/in_progress/constexpr/ce_array.hpp @@ -4,6 +4,7 @@ * date: 2016 */ /** + * @file * @brief ce_array defines a limited array object for use within a constexpr class or function. * * STATUS: ALPHA diff --git a/include/emp/in_progress/constexpr/ce_random.hpp b/include/emp/in_progress/constexpr/ce_random.hpp index 1c6bb8325b..3f345c6a00 100644 --- a/include/emp/in_progress/constexpr/ce_random.hpp +++ b/include/emp/in_progress/constexpr/ce_random.hpp @@ -4,6 +4,7 @@ * date: 2016 */ /** + * @file * @brief A versatile and non-patterned pseudo-random-number generator. * * Status: DESIGN diff --git a/include/emp/in_progress/constexpr/ce_string.hpp b/include/emp/in_progress/constexpr/ce_string.hpp index c5f3c72915..5436235468 100644 --- a/include/emp/in_progress/constexpr/ce_string.hpp +++ b/include/emp/in_progress/constexpr/ce_string.hpp @@ -4,6 +4,7 @@ * date: 2016 */ /** + * @file * @brief ce_string defines a limited string object for use within a constexpr class or function. * * Status: DESIGN. diff --git a/include/emp/in_progress/fixed.hpp b/include/emp/in_progress/fixed.hpp index c5622376fc..0669123d12 100644 --- a/include/emp/in_progress/fixed.hpp +++ b/include/emp/in_progress/fixed.hpp @@ -4,6 +4,7 @@ * date: 2015 */ /** + * @file * @brief A comprehensive (ideally) fixed-point number representation. * * Type-name: emp::fixed diff --git a/include/emp/in_progress/struct.hpp b/include/emp/in_progress/struct.hpp index 8199e4152b..d9281cb409 100644 --- a/include/emp/in_progress/struct.hpp +++ b/include/emp/in_progress/struct.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief A re-engineering of tuple_struct.h, intended to be usable throughout Empirical. * * The EMP_STRUCT macro builds an inexpensive struct that diff --git a/include/emp/io/ContiguousStream.hpp b/include/emp/io/ContiguousStream.hpp index 2623612a99..251b2e6231 100644 --- a/include/emp/io/ContiguousStream.hpp +++ b/include/emp/io/ContiguousStream.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief Useful for streaming data to contiguous memory. * Status: RELEASE */ diff --git a/include/emp/io/File.hpp b/include/emp/io/File.hpp index f7ecd92ea3..cb9de644e9 100644 --- a/include/emp/io/File.hpp +++ b/include/emp/io/File.hpp @@ -4,6 +4,7 @@ * date: 2018-2020. */ /** + * @file * @brief The File object maintains a simple, in-memory file. * @note Status: BETA * diff --git a/include/emp/io/MemoryIStream.hpp b/include/emp/io/MemoryIStream.hpp index a1282d8116..5cb725ed3c 100644 --- a/include/emp/io/MemoryIStream.hpp +++ b/include/emp/io/MemoryIStream.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Useful for streaming data from contiguous memory. * Status: RELEASE */ diff --git a/include/emp/io/NullStream.hpp b/include/emp/io/NullStream.hpp index 3a823dd2f3..88762e0022 100644 --- a/include/emp/io/NullStream.hpp +++ b/include/emp/io/NullStream.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief A handy no-operation output stream. * @note Status: BETA */ diff --git a/include/emp/io/StreamManager.hpp b/include/emp/io/StreamManager.hpp index f2f12dd884..d92f3a000f 100644 --- a/include/emp/io/StreamManager.hpp +++ b/include/emp/io/StreamManager.hpp @@ -4,6 +4,7 @@ * date: 2020-2021. */ /** + * @file * @brief The StreamManager object links names to files or other streams. * @note Status: BETA * diff --git a/include/emp/io/ascii_utils.hpp b/include/emp/io/ascii_utils.hpp index b2f0c3bb1b..dd083aa87d 100644 --- a/include/emp/io/ascii_utils.hpp +++ b/include/emp/io/ascii_utils.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Tools for working with ascii output. * @note Status: ALPHA * diff --git a/include/emp/io/serialize.hpp b/include/emp/io/serialize.hpp index 1166f3df65..6a5d7a40e6 100644 --- a/include/emp/io/serialize.hpp +++ b/include/emp/io/serialize.hpp @@ -4,6 +4,7 @@ * date: 2015-2021. */ /** + * @file * @brief Tools to save and load data from classes. * @note Status: ALPHA * diff --git a/include/emp/io/serialize_macros.hpp b/include/emp/io/serialize_macros.hpp index 4741edfbe2..5cc893f96b 100644 --- a/include/emp/io/serialize_macros.hpp +++ b/include/emp/io/serialize_macros.hpp @@ -4,6 +4,7 @@ * date: 2015-2021. */ /** + * @file * @brief Macros for simplifying to serialization of objects. * @note Status: ALPHA */ diff --git a/include/emp/matching/MatchBin.hpp b/include/emp/matching/MatchBin.hpp index f28f51c522..b6b393c707 100644 --- a/include/emp/matching/MatchBin.hpp +++ b/include/emp/matching/MatchBin.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A container that supports flexible tag-based lookup. . * */ diff --git a/include/emp/matching/MatchDepository.hpp b/include/emp/matching/MatchDepository.hpp index c52a14edc8..75f077fc12 100644 --- a/include/emp/matching/MatchDepository.hpp +++ b/include/emp/matching/MatchDepository.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A container for tag-based lookup, optimized for situations where * tags are not removed from the lookup set. * diff --git a/include/emp/matching/_DepositoryEntry.hpp b/include/emp/matching/_DepositoryEntry.hpp index 6899cbd55e..b8f5c704fa 100644 --- a/include/emp/matching/_DepositoryEntry.hpp +++ b/include/emp/matching/_DepositoryEntry.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Helper struct for MatchDepository. * */ diff --git a/include/emp/matching/matchbin_metrics.hpp b/include/emp/matching/matchbin_metrics.hpp index 888c6bb1fb..0ae687b919 100644 --- a/include/emp/matching/matchbin_metrics.hpp +++ b/include/emp/matching/matchbin_metrics.hpp @@ -4,6 +4,7 @@ * date: 2019-2021. */ /** + * @file * @brief Metric structs that can be plugged into MatchBin. * */ diff --git a/include/emp/matching/matchbin_regulators.hpp b/include/emp/matching/matchbin_regulators.hpp index 684fabe440..187cc98104 100644 --- a/include/emp/matching/matchbin_regulators.hpp +++ b/include/emp/matching/matchbin_regulators.hpp @@ -4,6 +4,7 @@ * date: 2019-2020. */ /** + * @file * @brief Regulator structs that can be plugged into MatchBin. * */ diff --git a/include/emp/matching/matchbin_selectors.hpp b/include/emp/matching/matchbin_selectors.hpp index 87b6dee2ef..9b444980b5 100644 --- a/include/emp/matching/matchbin_selectors.hpp +++ b/include/emp/matching/matchbin_selectors.hpp @@ -4,6 +4,7 @@ * date: 2019-2021. */ /** + * @file * @brief Selector structs that can be plugged into MatchBin. * */ diff --git a/include/emp/matching/matchbin_utils.hpp b/include/emp/matching/matchbin_utils.hpp index c99966d00a..b1e8f03631 100644 --- a/include/emp/matching/matchbin_utils.hpp +++ b/include/emp/matching/matchbin_utils.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief Metric, Selector, and Regulator structs * that can be plugged into MatchBin. * diff --git a/include/emp/matching/regulators/PlusCountdownRegulator.hpp b/include/emp/matching/regulators/PlusCountdownRegulator.hpp index 3cddd4a50b..4434cb6260 100644 --- a/include/emp/matching/regulators/PlusCountdownRegulator.hpp +++ b/include/emp/matching/regulators/PlusCountdownRegulator.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Regulator that modifies match distance through addition * and decays to baseline with a countdown timer. * diff --git a/include/emp/matching/selectors_static/RankedSelector.hpp b/include/emp/matching/selectors_static/RankedSelector.hpp index a6f92c03f6..dc20f88c6a 100644 --- a/include/emp/matching/selectors_static/RankedSelector.hpp +++ b/include/emp/matching/selectors_static/RankedSelector.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Selector that picks the N best matches within a threshold. * */ diff --git a/include/emp/math/Distribution.hpp b/include/emp/math/Distribution.hpp index ed674a4198..df39a16cad 100644 --- a/include/emp/math/Distribution.hpp +++ b/include/emp/math/Distribution.hpp @@ -4,6 +4,7 @@ * date: 2018-2020. */ /** + * @file * @brief A set of pre-calculated discrete distributions that can quickly generate random values. * @note Status: ALPHA * diff --git a/include/emp/math/Fraction.hpp b/include/emp/math/Fraction.hpp index 2589c55484..2271fcbc87 100644 --- a/include/emp/math/Fraction.hpp +++ b/include/emp/math/Fraction.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Tools to maintain a more exact fraction (rather than lose precision as a double) * @note Status: ALPHA */ diff --git a/include/emp/math/Random.hpp b/include/emp/math/Random.hpp index b27aac47d1..140d596dee 100644 --- a/include/emp/math/Random.hpp +++ b/include/emp/math/Random.hpp @@ -4,6 +4,7 @@ * date: 2015-2021. */ /** + * @file * @brief A versatile and non-patterned pseudo-random-number generator. * Status: RELEASE */ diff --git a/include/emp/math/Range.hpp b/include/emp/math/Range.hpp index 722b4a1ce7..d9992c5cb8 100644 --- a/include/emp/math/Range.hpp +++ b/include/emp/math/Range.hpp @@ -4,6 +4,7 @@ * date: 2016-2019 */ /** + * @file * @brief A simple way to track value ranges * @note Status: BETA */ diff --git a/include/emp/math/combos.hpp b/include/emp/math/combos.hpp index be27e2ea5f..ad940d0a50 100644 --- a/include/emp/math/combos.hpp +++ b/include/emp/math/combos.hpp @@ -4,6 +4,7 @@ * date: 2017 */ /** + * @file * @brief Tools to step through combinations of items. * * Step through all combinations of size K from a set of N values. For ComboIDs just return the diff --git a/include/emp/math/constants.hpp b/include/emp/math/constants.hpp index 865a67c89b..35f87bc568 100644 --- a/include/emp/math/constants.hpp +++ b/include/emp/math/constants.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Commonly used constant values. * Status: RELEASE */ diff --git a/include/emp/math/distances.hpp b/include/emp/math/distances.hpp index a78c3937a8..1dac5ff420 100644 --- a/include/emp/math/distances.hpp +++ b/include/emp/math/distances.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief Library of commonly used distance functions * @note Status: BETA */ diff --git a/include/emp/math/info_theory.hpp b/include/emp/math/info_theory.hpp index 045b8da43a..d2d9abad82 100644 --- a/include/emp/math/info_theory.hpp +++ b/include/emp/math/info_theory.hpp @@ -4,6 +4,7 @@ * date: 2021. */ /** + * @file * @brief Tools to calculate Information Theory metrics. * @note Status: ALPHA * diff --git a/include/emp/math/math.hpp b/include/emp/math/math.hpp index e47ae81ab9..c47cf99c80 100644 --- a/include/emp/math/math.hpp +++ b/include/emp/math/math.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief Useful mathematical functions (that are constexpr when possible.) * @note Status: BETA (though new functions are added frequently) */ diff --git a/include/emp/math/random_utils.hpp b/include/emp/math/random_utils.hpp index ef3be54d15..06a2937c00 100644 --- a/include/emp/math/random_utils.hpp +++ b/include/emp/math/random_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief Helper functions for emp::Random for common random tasks. * Status: RELEASE */ diff --git a/include/emp/math/sequence_utils.hpp b/include/emp/math/sequence_utils.hpp index a075f0faf6..8c3d58d374 100644 --- a/include/emp/math/sequence_utils.hpp +++ b/include/emp/math/sequence_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2020. */ /** + * @file * @brief Functions for analyzing with generic sequence types. * @note Status: BETA * diff --git a/include/emp/math/spatial_stats.hpp b/include/emp/math/spatial_stats.hpp index 922c873e53..6c613cc9cf 100644 --- a/include/emp/math/spatial_stats.hpp +++ b/include/emp/math/spatial_stats.hpp @@ -4,6 +4,7 @@ * date: 2016-2019 */ /** + * @file * @brief Functions for calculating various spatial statistics. * @note Status: BETA */ diff --git a/include/emp/math/stats.hpp b/include/emp/math/stats.hpp index 92b66bc6af..30417d9436 100644 --- a/include/emp/math/stats.hpp +++ b/include/emp/math/stats.hpp @@ -4,6 +4,7 @@ * date: 2016-2019 */ /** + * @file * @brief Functions for calculating various statistics about an ensemble. * @note Status: BETA */ diff --git a/include/emp/meta/ConceptWrapper.hpp b/include/emp/meta/ConceptWrapper.hpp index 8192d4eb92..feeaa26c05 100644 --- a/include/emp/meta/ConceptWrapper.hpp +++ b/include/emp/meta/ConceptWrapper.hpp @@ -4,6 +4,7 @@ * date: 2018-2021. */ /** + * @file * @brief A template wrapper that will either enforce functionality or provide default functions. * * Starting in future versions of C++, a concept is a set of requirements for a class to be used diff --git a/include/emp/meta/TypeID.hpp b/include/emp/meta/TypeID.hpp index 85d1d1298a..0225b26d70 100644 --- a/include/emp/meta/TypeID.hpp +++ b/include/emp/meta/TypeID.hpp @@ -4,6 +4,7 @@ * date: 2016-2021 */ /** + * @file * @brief TypeID provides an easy way to convert types to strings. * * Developer notes: diff --git a/include/emp/meta/TypePack.hpp b/include/emp/meta/TypePack.hpp index f8c1066727..6b638d1e0f 100644 --- a/include/emp/meta/TypePack.hpp +++ b/include/emp/meta/TypePack.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief A set of types that can be manipulated at compile time (good for metaprogramming) * * TypePacks are static structues that provide a large set of mechanisms to access and adjust diff --git a/include/emp/meta/ValPack.hpp b/include/emp/meta/ValPack.hpp index ea973f050d..eaf51d185e 100644 --- a/include/emp/meta/ValPack.hpp +++ b/include/emp/meta/ValPack.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief A set of values that can be manipulated at compile time (good for metaprogramming) * * Any built-in type can be added to ValPack to be manipulated at compile time. diff --git a/include/emp/meta/macro_math.hpp b/include/emp/meta/macro_math.hpp index e5be4ec46e..3d43e822be 100644 --- a/include/emp/meta/macro_math.hpp +++ b/include/emp/meta/macro_math.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Macros to build a pre-processor calculator system. * Status: RELEASE * diff --git a/include/emp/meta/macros.hpp b/include/emp/meta/macros.hpp index 902fa2b62b..ea1fbafe43 100644 --- a/include/emp/meta/macros.hpp +++ b/include/emp/meta/macros.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Generally useful macros that can perform cools tricks. * Status: RELEASE * diff --git a/include/emp/meta/meta.hpp b/include/emp/meta/meta.hpp index 3cb890fb0f..6bd0939670 100644 --- a/include/emp/meta/meta.hpp +++ b/include/emp/meta/meta.hpp @@ -4,6 +4,7 @@ * date: 2016-2021 */ /** + * @file * @brief A bunch of C++ Template Meta-programming tricks. * * Developer notes: diff --git a/include/emp/meta/reflection.hpp b/include/emp/meta/reflection.hpp index 8cbc33112f..a51d5c4784 100644 --- a/include/emp/meta/reflection.hpp +++ b/include/emp/meta/reflection.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Macros and template utilities to help determine details about unknown classes. */ diff --git a/include/emp/meta/type_traits.hpp b/include/emp/meta/type_traits.hpp index 2715ec3d2e..1ae214dcd2 100644 --- a/include/emp/meta/type_traits.hpp +++ b/include/emp/meta/type_traits.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief Extensions on the standard library type traits to handle Empirical classes (such as Ptr). */ diff --git a/include/emp/polyfill/span.hpp b/include/emp/polyfill/span.hpp index b76d306c53..a96ba5ecfb 100644 --- a/include/emp/polyfill/span.hpp +++ b/include/emp/polyfill/span.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Polyfill for C++20 std::span. */ diff --git a/include/emp/prefab/Card.hpp b/include/emp/prefab/Card.hpp index 85764584ce..74d2f45afb 100644 --- a/include/emp/prefab/Card.hpp +++ b/include/emp/prefab/Card.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Wraps a Bootstrap card. */ diff --git a/include/emp/prefab/CodeBlock.hpp b/include/emp/prefab/CodeBlock.hpp index 01ed2a3907..e13527dec3 100644 --- a/include/emp/prefab/CodeBlock.hpp +++ b/include/emp/prefab/CodeBlock.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Wraps a HighlightJS code block. */ diff --git a/include/emp/prefab/Collapse.hpp b/include/emp/prefab/Collapse.hpp index 4a45491f77..d83c4135cc 100644 --- a/include/emp/prefab/Collapse.hpp +++ b/include/emp/prefab/Collapse.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Sets up a collapsable DOM element. */ diff --git a/include/emp/prefab/CommentBox.hpp b/include/emp/prefab/CommentBox.hpp index 11934a462a..bdc1111e05 100644 --- a/include/emp/prefab/CommentBox.hpp +++ b/include/emp/prefab/CommentBox.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Create a light grey "comment bubble." * * TODO: When prefab tools for adding mobile only and desktop only diff --git a/include/emp/prefab/ConfigPanel.hpp b/include/emp/prefab/ConfigPanel.hpp index 79a1c2cf8e..b9c8cfa556 100644 --- a/include/emp/prefab/ConfigPanel.hpp +++ b/include/emp/prefab/ConfigPanel.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Interfaces with emp::config objects to provide UI configuration. */ diff --git a/include/emp/prefab/FontAwesomeIcon.hpp b/include/emp/prefab/FontAwesomeIcon.hpp index 38b1f47f8d..55441ee188 100644 --- a/include/emp/prefab/FontAwesomeIcon.hpp +++ b/include/emp/prefab/FontAwesomeIcon.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Wraps Font Awesome's icons. */ diff --git a/include/emp/prefab/LoadingIcon.hpp b/include/emp/prefab/LoadingIcon.hpp index 85a95a5cb6..b69cd16859 100644 --- a/include/emp/prefab/LoadingIcon.hpp +++ b/include/emp/prefab/LoadingIcon.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Wraps Font Awesome's loading glyph. */ diff --git a/include/emp/prefab/LoadingModal.hpp b/include/emp/prefab/LoadingModal.hpp index 8cf958f03e..8898c88631 100644 --- a/include/emp/prefab/LoadingModal.hpp +++ b/include/emp/prefab/LoadingModal.hpp @@ -4,6 +4,7 @@ * date: 2020-2021 */ /** + * @file * @brief Wrapper for loading moadal * * To add a loading modal to your web page, you must diff --git a/include/emp/prefab/Modal.hpp b/include/emp/prefab/Modal.hpp index 947b9697ba..5c11ade52c 100644 --- a/include/emp/prefab/Modal.hpp +++ b/include/emp/prefab/Modal.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Wraps a Bootstrap modal. */ diff --git a/include/emp/prefab/ReadoutPanel.hpp b/include/emp/prefab/ReadoutPanel.hpp index 19ed8e3c44..f019b86951 100644 --- a/include/emp/prefab/ReadoutPanel.hpp +++ b/include/emp/prefab/ReadoutPanel.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief UI framework for live statistic readouts. */ diff --git a/include/emp/prefab/ToggleSwitch.hpp b/include/emp/prefab/ToggleSwitch.hpp index aeb1e344de..97783f91d8 100644 --- a/include/emp/prefab/ToggleSwitch.hpp +++ b/include/emp/prefab/ToggleSwitch.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief Wraps Bootstrap's toggle switch. */ diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index 748a8a15b6..8e2693acf9 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief UI subcomponent for ConfigPanel and ReadoutPanel. */ diff --git a/include/emp/scholar/Author.hpp b/include/emp/scholar/Author.hpp index b3844be723..4590d52f71 100644 --- a/include/emp/scholar/Author.hpp +++ b/include/emp/scholar/Author.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief Basic information about an author. * * Developer notes: diff --git a/include/emp/scholar/Bibliography.hpp b/include/emp/scholar/Bibliography.hpp index 415273fbf8..9a7546065f 100644 --- a/include/emp/scholar/Bibliography.hpp +++ b/include/emp/scholar/Bibliography.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief A collection of references. */ diff --git a/include/emp/scholar/Citation.hpp b/include/emp/scholar/Citation.hpp index 42be18416f..d7879ab59e 100644 --- a/include/emp/scholar/Citation.hpp +++ b/include/emp/scholar/Citation.hpp @@ -4,6 +4,7 @@ * date: 2016-2019 */ /** + * @file * @brief Information about a citation for a single paper / book / etc. */ diff --git a/include/emp/testing/unit_tests.hpp b/include/emp/testing/unit_tests.hpp index 1cad9a368c..f9523bf527 100644 --- a/include/emp/testing/unit_tests.hpp +++ b/include/emp/testing/unit_tests.hpp @@ -4,6 +4,7 @@ * date: 2015-2019 */ /** + * @file * @brief Macros to facilitate unit testing. * @note Status: RESURGENT (Was depricated; now back to ALPHA) * diff --git a/include/emp/tools/SolveState.hpp b/include/emp/tools/SolveState.hpp index 798a026041..ef06c64d66 100644 --- a/include/emp/tools/SolveState.hpp +++ b/include/emp/tools/SolveState.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief Used as part of a branching solver to keep track of the current state. * @note Status: BETA */ diff --git a/include/emp/tools/TypeTracker.hpp b/include/emp/tools/TypeTracker.hpp index ccb92c8423..4e58dc0b47 100644 --- a/include/emp/tools/TypeTracker.hpp +++ b/include/emp/tools/TypeTracker.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Track class types abstractly to dynamically call correct function overloads. * @note Status: BETA * diff --git a/include/emp/tools/attrs.hpp b/include/emp/tools/attrs.hpp index d58501b50b..6d023d433f 100644 --- a/include/emp/tools/attrs.hpp +++ b/include/emp/tools/attrs.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/tools/hash_namify.hpp b/include/emp/tools/hash_namify.hpp index b6dfdca5ff..1756572daf 100644 --- a/include/emp/tools/hash_namify.hpp +++ b/include/emp/tools/hash_namify.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief A method for mapping hash values to intuitive names. */ diff --git a/include/emp/tools/keyname_utils.hpp b/include/emp/tools/keyname_utils.hpp index 96d1e70423..8152425c08 100644 --- a/include/emp/tools/keyname_utils.hpp +++ b/include/emp/tools/keyname_utils.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief Utility functions that support the keyname file naming convention. * * Plays nice with the Python package keyname. diff --git a/include/emp/tools/string_utils.hpp b/include/emp/tools/string_utils.hpp index 02adfa6791..3188d94de5 100644 --- a/include/emp/tools/string_utils.hpp +++ b/include/emp/tools/string_utils.hpp @@ -4,6 +4,7 @@ * date: 2016-2021. */ /** + * @file * @brief Simple functions to manipulate strings. * Status: RELEASE */ diff --git a/include/emp/tools/timing.hpp b/include/emp/tools/timing.hpp index 0fd2cb81d2..a0fedfdf18 100644 --- a/include/emp/tools/timing.hpp +++ b/include/emp/tools/timing.hpp @@ -4,6 +4,7 @@ * date: 2020. */ /** + * @file * @brief A collection of tools to help measure timing of code. * @note Status: BETA */ diff --git a/include/emp/tools/unique.hpp b/include/emp/tools/unique.hpp index dd93037de4..4ef2e50808 100644 --- a/include/emp/tools/unique.hpp +++ b/include/emp/tools/unique.hpp @@ -4,6 +4,7 @@ * date: 2016-2020 */ /** + * @file * @brief Methods to generate UIDs. */ diff --git a/include/emp/tools/value_utils.hpp b/include/emp/tools/value_utils.hpp index 8710b2d047..7d2edc05e9 100644 --- a/include/emp/tools/value_utils.hpp +++ b/include/emp/tools/value_utils.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief Simple functions to manipulate values. * @note Status: ALPHA */ diff --git a/include/emp/web/Animate.hpp b/include/emp/web/Animate.hpp index a362909f98..8a8bbbe07a 100644 --- a/include/emp/web/Animate.hpp +++ b/include/emp/web/Animate.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Manage animations on a web site. * * To build an animation, you must provide a function to be run repeatedly. When Start() diff --git a/include/emp/web/Attributes.hpp b/include/emp/web/Attributes.hpp index 8063a6cf46..06782b4f67 100644 --- a/include/emp/web/Attributes.hpp +++ b/include/emp/web/Attributes.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief An Attributes class for tracking non-style features about HTML objects */ diff --git a/include/emp/web/Button.hpp b/include/emp/web/Button.hpp index a4cc78df3d..bc817ccbf5 100644 --- a/include/emp/web/Button.hpp +++ b/include/emp/web/Button.hpp @@ -4,6 +4,7 @@ * date: 2015-2018. */ /** + * @file * @brief Create/control an HTML button and call a specified function when that button is clicked. * * Use example: diff --git a/include/emp/web/Canvas.hpp b/include/emp/web/Canvas.hpp index c11e94957f..6d81745113 100644 --- a/include/emp/web/Canvas.hpp +++ b/include/emp/web/Canvas.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Manage an HTML canvas object. * */ diff --git a/include/emp/web/CanvasAction.hpp b/include/emp/web/CanvasAction.hpp index 187487a7b7..1636c804d2 100644 --- a/include/emp/web/CanvasAction.hpp +++ b/include/emp/web/CanvasAction.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Define a base class for all actions that can be done to widgets, plus simple actions. * * CanvasAction objects modify the appearance of a canvas and can be tracked to reconstruct the diff --git a/include/emp/web/CanvasShape.hpp b/include/emp/web/CanvasShape.hpp index 3c87bcac8b..36ac884233 100644 --- a/include/emp/web/CanvasShape.hpp +++ b/include/emp/web/CanvasShape.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Define simple shapes to draw on a canvas. * * Canvas shapes can be definied in detail, describing how they modify a canvas. diff --git a/include/emp/web/Div.hpp b/include/emp/web/Div.hpp index 314624c971..2337aa85c6 100644 --- a/include/emp/web/Div.hpp +++ b/include/emp/web/Div.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Div Widgets maintain an ordered collection of other widgets in an HTML div. * * When printed to the web page, these internal widgets are presented in order. diff --git a/include/emp/web/DocuExtras.hpp b/include/emp/web/DocuExtras.hpp index e9d4676a8b..09187c87cd 100644 --- a/include/emp/web/DocuExtras.hpp +++ b/include/emp/web/DocuExtras.hpp @@ -4,6 +4,7 @@ * date: 2015-2019 */ /** + * @file * @brief Control the styling and attributes of an existing div without nuking * the content inside it. * diff --git a/include/emp/web/Document.hpp b/include/emp/web/Document.hpp index 2f64fbceed..e48bf90f98 100644 --- a/include/emp/web/Document.hpp +++ b/include/emp/web/Document.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Manage an entire document. * * The Document class is built off of Div, but initializes the EMP web framework, if diff --git a/include/emp/web/Element.hpp b/include/emp/web/Element.hpp index 736d3b5428..4dda10ebc9 100644 --- a/include/emp/web/Element.hpp +++ b/include/emp/web/Element.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief Element Widgets maintain an ordered collection of other widgets * in a HTML element with any tag (e.g., div, footer, header, p, etc.) * diff --git a/include/emp/web/FileInput.hpp b/include/emp/web/FileInput.hpp index 08bcfc7e74..7245f249f0 100644 --- a/include/emp/web/FileInput.hpp +++ b/include/emp/web/FileInput.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Specs for the FileInput widget (click on to upload a file) * * @todo Setup FileInput to work outside of web mode as well. diff --git a/include/emp/web/Font.hpp b/include/emp/web/Font.hpp index b42aad3019..df85b96f52 100644 --- a/include/emp/web/Font.hpp +++ b/include/emp/web/Font.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Maintains basic information about a font to be used in HTML. */ diff --git a/include/emp/web/Image.hpp b/include/emp/web/Image.hpp index ed8675a54c..163fe2e2f4 100644 --- a/include/emp/web/Image.hpp +++ b/include/emp/web/Image.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Easily load an image and place it in a document. */ diff --git a/include/emp/web/Input.hpp b/include/emp/web/Input.hpp index 13cfb682e6..87259638ba 100644 --- a/include/emp/web/Input.hpp +++ b/include/emp/web/Input.hpp @@ -4,6 +4,7 @@ * date: 2018 */ /** + * @file * @brief Create/control an HTML input and call a specified function when it receives input. * * Use example: diff --git a/include/emp/web/JSWrap.hpp b/include/emp/web/JSWrap.hpp index a04de622cd..243c132db4 100644 --- a/include/emp/web/JSWrap.hpp +++ b/include/emp/web/JSWrap.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Wrap a C++ function and convert it to an integer that can be called from Javascript * * To wrap a function, call: diff --git a/include/emp/web/KeypressManager.hpp b/include/emp/web/KeypressManager.hpp index 9c696f491b..64f281a97e 100644 --- a/include/emp/web/KeypressManager.hpp +++ b/include/emp/web/KeypressManager.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief KeypressManager is a tracker for keypresses in HTML5 pages. * * When a KeypressManager is created, it can be given functions to run in response diff --git a/include/emp/web/Listeners.hpp b/include/emp/web/Listeners.hpp index 32dda8cacb..9516efcd88 100644 --- a/include/emp/web/Listeners.hpp +++ b/include/emp/web/Listeners.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief A class for tracking font event listeners for Widgets */ diff --git a/include/emp/web/NodeDomShim.hpp b/include/emp/web/NodeDomShim.hpp index 34ee822e56..9f6319baf7 100644 --- a/include/emp/web/NodeDomShim.hpp +++ b/include/emp/web/NodeDomShim.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Shim for Empirical compatibility with node.js. Mimicks the browser * document object model (DOM). */ diff --git a/include/emp/web/RawImage.hpp b/include/emp/web/RawImage.hpp index 213548b4eb..5fe850df42 100644 --- a/include/emp/web/RawImage.hpp +++ b/include/emp/web/RawImage.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Handle the fundamental loading of an image (without Widget tracking) */ diff --git a/include/emp/web/Selector.hpp b/include/emp/web/Selector.hpp index 237d4a2044..29ac665e36 100644 --- a/include/emp/web/Selector.hpp +++ b/include/emp/web/Selector.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Specs for the Selector widget. * * A Selector widget provides the user with a pull-down menu. It can be diff --git a/include/emp/web/Style.hpp b/include/emp/web/Style.hpp index ab79189f2b..e59a3f308e 100644 --- a/include/emp/web/Style.hpp +++ b/include/emp/web/Style.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief A CSS class for tracking font style, etc. */ diff --git a/include/emp/web/Table.hpp b/include/emp/web/Table.hpp index 2d6d10f474..5571c7cd2c 100644 --- a/include/emp/web/Table.hpp +++ b/include/emp/web/Table.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Specs for the Table widget. * * TableInfo is the core information for a table and has two helper classes: diff --git a/include/emp/web/Text.hpp b/include/emp/web/Text.hpp index a8360a7a4f..8fb01da961 100644 --- a/include/emp/web/Text.hpp +++ b/include/emp/web/Text.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Specs for the Text widget. * * A representation of text on a web page. Text Widgets can be included inside of Divs or diff --git a/include/emp/web/TextArea.hpp b/include/emp/web/TextArea.hpp index 606c3ef14b..1fdeb4e82a 100644 --- a/include/emp/web/TextArea.hpp +++ b/include/emp/web/TextArea.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Specs for the TextArea widget. * * diff --git a/include/emp/web/TextFeed.hpp b/include/emp/web/TextFeed.hpp index b77e2103d2..f48e013efb 100644 --- a/include/emp/web/TextFeed.hpp +++ b/include/emp/web/TextFeed.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief A representation of text on a web page optimized for rapid appends. * */ diff --git a/include/emp/web/Tween.hpp b/include/emp/web/Tween.hpp index 8e9831e830..1a126f68e9 100644 --- a/include/emp/web/Tween.hpp +++ b/include/emp/web/Tween.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief A Tween manages the gradual shift in properties of one or more widgets over time. * * To create a Tween, a duration must be specified, along with an optional default diff --git a/include/emp/web/UrlParams.hpp b/include/emp/web/UrlParams.hpp index 03da91ee9c..eeabbe5531 100644 --- a/include/emp/web/UrlParams.hpp +++ b/include/emp/web/UrlParams.hpp @@ -4,6 +4,7 @@ * date: 2019 */ /** + * @file * @brief Get an unordered_map containing url query key/value parameters. * */ diff --git a/include/emp/web/Widget.hpp b/include/emp/web/Widget.hpp index 2efcdd9743..24d4785499 100644 --- a/include/emp/web/Widget.hpp +++ b/include/emp/web/Widget.hpp @@ -4,6 +4,7 @@ * date: 2015-2019. */ /** + * @file * @brief Widgets maintain individual components on a web page and link to Elements * * Each HTML Widget has all of its details stored in a WidgetInfo object; Multiple Widgets can diff --git a/include/emp/web/WidgetExtras.hpp b/include/emp/web/WidgetExtras.hpp index ee1dafaba7..a9cfd0a4ae 100644 --- a/include/emp/web/WidgetExtras.hpp +++ b/include/emp/web/WidgetExtras.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief A collection of extra details about HTML Widgets (attributes, style, listerns) */ diff --git a/include/emp/web/_FacetedWidget.hpp b/include/emp/web/_FacetedWidget.hpp index 3ff7ef89d8..8f63790c47 100644 --- a/include/emp/web/_FacetedWidget.hpp +++ b/include/emp/web/_FacetedWidget.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief The FacetedWidget class is used to access the protected methods of WidgetFacet such * as SetCSS and SetAttr. An example of its use can be found in include/emp/prefab/Collapse.h * diff --git a/include/emp/web/_MochaTestRunner.hpp b/include/emp/web/_MochaTestRunner.hpp index ad32013310..ff7053860b 100644 --- a/include/emp/web/_MochaTestRunner.hpp +++ b/include/emp/web/_MochaTestRunner.hpp @@ -4,6 +4,7 @@ * date: 2020 */ /** + * @file * @brief Utility class for managing software testing for Emscripten web code using the Karma + Mocha * javascript testing framework. * diff --git a/include/emp/web/_TableCell.hpp b/include/emp/web/_TableCell.hpp index d646b41a66..fa2f93c949 100644 --- a/include/emp/web/_TableCell.hpp +++ b/include/emp/web/_TableCell.hpp @@ -4,6 +4,7 @@ * date: 2017-2018. */ /** + * @file * @brief The TableCell widget, which behaves like the Table widget, but focuses on a single cell. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableCol.hpp b/include/emp/web/_TableCol.hpp index 55611f63fb..5c23ee105a 100644 --- a/include/emp/web/_TableCol.hpp +++ b/include/emp/web/_TableCol.hpp @@ -4,6 +4,7 @@ * date: 2017-2018. */ /** + * @file * @brief The TableCol widget, which behaves like the Table widget, but focuses on a single column. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableColGroup.hpp b/include/emp/web/_TableColGroup.hpp index 66a9b66c67..d849d8f931 100644 --- a/include/emp/web/_TableColGroup.hpp +++ b/include/emp/web/_TableColGroup.hpp @@ -4,6 +4,7 @@ * date: 2017-2018. */ /** + * @file * @brief The TableColGoup widget, which behaves like the Table widget, but focuses on a group of columns. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableRow.hpp b/include/emp/web/_TableRow.hpp index e67ff41cbe..d9447108b9 100644 --- a/include/emp/web/_TableRow.hpp +++ b/include/emp/web/_TableRow.hpp @@ -4,6 +4,7 @@ * date: 2017-2018. */ /** + * @file * @brief The TableRow widget, which behaves like the Table widget, but focuses on a single row. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/_TableRowGroup.hpp b/include/emp/web/_TableRowGroup.hpp index b9042a9fac..8ac19568cc 100644 --- a/include/emp/web/_TableRowGroup.hpp +++ b/include/emp/web/_TableRowGroup.hpp @@ -4,6 +4,7 @@ * date: 2017-2018. */ /** + * @file * @brief The TableRowGoup widget, which behaves like the Table widget, but focuses on a group of rows. * * DO NOT include this file directly. All files begining with '_' are for internal use only. diff --git a/include/emp/web/canvas_utils.hpp b/include/emp/web/canvas_utils.hpp index 27c298d979..caa51d4e95 100644 --- a/include/emp/web/canvas_utils.hpp +++ b/include/emp/web/canvas_utils.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Various versions of the Draw() function to draw images onto a canvas. * * Each version of Draw() takes a canvas widget and some form of data to be drawn on the widget, diff --git a/include/emp/web/color_map.hpp b/include/emp/web/color_map.hpp index 5dc7cc9b19..33fc6c260c 100644 --- a/include/emp/web/color_map.hpp +++ b/include/emp/web/color_map.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Tools to dynamically build (and cache) color maps. */ diff --git a/include/emp/web/commands.hpp b/include/emp/web/commands.hpp index 02f6867399..432a4b835c 100644 --- a/include/emp/web/commands.hpp +++ b/include/emp/web/commands.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief A set of command-defining classes that can be fed into widgets using the << operator. */ diff --git a/include/emp/web/d3/axis.hpp b/include/emp/web/d3/axis.hpp index 8ea0880b26..c621ddcd16 100644 --- a/include/emp/web/d3/axis.hpp +++ b/include/emp/web/d3/axis.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief Handle drawing of axes on D3 graphts. */ diff --git a/include/emp/web/d3/d3_init.hpp b/include/emp/web/d3/d3_init.hpp index 087635911e..7b163875b6 100644 --- a/include/emp/web/d3/d3_init.hpp +++ b/include/emp/web/d3/d3_init.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/web/d3/dataset.hpp b/include/emp/web/d3/dataset.hpp index 833340f508..dbd1e1015c 100644 --- a/include/emp/web/d3/dataset.hpp +++ b/include/emp/web/d3/dataset.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Tools to maintain data in D3. */ diff --git a/include/emp/web/d3/histogram.hpp b/include/emp/web/d3/histogram.hpp index ee33399888..419dd951b1 100644 --- a/include/emp/web/d3/histogram.hpp +++ b/include/emp/web/d3/histogram.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/web/d3/layout.hpp b/include/emp/web/d3/layout.hpp index 659dc57c92..fb366c4531 100644 --- a/include/emp/web/d3/layout.hpp +++ b/include/emp/web/d3/layout.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Tools for laying out nodes in D3. */ diff --git a/include/emp/web/d3/scales.hpp b/include/emp/web/d3/scales.hpp index ef9864b7b7..5d2498d0a3 100644 --- a/include/emp/web/d3/scales.hpp +++ b/include/emp/web/d3/scales.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Tools for scaling graph axes in D3. */ diff --git a/include/emp/web/d3/selection.hpp b/include/emp/web/d3/selection.hpp index c4d126c1dd..6cfa03dd1a 100644 --- a/include/emp/web/d3/selection.hpp +++ b/include/emp/web/d3/selection.hpp @@ -4,6 +4,7 @@ * date: 2016-2017 */ /** + * @file * @brief TODO. */ diff --git a/include/emp/web/d3/svg_shapes.hpp b/include/emp/web/d3/svg_shapes.hpp index cdcab17c9b..92e30d8298 100644 --- a/include/emp/web/d3/svg_shapes.hpp +++ b/include/emp/web/d3/svg_shapes.hpp @@ -4,6 +4,7 @@ * date: 2016-2018 */ /** + * @file * @brief Tools to build common SVG shapes. */ diff --git a/include/emp/web/d3/utils.hpp b/include/emp/web/d3/utils.hpp index 7341074bdf..284784f225 100644 --- a/include/emp/web/d3/utils.hpp +++ b/include/emp/web/d3/utils.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief This file contains macros used to build Empirical's C++ wrapper for D3. */ diff --git a/include/emp/web/d3/visual_elements.hpp b/include/emp/web/d3/visual_elements.hpp index 5640ab165b..7f6dbe284f 100644 --- a/include/emp/web/d3/visual_elements.hpp +++ b/include/emp/web/d3/visual_elements.hpp @@ -4,6 +4,7 @@ * date: 2021 */ /** + * @file * @brief TODO. * */ diff --git a/include/emp/web/d3/visualizations.hpp b/include/emp/web/d3/visualizations.hpp index f516fdb8b5..bcaba206f8 100644 --- a/include/emp/web/d3/visualizations.hpp +++ b/include/emp/web/d3/visualizations.hpp @@ -4,6 +4,7 @@ * date: 2017-2018 */ /** + * @file * @brief Tools to build D3 visualizations. */ diff --git a/include/emp/web/emfunctions.hpp b/include/emp/web/emfunctions.hpp index 5eb9ef4a44..17d54897bc 100644 --- a/include/emp/web/emfunctions.hpp +++ b/include/emp/web/emfunctions.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Specialized, useful function for Empirical. */ diff --git a/include/emp/web/events.hpp b/include/emp/web/events.hpp index 870a76bcd1..5dac793590 100644 --- a/include/emp/web/events.hpp +++ b/include/emp/web/events.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Event handlers that use JQuery. * * @todo Events can be further sub-divided and built up (similar to DataNode objects) so that we diff --git a/include/emp/web/init.hpp b/include/emp/web/init.hpp index e4361a323f..3bd98d4ee5 100644 --- a/include/emp/web/init.hpp +++ b/include/emp/web/init.hpp @@ -4,6 +4,7 @@ * date: 2015-2018. */ /** + * @file * @brief Define Initialize() and other functions to set up Empirical to build Emscripten projects. * * Init.hpp should always be included if you are compiling Empirical's web tools with Emscripten. It diff --git a/include/emp/web/js_utils.hpp b/include/emp/web/js_utils.hpp index 7da79915a1..273145348a 100644 --- a/include/emp/web/js_utils.hpp +++ b/include/emp/web/js_utils.hpp @@ -4,6 +4,7 @@ * date: 2015-2018 */ /** + * @file * @brief Tools for passing data between C++ and Javascript. */ diff --git a/include/emp/web/web.hpp b/include/emp/web/web.hpp index 825f60f664..d885212a20 100644 --- a/include/emp/web/web.hpp +++ b/include/emp/web/web.hpp @@ -4,6 +4,7 @@ * date: 2015-2017 */ /** + * @file * @brief Main file to include the entire Empirical web framework; for now, just an alias for Document.h * */ From f3dcc3e4370bb602a05e74f0d638527a23bc800f Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 24 Jun 2023 15:24:35 -0400 Subject: [PATCH 12/80] Fix todo directive --- include/emp/base/_emscripten_error_trigger.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/emp/base/_emscripten_error_trigger.hpp b/include/emp/base/_emscripten_error_trigger.hpp index b8a1930c3f..41b1e82eda 100644 --- a/include/emp/base/_emscripten_error_trigger.hpp +++ b/include/emp/base/_emscripten_error_trigger.hpp @@ -7,7 +7,7 @@ * @file * @brief Terminating error trigger implementation. * @note For internal use. - * @TODO Reflect error message to browser (e.g., as an alert) + * @todo Reflect error message to browser (e.g., as an alert) */ #ifndef EMP_BASE__EMSCRIPTEN_ERROR_TRIGGER_HPP_INCLUDE From 235bb8a86dacac4467dd795e8bdacdd892de76ff Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 24 Jun 2023 15:30:09 -0400 Subject: [PATCH 13/80] Fix file directives for cpp files --- ci/impl/generate_boilerplate_file_docstrings.sh | 3 ++- ci/impl/generate_license_notices.sh | 3 ++- demos/EasyChair/ProcessReviews.cpp | 3 ++- demos/MAP-Elites-Arm/source/ArmWorld.hpp | 6 ++++-- demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp | 3 ++- demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp | 3 ++- demos/NK/source/NKWorld.hpp | 6 ++++-- demos/NK/source/native/NK.cpp | 5 +++-- demos/NK/source/web/NK-web.cpp | 5 +++-- demos/SelectionAnalyze/Analyze.cpp | 3 ++- demos/SelectionAnalyze/Lexicase.cpp | 3 ++- demos/SelectionAnalyze/Roulette.cpp | 3 ++- demos/SelectionAnalyze/SelectionData.hpp | 6 ++++-- demos/SelectionAnalyze/test_gen.cpp | 3 ++- demos/Slideshow.hpp | 6 ++++-- demos/SpatialCoop2017/source/SimplePDWorld.hpp | 6 ++++-- demos/SpatialCoop2017/source/native/SimplePDWorld.cpp | 3 ++- demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp | 3 ++- demos/Sudoku/Sudoku.cpp | 3 ++- demos/utils/data/Histogram.cpp | 3 ++- demos/utils/data/reorder_cols.cpp | 3 ++- demos/utils/data/summarize.cpp | 3 ++- demos/utils/edit_dist/edit_dist.cpp | 3 ++- demos/utils/edit_dist/string_gen.cpp | 3 ++- demos/utils/extras/calc_log.cpp | 3 ++- demos/utils/extras/calc_pow.cpp | 3 ++- demos/utils/graphs/make_graph.cpp | 3 ++- demos/utils/graphs/vcover.cpp | 3 ++- demos/utils/graphs/web/vcover.cpp | 3 ++- demos/utils/graphs/web/web_UI.cpp | 3 ++- demos/utils/graphs/web/web_UI.hpp | 6 ++++-- demos/utils/levelize/levelize.cpp | 3 ++- demos/utils/words/annotate-length.cpp | 3 ++- demos/utils/words/has-letters.cpp | 3 ++- demos/utils/words/wordplay-remove.cpp | 3 ++- demos/utils/words/wordplay-rot.cpp | 3 ++- demos/utils/words/wordplay-shuffle.cpp | 3 ++- examples/Evolve/AvidaGP-Evo.cpp | 3 ++- examples/Evolve/AvidaGP-Mancala.cpp | 3 ++- examples/Evolve/AvidaGP-Resource.cpp | 3 ++- examples/Evolve/AvidaGP-StateGrid.cpp | 3 ++- examples/Evolve/AvidaGP-Test.cpp | 3 ++- examples/Evolve/DiagnosticNiches.cpp | 3 ++- examples/Evolve/EvoSorter.cpp | 3 ++- examples/Evolve/Fitness_Share_NK.cpp | 3 ++- examples/Evolve/Grid.cpp | 3 ++- examples/Evolve/MAP-Elites.cpp | 3 ++- examples/Evolve/NK.cpp | 3 ++- examples/Evolve/Pools.cpp | 3 ++- examples/Evolve/Roulette.cpp | 3 ++- examples/Evolve/ShrinkPop.cpp | 3 ++- examples/Evolve/Systematics.cpp | 3 ++- examples/Evolve/World.cpp | 3 ++- examples/Evolve/World2.cpp | 3 ++- examples/OLD/Empower/Empower.cpp | 5 +++-- examples/OLD/Empower/Struct.cpp | 5 +++-- examples/OLD/Empower/Type.cpp | 5 +++-- examples/OLD/Empower/TypeManager.cpp | 5 +++-- examples/OLD/Random14.cpp | 3 ++- examples/OLD/hardware/bak/AvidaGP-AltInst.cpp | 5 +++-- examples/OLD/hardware/bak/AvidaGP-Evo.cpp | 5 +++-- examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp | 5 +++-- examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp | 5 +++-- examples/OLD/hardware/bak/AvidaGP-Mancala.cpp | 5 +++-- examples/OLD/hardware/bak/AvidaGP-Sorting.cpp | 5 +++-- examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp | 5 +++-- examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp | 5 +++-- examples/OLD/hardware/bak/EventDrivenGP.cpp | 5 +++-- examples/OLD/hardware/bak/Play-Mancala.cpp | 5 +++-- examples/OLD/hardware/bak/RunTournament.cpp | 5 +++-- examples/ProjectTemplate/source/native/project_name.cpp | 5 +++-- examples/ProjectTemplate/source/web/project_name-web.cpp | 5 +++-- examples/TO_REPAIR/base/array.cpp | 5 +++-- examples/TO_REPAIR/config/SettingConfig.cpp | 5 +++-- examples/TO_REPAIR/data/DataMap.cpp | 5 +++-- examples/TO_REPAIR/games/Mancala.cpp | 5 +++-- examples/TO_REPAIR/games/Othello.cpp | 5 +++-- examples/TO_REPAIR/timing/short_strings.cpp | 5 +++-- examples/base/Ptr.cpp | 3 ++- examples/base/assert.cpp | 3 ++- examples/base/errors.cpp | 3 ++- examples/base/map.cpp | 3 ++- examples/base/unordered_map.cpp | 3 ++- examples/base/vector.cpp | 3 ++- examples/bits/BitSet.cpp | 3 ++- examples/bits/BitVector.cpp | 3 ++- examples/compiler/DFA.cpp | 3 ++- examples/compiler/Lexer.cpp | 3 ++- examples/compiler/NFA.cpp | 3 ++- examples/compiler/RegEx.cpp | 3 ++- examples/compiler/lexer_utils.cpp | 3 ++- examples/config/SettingCombos.cpp | 3 ++- examples/config/config.cpp | 3 ++- examples/config/config_setup.hpp | 6 ++++-- examples/config/namespaces.cpp | 3 ++- examples/config/test-macro.hpp | 6 ++++-- examples/control/Action.cpp | 3 ++- examples/control/ActionManager.cpp | 3 ++- examples/control/Signal.cpp | 3 ++- examples/control/SignalControl.cpp | 3 ++- examples/data/DataFile.cpp | 3 ++- examples/data/DataInterface.cpp | 3 ++- examples/data/DataManager.cpp | 3 ++- examples/data/DataNode.cpp | 3 ++- examples/data/Trait.cpp | 3 ++- examples/data/VarMap.cpp | 3 ++- examples/datastructs/Cache.cpp | 3 ++- examples/datastructs/IndexMap.cpp | 3 ++- examples/datastructs/StringMap.cpp | 3 ++- examples/datastructs/TimeQueue.cpp | 3 ++- examples/datastructs/TypeMap.cpp | 3 ++- examples/datastructs/hash_utils.cpp | 3 ++- examples/datastructs/ra_set.cpp | 3 ++- examples/datastructs/tuple_utils.cpp | 3 ++- examples/datastructs/valsort_map.cpp | 3 ++- examples/datastructs/vector_utils.cpp | 3 ++- examples/functional/AnyFunction.cpp | 3 ++- examples/functional/GenericFunction.cpp | 3 ++- examples/functional/flex_function.cpp | 3 ++- examples/functional/memo_function.cpp | 3 ++- examples/geometry/Surface.cpp | 3 ++- examples/hardware/AvidaGP.cpp | 3 ++- examples/hardware/BitSorter.cpp | 3 ++- examples/hardware/LinearCode.cpp | 3 ++- examples/hardware/SignalGP.cpp | 3 ++- examples/io/ContiguousStream.cpp | 3 ++- examples/io/File.cpp | 3 ++- examples/io/StreamManager.cpp | 3 ++- examples/math/Distribution.cpp | 3 ++- examples/math/Random.cpp | 3 ++- examples/math/Range.cpp | 3 ++- examples/math/combos.cpp | 3 ++- examples/math/constants.cpp | 3 ++- examples/math/info_theory.cpp | 3 ++- examples/math/math.cpp | 3 ++- examples/math/stats.cpp | 3 ++- examples/meta/ConceptWrapper.cpp | 3 ++- examples/meta/TypePack.cpp | 3 ++- examples/meta/ValPack.cpp | 3 ++- examples/meta/macros.cpp | 3 ++- examples/meta/meta.cpp | 3 ++- examples/meta/reflection.cpp | 3 ++- examples/prefab/Card.cpp | 3 ++- examples/prefab/CodeBlock.cpp | 3 ++- examples/prefab/Collapse.cpp | 3 ++- examples/prefab/CommentBox.cpp | 3 ++- examples/prefab/ConfigPanel.cpp | 3 ++- examples/prefab/FontAwesomeIcon.cpp | 3 ++- examples/prefab/LoadingIcon.cpp | 3 ++- examples/prefab/LoadingModal.cpp | 3 ++- examples/prefab/Modal.cpp | 3 ++- examples/prefab/ReadoutPanel.cpp | 3 ++- examples/prefab/ToggleSwitch.cpp | 3 ++- examples/prefab/assets/SampleConfig.hpp | 6 ++++-- examples/scholar/Citation.cpp | 3 ++- examples/testing/ExampleFail.cpp | 3 ++- examples/testing/ExampleFail2.cpp | 3 ++- examples/testing/ExamplePass.cpp | 3 ++- examples/testing/Template.cpp | 3 ++- examples/timing/IndexMap.cpp | 3 ++- examples/timing/Othello.cpp | 3 ++- examples/timing/Random_timings.cpp | 3 ++- examples/timing/bit_timings.cpp | 3 ++- examples/timing/pointers.cpp | 3 ++- examples/tools/TypeTracker.cpp | 3 ++- examples/tools/attrs.cpp | 3 ++- examples/web/Animate.cpp | 3 ++- examples/web/Animate2.cpp | 3 ++- examples/web/Attributes.cpp | 3 ++- examples/web/Canvas.cpp | 3 ++- examples/web/DP.cpp | 3 ++- examples/web/Div.cpp | 3 ++- examples/web/Example.cpp | 3 ++- examples/web/Font.cpp | 3 ++- examples/web/Graph.cpp | 3 ++- examples/web/Hello.cpp | 3 ++- examples/web/Image.cpp | 3 ++- examples/web/RPS.cpp | 3 ++- examples/web/Sudoku.cpp | 3 ++- examples/web/Table.cpp | 3 ++- examples/web/TextArea.cpp | 3 ++- examples/web/Tween.cpp | 3 ++- examples/web/Web.cpp | 3 ++- examples/web/assert.cpp | 3 ++- examples/web/keypress.cpp | 3 ++- tests/Evolve/NK-const.cpp | 3 ++- tests/Evolve/NK.cpp | 3 ++- tests/Evolve/OEE.cpp | 3 ++- tests/Evolve/Resource.cpp | 3 ++- tests/Evolve/StateGrid.cpp | 3 ++- tests/Evolve/Systematics.cpp | 3 ++- tests/Evolve/World.cpp | 3 ++- tests/Evolve/World_iterator.cpp | 3 ++- tests/Evolve/World_output.cpp | 3 ++- tests/Evolve/World_reflect.cpp | 3 ++- tests/Evolve/World_select.cpp | 3 ++- tests/Evolve/World_structure.cpp | 3 ++- tests/OLD/Slideshow/Slideshow.cpp | 3 ++- tests/OLD/UI/Animate.cpp | 3 ++- tests/OLD/UI/Canvas.cpp | 3 ++- tests/OLD/UI/Element.cpp | 3 ++- tests/OLD/UI/ElementSlate.cpp | 3 ++- tests/OLD/UI/ElementTable.cpp | 3 ++- tests/OLD/UI/Example.cpp | 3 ++- tests/OLD/UI/Example2.cpp | 3 ++- tests/OLD/UI/base_tests/test2.cpp | 3 ++- tests/OLD/UI/base_tests/test3.cpp | 3 ++- tests/OLD/UI/base_tests/test4.cpp | 3 ++- tests/OLD/UI/canvas_utils.cpp | 3 ++- tests/OLD/UI/events.cpp | 3 ++- tests/OLD/UI/mini_evoke.cpp | 3 ++- tests/OLD/kinetic/BatchDraw.cpp | 3 ++- tests/OLD/kinetic/LayerManagement.cpp | 3 ++- tests/OLD/kinetic/Simple.cpp | 3 ++- tests/OLD/kinetic/VaderImage.cpp | 3 ++- tests/OLD/kinetic/test.cpp | 3 ++- tests/base/MapProxy.cpp | 3 ++- tests/base/Ptr.cpp | 3 ++- tests/base/always_assert.cpp | 3 ++- tests/base/always_assert_warning.cpp | 3 ++- tests/base/array.cpp | 3 ++- tests/base/assert.cpp | 3 ++- tests/base/assert_warning.cpp | 3 ++- tests/base/error.cpp | 3 ++- tests/base/errors.cpp | 3 ++- tests/base/map.cpp | 3 ++- tests/base/optional.cpp | 3 ++- tests/base/unordered_map.cpp | 3 ++- tests/base/vector.cpp | 3 ++- tests/bits/BitArray.cpp | 3 ++- tests/bits/BitMatrix.cpp | 3 ++- tests/bits/BitSet.cpp | 3 ++- tests/bits/BitVector.cpp | 3 ++- tests/bits/bitset_utils.cpp | 3 ++- tests/compiler/DFA.cpp | 3 ++- tests/compiler/Lexer.cpp | 3 ++- tests/compiler/NFA.cpp | 3 ++- tests/compiler/RegEx.cpp | 3 ++- tests/compiler/lexer_utils.cpp | 3 ++- tests/config/ArgManager.cpp | 3 ++- tests/config/ConfigManager.cpp | 3 ++- tests/config/SettingCombos.cpp | 3 ++- tests/config/SettingConfig.cpp | 3 ++- tests/config/assets/config_setup.hpp | 6 ++++-- tests/config/command_line.cpp | 3 ++- tests/config/config.cpp | 3 ++- tests/config/config_utils.cpp | 3 ++- tests/control/Action.cpp | 3 ++- tests/control/ActionManager.cpp | 3 ++- tests/control/Signal.cpp | 3 ++- tests/control/SignalControl.cpp | 3 ++- tests/control/SignalManager.cpp | 3 ++- tests/data/DataFile.cpp | 3 ++- tests/data/DataInterface.cpp | 3 ++- tests/data/DataLayout.cpp | 3 ++- tests/data/DataLog.cpp | 3 ++- tests/data/DataManager.cpp | 3 ++- tests/data/DataMap.cpp | 3 ++- tests/data/DataNode.cpp | 3 ++- tests/data/MemoryImage.cpp | 3 ++- tests/data/Trait.cpp | 3 ++- tests/data/VarMap.cpp | 3 ++- tests/datastructs/BloomFilter.cpp | 3 ++- tests/datastructs/Bool.cpp | 3 ++- tests/datastructs/Cache.cpp | 3 ++- tests/datastructs/DynamicString.cpp | 3 ++- tests/datastructs/Graph.cpp | 3 ++- tests/datastructs/IndexMap.cpp | 3 ++- tests/datastructs/QueueCache.cpp | 3 ++- tests/datastructs/SmallFifoMap.cpp | 3 ++- tests/datastructs/SmallVector.cpp | 3 ++- tests/datastructs/StringMap.cpp | 3 ++- tests/datastructs/TimeQueue.cpp | 3 ++- tests/datastructs/TypeMap.cpp | 3 ++- tests/datastructs/UnorderedIndexMap.cpp | 3 ++- tests/datastructs/graph_utils.cpp | 3 ++- tests/datastructs/hash_utils.cpp | 3 ++- tests/datastructs/map_utils.cpp | 3 ++- tests/datastructs/ra_set.cpp | 3 ++- tests/datastructs/reference_vector.cpp | 3 ++- tests/datastructs/set_utils.cpp | 3 ++- tests/datastructs/tuple_struct.cpp | 3 ++- tests/datastructs/tuple_utils.cpp | 3 ++- tests/datastructs/valsort_map.cpp | 3 ++- tests/datastructs/vector_utils.cpp | 3 ++- tests/debug/alert.cpp | 3 ++- tests/debug/debug.cpp | 3 ++- tests/debug/mem_track.cpp | 3 ++- tests/functional/AnyFunction.cpp | 3 ++- tests/functional/FunctionSet.cpp | 3 ++- tests/functional/GenericFunction.cpp | 3 ++- tests/functional/flex_function.cpp | 3 ++- tests/functional/memo_function.cpp | 3 ++- tests/games/Mancala.cpp | 3 ++- tests/games/Othello.cpp | 3 ++- tests/games/Othello8.cpp | 3 ++- tests/games/PayoffMatrix.cpp | 3 ++- tests/geometry/Angle2D.cpp | 3 ++- tests/geometry/Body2D.cpp | 3 ++- tests/geometry/Circle2D.cpp | 3 ++- tests/geometry/Physics2D.cpp | 3 ++- tests/geometry/Point2D.cpp | 3 ++- tests/geometry/Surface.cpp | 3 ++- tests/geometry/Surface2D.cpp | 3 ++- tests/hardware/BitSorter.cpp | 3 ++- tests/hardware/LinearCode.cpp | 3 ++- tests/hardware/avida_gp.cpp | 3 ++- tests/hardware/event_driven_gp.cpp | 3 ++- tests/io/ContiguousStream.cpp | 3 ++- tests/io/File.cpp | 3 ++- tests/io/MemoryIStream.cpp | 3 ++- tests/io/NullStream.cpp | 3 ++- tests/io/StreamManager.cpp | 3 ++- tests/io/ascii_utils.cpp | 3 ++- tests/io/serialize.cpp | 3 ++- tests/matching/MatchBin.cpp | 3 ++- tests/matching/MatchBin_logging.cpp | 3 ++- tests/matching/MatchDepository.cpp | 3 ++- tests/matching/RankedSelector.cpp | 3 ++- tests/matching/_DepositoryEntry.cpp | 3 ++- tests/matching/matchbin_utils.cpp | 3 ++- tests/math/Distribution.cpp | 3 ++- tests/math/Random.cpp | 3 ++- tests/math/Range.cpp | 3 ++- tests/math/combos.cpp | 3 ++- tests/math/distances.cpp | 3 ++- tests/math/info_theory.cpp | 3 ++- tests/math/math.cpp | 3 ++- tests/math/random_utils.cpp | 3 ++- tests/math/sequence_utils.cpp | 3 ++- tests/math/spatial_stats.cpp | 3 ++- tests/math/stats.cpp | 3 ++- tests/meta/ConceptWrapper.cpp | 3 ++- tests/meta/TypeID.cpp | 3 ++- tests/meta/TypePack.cpp | 3 ++- tests/meta/ValPack.cpp | 3 ++- tests/meta/macro_math.cpp | 3 ++- tests/meta/macros.cpp | 3 ++- tests/meta/meta.cpp | 3 ++- tests/meta/reflection.cpp | 3 ++- tests/meta/type_traits.cpp | 3 ++- tests/scholar/Author.cpp | 3 ++- tests/scholar/Bibliography.cpp | 3 ++- tests/scholar/Citation.cpp | 3 ++- tests/testing/unit_tests.cpp | 3 ++- tests/tools/SolveState.cpp | 3 ++- tests/tools/TypeTracker.cpp | 3 ++- tests/tools/attrs.cpp | 3 ++- tests/tools/hash_namify.cpp | 3 ++- tests/tools/keyname_utils.cpp | 3 ++- tests/tools/string_utils.cpp | 3 ++- tests/tools/timing.cpp | 3 ++- tests/tools/unique.cpp | 3 ++- tests/tools/value_utils.cpp | 3 ++- tests/web/Card.cpp | 3 ++- tests/web/ClickCollapseDemo.cpp | 3 ++- tests/web/ClickCounterDemo.cpp | 3 ++- tests/web/CodeBlock.cpp | 3 ++- tests/web/Collapse.cpp | 3 ++- tests/web/CommentBox.cpp | 3 ++- tests/web/ConfigPanel.cpp | 3 ++- tests/web/Element.cpp | 3 ++- tests/web/FontAwesomeIcon.cpp | 3 ++- tests/web/GetUrlParams.cpp | 3 ++- tests/web/JSWrap.cpp | 3 ++- tests/web/LoadingIcon.cpp | 3 ++- tests/web/LoadingModal.cpp | 3 ++- tests/web/Modal.cpp | 3 ++- tests/web/ReadoutPanel.cpp | 3 ++- tests/web/TextFeed.cpp | 3 ++- tests/web/ToggleSwitch.cpp | 3 ++- tests/web/ValueBox.cpp | 3 ++- tests/web/Widget.cpp | 3 ++- tests/web/assets/Config.hpp | 6 ++++-- tests/web/color_map.cpp | 3 ++- tests/web/js_utils.cpp | 3 ++- tests/web/visualizations.cpp | 3 ++- 377 files changed, 801 insertions(+), 413 deletions(-) diff --git a/ci/impl/generate_boilerplate_file_docstrings.sh b/ci/impl/generate_boilerplate_file_docstrings.sh index 8157495c28..38f7d545b6 100755 --- a/ci/impl/generate_boilerplate_file_docstrings.sh +++ b/ci/impl/generate_boilerplate_file_docstrings.sh @@ -26,7 +26,8 @@ for filename in $(cd include && find -- * -name '*.hpp' -type f); do sed -i '5s|^.*$|*/|' "include/${filename}" # only match if a @brief isn't currently in place # adapted from https://stackoverflow.com/a/5334825 - sed -i '6s|^.*$|/**\n * @file|' "include/${filename}" + sed -i '6s|^.*$|/**|' "include/${filename}" + sed -i '7s|^.*$| * @file|' "include/${filename}" sed -i "/^ \* @brief /b; 8s/^.*\$/ * @brief TODO./" "include/${filename}" # only match empty lines # add extra * to replace later with */ when constructing fresh diff --git a/ci/impl/generate_license_notices.sh b/ci/impl/generate_license_notices.sh index ac2b7ccfeb..dab1f4cd80 100755 --- a/ci/impl/generate_license_notices.sh +++ b/ci/impl/generate_license_notices.sh @@ -17,7 +17,7 @@ for filename in $(find . -name '*.cpp' -type f ! -path "./third-party/*") $(find # stamp in expected boilerplate line-by-line # just like file docstrings, but don't require a brief # stamp in expected boilerplate line-by-line - sed -i '1s|^.*$|/**|' "${filename}" + sed -i '1s|^.*$|/*|' "${filename}" sed -i '2s|^.*$| * This file is part of Empirical, https://github.com/devosoft/Empirical|' "${filename}" sed -i '3s|^.*$| * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md|' "${filename}" # only match if a @date isn't currently in place @@ -32,6 +32,7 @@ for filename in $(find . -name '*.cpp' -type f ! -path "./third-party/*") $(find # add extra * to replace later with */ when constructing fresh # sed -i '6s/^$/ */' "${filename}" sed -i '6s|^.*$|/**|' "${filename}" + sed -i '7s|^.*$| * @file|' "${filename}" # close boilerplate file docstring # must accomodate possible additional content in docstring diff --git a/demos/EasyChair/ProcessReviews.cpp b/demos/EasyChair/ProcessReviews.cpp index 5ef17a292a..6c6e1c1bad 100644 --- a/demos/EasyChair/ProcessReviews.cpp +++ b/demos/EasyChair/ProcessReviews.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/demos/MAP-Elites-Arm/source/ArmWorld.hpp b/demos/MAP-Elites-Arm/source/ArmWorld.hpp index f8bf963674..e8fd7f6110 100644 --- a/demos/MAP-Elites-Arm/source/ArmWorld.hpp +++ b/demos/MAP-Elites-Arm/source/ArmWorld.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * date: 2023 */ /** + */ + * @brief Defines the specialized world for the MAP-Elites app. */ diff --git a/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp b/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp index e26417c5c4..574f0652d3 100644 --- a/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp +++ b/demos/MAP-Elites-Arm/source/native/MAP-Elites-Arm.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Controller for NATIVE (Command Line) version of MAP-Elites app. */ diff --git a/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp b/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp index f2a63af3b9..a8fc28f6eb 100644 --- a/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp +++ b/demos/MAP-Elites-Arm/source/web/MAP-Elites-Arm-web.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Controller for WEB version of MAP-Elites app. */ diff --git a/demos/NK/source/NKWorld.hpp b/demos/NK/source/NKWorld.hpp index b1a76c7c33..bb99fee215 100644 --- a/demos/NK/source/NKWorld.hpp +++ b/demos/NK/source/NKWorld.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + */ + * */ diff --git a/demos/NK/source/native/NK.cpp b/demos/NK/source/native/NK.cpp index 45f1e3856a..3229130a09 100644 --- a/demos/NK/source/native/NK.cpp +++ b/demos/NK/source/native/NK.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file * @brief This file explores the template defined in evo::Population.h with an NK landscape. */ diff --git a/demos/NK/source/web/NK-web.cpp b/demos/NK/source/web/NK-web.cpp index a99f9cf577..85aee7373a 100644 --- a/demos/NK/source/web/NK-web.cpp +++ b/demos/NK/source/web/NK-web.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file * @brief This file contains an easy-to-manipulate NK world. */ diff --git a/demos/SelectionAnalyze/Analyze.cpp b/demos/SelectionAnalyze/Analyze.cpp index 09c9878c11..6423b88c79 100644 --- a/demos/SelectionAnalyze/Analyze.cpp +++ b/demos/SelectionAnalyze/Analyze.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file * @brief Analyze probabilities for selection using various selection techniques. */ diff --git a/demos/SelectionAnalyze/Lexicase.cpp b/demos/SelectionAnalyze/Lexicase.cpp index 83a91024c6..ab3c62f603 100644 --- a/demos/SelectionAnalyze/Lexicase.cpp +++ b/demos/SelectionAnalyze/Lexicase.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file * @brief Calculate probabilities for selection using Lexicase Selection. */ diff --git a/demos/SelectionAnalyze/Roulette.cpp b/demos/SelectionAnalyze/Roulette.cpp index 0dc24d3276..977f88a7a0 100644 --- a/demos/SelectionAnalyze/Roulette.cpp +++ b/demos/SelectionAnalyze/Roulette.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Calculate probabilities for selection using Roulette Selection (easy!) */ diff --git a/demos/SelectionAnalyze/SelectionData.hpp b/demos/SelectionAnalyze/SelectionData.hpp index 402d7e96bf..16ad333a53 100644 --- a/demos/SelectionAnalyze/SelectionData.hpp +++ b/demos/SelectionAnalyze/SelectionData.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * date: 2023 */ /** + */ + * @brief This class maintains all of the fitness data for a population of organisms. */ diff --git a/demos/SelectionAnalyze/test_gen.cpp b/demos/SelectionAnalyze/test_gen.cpp index 9e90e8089a..f78c2a92cd 100644 --- a/demos/SelectionAnalyze/test_gen.cpp +++ b/demos/SelectionAnalyze/test_gen.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "emp/config/command_line.hpp" diff --git a/demos/Slideshow.hpp b/demos/Slideshow.hpp index 27f9d94542..055c0257c6 100644 --- a/demos/Slideshow.hpp +++ b/demos/Slideshow.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2015-2017 + * date: 2023 */ /** + */ + * */ diff --git a/demos/SpatialCoop2017/source/SimplePDWorld.hpp b/demos/SpatialCoop2017/source/SimplePDWorld.hpp index cd550d87e2..1e024f566c 100644 --- a/demos/SpatialCoop2017/source/SimplePDWorld.hpp +++ b/demos/SpatialCoop2017/source/SimplePDWorld.hpp @@ -1,11 +1,13 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** */ + */ + #ifndef DEMOS_SPATIALCOOP2017_SOURCE_SIMPLEPDWORLD_HPP_INCLUDE #define DEMOS_SPATIALCOOP2017_SOURCE_SIMPLEPDWORLD_HPP_INCLUDE diff --git a/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp b/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp index 60ebcbefba..075a19b8b0 100644 --- a/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp +++ b/demos/SpatialCoop2017/source/native/SimplePDWorld.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp b/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp index 003f046008..b538ba1f58 100644 --- a/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp +++ b/demos/SpatialCoop2017/source/web/SimplePDWorld-web.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file */ #include "emp/web/web.hpp" diff --git a/demos/Sudoku/Sudoku.cpp b/demos/Sudoku/Sudoku.cpp index d8f634965e..3f2bc2eae5 100644 --- a/demos/Sudoku/Sudoku.cpp +++ b/demos/Sudoku/Sudoku.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/base/array.hpp" diff --git a/demos/utils/data/Histogram.cpp b/demos/utils/data/Histogram.cpp index 90c46ccf00..1528f65952 100644 --- a/demos/utils/data/Histogram.cpp +++ b/demos/utils/data/Histogram.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../../include/emp/base/vector.hpp" diff --git a/demos/utils/data/reorder_cols.cpp b/demos/utils/data/reorder_cols.cpp index 2d50b56a34..b53272d3a3 100644 --- a/demos/utils/data/reorder_cols.cpp +++ b/demos/utils/data/reorder_cols.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file * @brief This utility loads in a space-separated file and reorders the columns. * * Identify a file and a set of columns (starting with column 1). Load the diff --git a/demos/utils/data/summarize.cpp b/demos/utils/data/summarize.cpp index 7c1b4785ad..f12a7a45d2 100644 --- a/demos/utils/data/summarize.cpp +++ b/demos/utils/data/summarize.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2020 */ /** + * @file * @brief This file takes in one or more CSV files with values and, for each, calculates the mnimium, * maximum, and average values found in each column. */ diff --git a/demos/utils/edit_dist/edit_dist.cpp b/demos/utils/edit_dist/edit_dist.cpp index 9d344c32b3..4542fbbd4a 100644 --- a/demos/utils/edit_dist/edit_dist.cpp +++ b/demos/utils/edit_dist/edit_dist.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file * @brief Load input from standard in that begins with a value "N" and then contains N pairs of strings. * * Output will be the edit distances between each string pair. diff --git a/demos/utils/edit_dist/string_gen.cpp b/demos/utils/edit_dist/string_gen.cpp index b0c62f9192..e44a1dbff9 100644 --- a/demos/utils/edit_dist/string_gen.cpp +++ b/demos/utils/edit_dist/string_gen.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file * @brief Generate a series of string pairs with a prescribed number of changes between them. */ diff --git a/demos/utils/extras/calc_log.cpp b/demos/utils/extras/calc_log.cpp index bc1cc62336..7398038256 100644 --- a/demos/utils/extras/calc_log.cpp +++ b/demos/utils/extras/calc_log.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/demos/utils/extras/calc_pow.cpp b/demos/utils/extras/calc_pow.cpp index 54957071ee..29601a6a4b 100644 --- a/demos/utils/extras/calc_pow.cpp +++ b/demos/utils/extras/calc_pow.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/demos/utils/graphs/make_graph.cpp b/demos/utils/graphs/make_graph.cpp index cad01f990f..e1e58ec3dc 100644 --- a/demos/utils/graphs/make_graph.cpp +++ b/demos/utils/graphs/make_graph.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief Build graphs of various types in the standard format. * * NOTE: All questions can be answered by providing command-line arguments. diff --git a/demos/utils/graphs/vcover.cpp b/demos/utils/graphs/vcover.cpp index 59996793db..2ee18f5453 100644 --- a/demos/utils/graphs/vcover.cpp +++ b/demos/utils/graphs/vcover.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file * @brief Determine the minimum vertex cover for a graph provided on standard input. */ diff --git a/demos/utils/graphs/web/vcover.cpp b/demos/utils/graphs/web/vcover.cpp index 156bca9c81..90804a2b59 100644 --- a/demos/utils/graphs/web/vcover.cpp +++ b/demos/utils/graphs/web/vcover.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/demos/utils/graphs/web/web_UI.cpp b/demos/utils/graphs/web/web_UI.cpp index 5eee902fbe..165f50b014 100644 --- a/demos/utils/graphs/web/web_UI.cpp +++ b/demos/utils/graphs/web/web_UI.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "web_UI.h" diff --git a/demos/utils/graphs/web/web_UI.hpp b/demos/utils/graphs/web/web_UI.hpp index b82fd5bd09..757c671e94 100644 --- a/demos/utils/graphs/web/web_UI.hpp +++ b/demos/utils/graphs/web/web_UI.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + */ + * */ diff --git a/demos/utils/levelize/levelize.cpp b/demos/utils/levelize/levelize.cpp index 388df44785..5ada17b546 100644 --- a/demos/utils/levelize/levelize.cpp +++ b/demos/utils/levelize/levelize.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/demos/utils/words/annotate-length.cpp b/demos/utils/words/annotate-length.cpp index 7e5b32dd06..fa97b34369 100644 --- a/demos/utils/words/annotate-length.cpp +++ b/demos/utils/words/annotate-length.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file * @brief Annotate all of the words in an input list with their length. */ diff --git a/demos/utils/words/has-letters.cpp b/demos/utils/words/has-letters.cpp index f45499b0a0..5e3ea957fd 100644 --- a/demos/utils/words/has-letters.cpp +++ b/demos/utils/words/has-letters.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file * @brief Find all words in a dictionary with a combination of letters IN ORDER, annotated by length. */ diff --git a/demos/utils/words/wordplay-remove.cpp b/demos/utils/words/wordplay-remove.cpp index 9bba9467ae..d1de8119ae 100644 --- a/demos/utils/words/wordplay-remove.cpp +++ b/demos/utils/words/wordplay-remove.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief Test the removal of letters through an alphabet to see if new words are formed. */ diff --git a/demos/utils/words/wordplay-rot.cpp b/demos/utils/words/wordplay-rot.cpp index e0213803ea..613236f4cb 100644 --- a/demos/utils/words/wordplay-rot.cpp +++ b/demos/utils/words/wordplay-rot.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief Test the rotation of letters through an alphabet to see if new words are formed. * * Build graphs of various types in the standard format. diff --git a/demos/utils/words/wordplay-shuffle.cpp b/demos/utils/words/wordplay-shuffle.cpp index 3c44531dc2..c435336e1b 100644 --- a/demos/utils/words/wordplay-shuffle.cpp +++ b/demos/utils/words/wordplay-shuffle.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Find words that are a shuffle of another word. */ diff --git a/examples/Evolve/AvidaGP-Evo.cpp b/examples/Evolve/AvidaGP-Evo.cpp index 2c5cac1954..c5bfcdb3f5 100644 --- a/examples/Evolve/AvidaGP-Evo.cpp +++ b/examples/Evolve/AvidaGP-Evo.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief A test of AvidaGP with World; organisms must find squares of values. */ diff --git a/examples/Evolve/AvidaGP-Mancala.cpp b/examples/Evolve/AvidaGP-Mancala.cpp index 67ed3c2861..4f2202b8d7 100644 --- a/examples/Evolve/AvidaGP-Mancala.cpp +++ b/examples/Evolve/AvidaGP-Mancala.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file */ #include diff --git a/examples/Evolve/AvidaGP-Resource.cpp b/examples/Evolve/AvidaGP-Resource.cpp index 5eeb60dd28..8aeb6fdb89 100644 --- a/examples/Evolve/AvidaGP-Resource.cpp +++ b/examples/Evolve/AvidaGP-Resource.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief A test of AvidaGP with World; organisms must find squares of values. */ diff --git a/examples/Evolve/AvidaGP-StateGrid.cpp b/examples/Evolve/AvidaGP-StateGrid.cpp index 3d3ffdde84..7f0488ad6f 100644 --- a/examples/Evolve/AvidaGP-StateGrid.cpp +++ b/examples/Evolve/AvidaGP-StateGrid.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief A example of using AvidaGP evolving with a StateGrid. * * Example file of AvidaGP-based organisms (called SGOrg here) moving through a state grid, diff --git a/examples/Evolve/AvidaGP-Test.cpp b/examples/Evolve/AvidaGP-Test.cpp index d4c7af673b..4d411fc9e8 100644 --- a/examples/Evolve/AvidaGP-Test.cpp +++ b/examples/Evolve/AvidaGP-Test.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief A simple test of AvidaGP with World for copies and mutations. * * A few basic steps to examine AvidaGP organisms in a world. diff --git a/examples/Evolve/DiagnosticNiches.cpp b/examples/Evolve/DiagnosticNiches.cpp index 61c90bcec8..40aa46cfdf 100644 --- a/examples/Evolve/DiagnosticNiches.cpp +++ b/examples/Evolve/DiagnosticNiches.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file */ #include diff --git a/examples/Evolve/EvoSorter.cpp b/examples/Evolve/EvoSorter.cpp index c6f3013c22..127e0b219e 100644 --- a/examples/Evolve/EvoSorter.cpp +++ b/examples/Evolve/EvoSorter.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief This file explores the evolving BitSorter sorting networks. */ diff --git a/examples/Evolve/Fitness_Share_NK.cpp b/examples/Evolve/Fitness_Share_NK.cpp index e03066c18a..cf0e2ad52c 100644 --- a/examples/Evolve/Fitness_Share_NK.cpp +++ b/examples/Evolve/Fitness_Share_NK.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief This file uses the Fitness Sharing functionality defined in evo::World.hpp */ diff --git a/examples/Evolve/Grid.cpp b/examples/Evolve/Grid.cpp index c35eabf842..e797e787c4 100644 --- a/examples/Evolve/Grid.cpp +++ b/examples/Evolve/Grid.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief This file explores the grid options for emp::World.hpp */ diff --git a/examples/Evolve/MAP-Elites.cpp b/examples/Evolve/MAP-Elites.cpp index 6ac9c4e815..725d839ea3 100644 --- a/examples/Evolve/MAP-Elites.cpp +++ b/examples/Evolve/MAP-Elites.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief This file explores the MAP-Elites selection scheme. * * In this example, we will be evolving 4-digit integers. diff --git a/examples/Evolve/NK.cpp b/examples/Evolve/NK.cpp index 5aa2121a87..f5f00ebc94 100644 --- a/examples/Evolve/NK.cpp +++ b/examples/Evolve/NK.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief This file explores the template defined in evo::Population.h with an NK landscape. */ diff --git a/examples/Evolve/Pools.cpp b/examples/Evolve/Pools.cpp index 6995043f6f..aa9b5156e1 100644 --- a/examples/Evolve/Pools.cpp +++ b/examples/Evolve/Pools.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief This file explores the pool options for emp::World.h */ diff --git a/examples/Evolve/Roulette.cpp b/examples/Evolve/Roulette.cpp index 083a8ac025..f660038c52 100644 --- a/examples/Evolve/Roulette.cpp +++ b/examples/Evolve/Roulette.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief This file explores the RouletteSelect() function */ diff --git a/examples/Evolve/ShrinkPop.cpp b/examples/Evolve/ShrinkPop.cpp index 0b36c7b077..1796083a08 100644 --- a/examples/Evolve/ShrinkPop.cpp +++ b/examples/Evolve/ShrinkPop.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief This file explores the grid options for emp::World.hpp */ diff --git a/examples/Evolve/Systematics.cpp b/examples/Evolve/Systematics.cpp index 590a9aed99..c0c981c498 100644 --- a/examples/Evolve/Systematics.cpp +++ b/examples/Evolve/Systematics.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief This file explores the grid options for emp::World.hpp */ diff --git a/examples/Evolve/World.cpp b/examples/Evolve/World.cpp index 0cf80e258f..4ec0e665b7 100644 --- a/examples/Evolve/World.cpp +++ b/examples/Evolve/World.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief This file is an example for using the re-vamped World template. */ diff --git a/examples/Evolve/World2.cpp b/examples/Evolve/World2.cpp index 840446b305..a544c63839 100644 --- a/examples/Evolve/World2.cpp +++ b/examples/Evolve/World2.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief This file is an example for using the re-vamped World template. */ diff --git a/examples/OLD/Empower/Empower.cpp b/examples/OLD/Empower/Empower.cpp index 408705592e..39259a77b9 100644 --- a/examples/OLD/Empower/Empower.cpp +++ b/examples/OLD/Empower/Empower.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * date: 2023 */ /** + * @file * @brief Some examples code for using emp::Empower */ diff --git a/examples/OLD/Empower/Struct.cpp b/examples/OLD/Empower/Struct.cpp index 4668790c24..d1ad900127 100644 --- a/examples/OLD/Empower/Struct.cpp +++ b/examples/OLD/Empower/Struct.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * date: 2023 */ /** + * @file * @brief Some examples code for using emp::Struct */ diff --git a/examples/OLD/Empower/Type.cpp b/examples/OLD/Empower/Type.cpp index 988222ef3f..1538c36a42 100644 --- a/examples/OLD/Empower/Type.cpp +++ b/examples/OLD/Empower/Type.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + * @file * @brief Some examples code for using emp::Type */ diff --git a/examples/OLD/Empower/TypeManager.cpp b/examples/OLD/Empower/TypeManager.cpp index fc90ff2bfa..91d021b5a9 100644 --- a/examples/OLD/Empower/TypeManager.cpp +++ b/examples/OLD/Empower/TypeManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * date: 2023 */ /** + * @file * @brief Some examples code for using emp::TypeManager */ diff --git a/examples/OLD/Random14.cpp b/examples/OLD/Random14.cpp index 90b9656f0b..3e3fb85a31 100644 --- a/examples/OLD/Random14.cpp +++ b/examples/OLD/Random14.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::Random */ diff --git a/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp b/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp index 2202b5d8b7..eeddb71180 100644 --- a/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-AltInst.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Evo.cpp b/examples/OLD/hardware/bak/AvidaGP-Evo.cpp index e3fb97aaea..f21da32f28 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Evo.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Evo.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp b/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp index 0db952f364..d168483d02 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Interpreter.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + * @file */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp b/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp index a376abdb2d..ba22b74ef4 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Mancala-EcoEA.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp b/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp index 467821a976..e3fd3ee63d 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Mancala.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file */ #include diff --git a/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp b/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp index e85779775d..f81e8be9dc 100644 --- a/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp +++ b/examples/OLD/hardware/bak/AvidaGP-Sorting.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file * @brief This is an example file, evolving AvidaGP organisms to sort numbers. */ diff --git a/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp b/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp index f838ce63cd..af194778cc 100644 --- a/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp +++ b/examples/OLD/hardware/bak/EventDrivenGP-ChgEnv.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + * @file */ // ------- DEPRECATED ------- diff --git a/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp b/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp index f631eee9b1..6d6848d517 100644 --- a/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp +++ b/examples/OLD/hardware/bak/EventDrivenGP-Roles.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + * @file */ // ------- DEPRECATED ------- diff --git a/examples/OLD/hardware/bak/EventDrivenGP.cpp b/examples/OLD/hardware/bak/EventDrivenGP.cpp index 285c58f8b6..3223d4935f 100644 --- a/examples/OLD/hardware/bak/EventDrivenGP.cpp +++ b/examples/OLD/hardware/bak/EventDrivenGP.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + * @file */ // ------- DEPRECATED ------- diff --git a/examples/OLD/hardware/bak/Play-Mancala.cpp b/examples/OLD/hardware/bak/Play-Mancala.cpp index 14489db867..4631ca8cde 100644 --- a/examples/OLD/hardware/bak/Play-Mancala.cpp +++ b/examples/OLD/hardware/bak/Play-Mancala.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file */ #include diff --git a/examples/OLD/hardware/bak/RunTournament.cpp b/examples/OLD/hardware/bak/RunTournament.cpp index dd82418ea0..8f0040d3f4 100644 --- a/examples/OLD/hardware/bak/RunTournament.cpp +++ b/examples/OLD/hardware/bak/RunTournament.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file */ #include diff --git a/examples/ProjectTemplate/source/native/project_name.cpp b/examples/ProjectTemplate/source/native/project_name.cpp index c2ee65642c..40ad9bb919 100644 --- a/examples/ProjectTemplate/source/native/project_name.cpp +++ b/examples/ProjectTemplate/source/native/project_name.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + * @file */ // This is the main function for the NATIVE version of this project. diff --git a/examples/ProjectTemplate/source/web/project_name-web.cpp b/examples/ProjectTemplate/source/web/project_name-web.cpp index 40ddeed419..3f2fcf4704 100644 --- a/examples/ProjectTemplate/source/web/project_name-web.cpp +++ b/examples/ProjectTemplate/source/web/project_name-web.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file * * WARNING: the Cookiecutter Empirical Project, which you can find at * https://github.com/devosoft/cookiecutter-empirical-project, should be diff --git a/examples/TO_REPAIR/base/array.cpp b/examples/TO_REPAIR/base/array.cpp index 08d7e208f4..dab7f1b6ee 100644 --- a/examples/TO_REPAIR/base/array.cpp +++ b/examples/TO_REPAIR/base/array.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016-2018 + * date: 2023 */ /** + * @file */ #include "emp/base/array.hpp" diff --git a/examples/TO_REPAIR/config/SettingConfig.cpp b/examples/TO_REPAIR/config/SettingConfig.cpp index 80359e9338..6d2dd0706f 100644 --- a/examples/TO_REPAIR/config/SettingConfig.cpp +++ b/examples/TO_REPAIR/config/SettingConfig.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2020 + * date: 2023 */ /** + * @file * @brief Some examples code for using emp::SettingConfig */ diff --git a/examples/TO_REPAIR/data/DataMap.cpp b/examples/TO_REPAIR/data/DataMap.cpp index a286895aae..926d4ac92d 100644 --- a/examples/TO_REPAIR/data/DataMap.cpp +++ b/examples/TO_REPAIR/data/DataMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019-2020. + * date: 2023 */ /** + * @file * @brief An example file for using DataMaps */ diff --git a/examples/TO_REPAIR/games/Mancala.cpp b/examples/TO_REPAIR/games/Mancala.cpp index f889856b68..a3379a6a2f 100644 --- a/examples/TO_REPAIR/games/Mancala.cpp +++ b/examples/TO_REPAIR/games/Mancala.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file * @brief This is an example file demonstrating Manacala. */ diff --git a/examples/TO_REPAIR/games/Othello.cpp b/examples/TO_REPAIR/games/Othello.cpp index 37a5acbc71..b11738d83d 100644 --- a/examples/TO_REPAIR/games/Othello.cpp +++ b/examples/TO_REPAIR/games/Othello.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017 + * date: 2023 */ /** + * @file * @brief This is an example file demonstrating Othello. */ diff --git a/examples/TO_REPAIR/timing/short_strings.cpp b/examples/TO_REPAIR/timing/short_strings.cpp index 0b775f8ada..92ed7ae92c 100644 --- a/examples/TO_REPAIR/timing/short_strings.cpp +++ b/examples/TO_REPAIR/timing/short_strings.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * date: 2023 */ /** + * @file * @brief Code comparing various methods of accessing entries in an unsorted_map. * * We are comparing the timings for accessing an unsorted map using: diff --git a/examples/base/Ptr.cpp b/examples/base/Ptr.cpp index de03742bea..d9a0bee5d1 100644 --- a/examples/base/Ptr.cpp +++ b/examples/base/Ptr.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file * @brief An example file for using emp::Ptr. */ diff --git a/examples/base/assert.cpp b/examples/base/assert.cpp index b28e00d5fb..2a2f5698f0 100644 --- a/examples/base/assert.cpp +++ b/examples/base/assert.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file * @brief Some examples code demonstrating use of the error system. */ diff --git a/examples/base/errors.cpp b/examples/base/errors.cpp index 743701c6ca..d88e01a0a0 100644 --- a/examples/base/errors.cpp +++ b/examples/base/errors.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code demonstrating use of the error system. */ diff --git a/examples/base/map.cpp b/examples/base/map.cpp index bd08d084ef..47907c08bc 100644 --- a/examples/base/map.cpp +++ b/examples/base/map.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019-2020 */ /** + * @file */ #include diff --git a/examples/base/unordered_map.cpp b/examples/base/unordered_map.cpp index 47a26b8655..8b618532ee 100644 --- a/examples/base/unordered_map.cpp +++ b/examples/base/unordered_map.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/base/vector.cpp b/examples/base/vector.cpp index 9c1836e2f2..51de1ded9d 100644 --- a/examples/base/vector.cpp +++ b/examples/base/vector.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file */ #include diff --git a/examples/bits/BitSet.cpp b/examples/bits/BitSet.cpp index f002671668..6711e27b19 100644 --- a/examples/bits/BitSet.cpp +++ b/examples/bits/BitSet.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017-2018 */ /** + * @file * @brief Some example code for using emp::BitSet */ diff --git a/examples/bits/BitVector.cpp b/examples/bits/BitVector.cpp index ae4aac3017..35909c74e4 100644 --- a/examples/bits/BitVector.cpp +++ b/examples/bits/BitVector.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some example code for using emp::Ptr */ diff --git a/examples/compiler/DFA.cpp b/examples/compiler/DFA.cpp index e6c2381bdb..04ff42284b 100644 --- a/examples/compiler/DFA.cpp +++ b/examples/compiler/DFA.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::DFA */ diff --git a/examples/compiler/Lexer.cpp b/examples/compiler/Lexer.cpp index e3e8063cf3..efcac45c27 100644 --- a/examples/compiler/Lexer.cpp +++ b/examples/compiler/Lexer.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::Lexer */ diff --git a/examples/compiler/NFA.cpp b/examples/compiler/NFA.cpp index 7ed91cb628..abd27eed66 100644 --- a/examples/compiler/NFA.cpp +++ b/examples/compiler/NFA.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::NFA */ diff --git a/examples/compiler/RegEx.cpp b/examples/compiler/RegEx.cpp index acf3703d2c..4822cb3bd3 100644 --- a/examples/compiler/RegEx.cpp +++ b/examples/compiler/RegEx.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file * @brief Some examples code for using emp::RegEx */ diff --git a/examples/compiler/lexer_utils.cpp b/examples/compiler/lexer_utils.cpp index 82fe09e8c2..800662778e 100644 --- a/examples/compiler/lexer_utils.cpp +++ b/examples/compiler/lexer_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Example code for converting string pattern representations. */ diff --git a/examples/config/SettingCombos.cpp b/examples/config/SettingCombos.cpp index 6a471545ec..ef7e75a5bb 100644 --- a/examples/config/SettingCombos.cpp +++ b/examples/config/SettingCombos.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file * @brief Some examples code for using emp::SettingCombos */ diff --git a/examples/config/config.cpp b/examples/config/config.cpp index 7a6eb2b94d..80e1295213 100644 --- a/examples/config/config.cpp +++ b/examples/config/config.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/examples/config/config_setup.hpp b/examples/config/config_setup.hpp index eb161534b7..1eb30bb7a5 100644 --- a/examples/config/config_setup.hpp +++ b/examples/config/config_setup.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * date: 2023 */ /** + */ + * @brief This file provides an example of how to build a configuration class. * * To create a new config from scratch, the format is: diff --git a/examples/config/namespaces.cpp b/examples/config/namespaces.cpp index 71e2403d75..04c9ff3a1f 100644 --- a/examples/config/namespaces.cpp +++ b/examples/config/namespaces.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/examples/config/test-macro.hpp b/examples/config/test-macro.hpp index 9e269b336d..be3fe5b925 100644 --- a/examples/config/test-macro.hpp +++ b/examples/config/test-macro.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + */ + * @brief This is an auto-generated file that defines a set of configuration options. * To create a new config from scratch, the format is: * EMP_BUILD_CONFIG( CLASS_NAME, OPTIONS... ) diff --git a/examples/control/Action.cpp b/examples/control/Action.cpp index 5b704abcba..285094b385 100644 --- a/examples/control/Action.cpp +++ b/examples/control/Action.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::Action */ diff --git a/examples/control/ActionManager.cpp b/examples/control/ActionManager.cpp index b647d37197..fd336a5526 100644 --- a/examples/control/ActionManager.cpp +++ b/examples/control/ActionManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::ActionManager */ diff --git a/examples/control/Signal.cpp b/examples/control/Signal.cpp index 81103805d2..949c8de9e3 100644 --- a/examples/control/Signal.cpp +++ b/examples/control/Signal.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::Signal */ diff --git a/examples/control/SignalControl.cpp b/examples/control/SignalControl.cpp index 38d3cc99c5..bc13077dcc 100644 --- a/examples/control/SignalControl.cpp +++ b/examples/control/SignalControl.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::Signal */ diff --git a/examples/data/DataFile.cpp b/examples/data/DataFile.cpp index 2613f29f54..e581fcf9f9 100644 --- a/examples/data/DataFile.cpp +++ b/examples/data/DataFile.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Examples for DataFile demonstrating how to generate */ diff --git a/examples/data/DataInterface.cpp b/examples/data/DataInterface.cpp index 9ab814a847..6c218bb921 100644 --- a/examples/data/DataInterface.cpp +++ b/examples/data/DataInterface.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Examples for DataInterface demonstrating how to track different types of data. */ diff --git a/examples/data/DataManager.cpp b/examples/data/DataManager.cpp index 2a36070997..0f30513e5c 100644 --- a/examples/data/DataManager.cpp +++ b/examples/data/DataManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Examples for DataNode demonstrating how to track different types of data. */ diff --git a/examples/data/DataNode.cpp b/examples/data/DataNode.cpp index 42ef867970..6448d18719 100644 --- a/examples/data/DataNode.cpp +++ b/examples/data/DataNode.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Examples for DataNode demonstrating how to track different types of data. */ diff --git a/examples/data/Trait.cpp b/examples/data/Trait.cpp index aa249b2817..6ca8b07262 100644 --- a/examples/data/Trait.cpp +++ b/examples/data/Trait.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief An example file for Trait and TraitSet classes. */ diff --git a/examples/data/VarMap.cpp b/examples/data/VarMap.cpp index 692c7ae71b..aa53503dfe 100644 --- a/examples/data/VarMap.cpp +++ b/examples/data/VarMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file * @brief An example file for using VarMap */ diff --git a/examples/datastructs/Cache.cpp b/examples/datastructs/Cache.cpp index 073b293dd6..40fd243726 100644 --- a/examples/datastructs/Cache.cpp +++ b/examples/datastructs/Cache.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::Cache */ diff --git a/examples/datastructs/IndexMap.cpp b/examples/datastructs/IndexMap.cpp index 1cdcc3683a..e6ae66a068 100644 --- a/examples/datastructs/IndexMap.cpp +++ b/examples/datastructs/IndexMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file */ #include diff --git a/examples/datastructs/StringMap.cpp b/examples/datastructs/StringMap.cpp index 9da9cd32c5..3a638ceade 100644 --- a/examples/datastructs/StringMap.cpp +++ b/examples/datastructs/StringMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018-2021 */ /** + * @file * @brief Some examples code for using emp::StringMap and emp::StringID */ diff --git a/examples/datastructs/TimeQueue.cpp b/examples/datastructs/TimeQueue.cpp index e28b909508..055f00edc2 100644 --- a/examples/datastructs/TimeQueue.cpp +++ b/examples/datastructs/TimeQueue.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file * @brief Some examples code for using emp::TimeQueue */ diff --git a/examples/datastructs/TypeMap.cpp b/examples/datastructs/TypeMap.cpp index cdc562666d..01f0bccc5a 100644 --- a/examples/datastructs/TypeMap.cpp +++ b/examples/datastructs/TypeMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Some example code for using emp::BitSet */ diff --git a/examples/datastructs/hash_utils.cpp b/examples/datastructs/hash_utils.cpp index ce1570fdd4..6489b23ff0 100644 --- a/examples/datastructs/hash_utils.cpp +++ b/examples/datastructs/hash_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file * @brief Some examples code for using hash_utils.hpp */ diff --git a/examples/datastructs/ra_set.cpp b/examples/datastructs/ra_set.cpp index 17f4fd3906..c2e0d33eb9 100644 --- a/examples/datastructs/ra_set.cpp +++ b/examples/datastructs/ra_set.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Some example code for using emp::ra_set */ diff --git a/examples/datastructs/tuple_utils.cpp b/examples/datastructs/tuple_utils.cpp index adbeace264..3870bc4a09 100644 --- a/examples/datastructs/tuple_utils.cpp +++ b/examples/datastructs/tuple_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2021 */ /** + * @file * @brief Some examples code for using tuple_utils.hpp */ diff --git a/examples/datastructs/valsort_map.cpp b/examples/datastructs/valsort_map.cpp index 576e225b6d..bca598d74a 100644 --- a/examples/datastructs/valsort_map.cpp +++ b/examples/datastructs/valsort_map.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Some example code for using emp::valsort_map */ diff --git a/examples/datastructs/vector_utils.cpp b/examples/datastructs/vector_utils.cpp index 93ae38df94..1847d84b3a 100644 --- a/examples/datastructs/vector_utils.cpp +++ b/examples/datastructs/vector_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017-2020 */ /** + * @file * @brief Some examples code for using vector_utils.hpp */ diff --git a/examples/functional/AnyFunction.cpp b/examples/functional/AnyFunction.cpp index a22cc6e7d8..d251ae01a0 100644 --- a/examples/functional/AnyFunction.cpp +++ b/examples/functional/AnyFunction.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file * @brief Some example code for using emp::AnyFunction */ diff --git a/examples/functional/GenericFunction.cpp b/examples/functional/GenericFunction.cpp index a803822d73..268eb5f77c 100644 --- a/examples/functional/GenericFunction.cpp +++ b/examples/functional/GenericFunction.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Some example code for using emp::GenericFunction */ diff --git a/examples/functional/flex_function.cpp b/examples/functional/flex_function.cpp index 78d9ba0bab..a5b7474506 100644 --- a/examples/functional/flex_function.cpp +++ b/examples/functional/flex_function.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::flex_function */ diff --git a/examples/functional/memo_function.cpp b/examples/functional/memo_function.cpp index 7161d74401..129236b289 100644 --- a/examples/functional/memo_function.cpp +++ b/examples/functional/memo_function.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::memo_function */ diff --git a/examples/geometry/Surface.cpp b/examples/geometry/Surface.cpp index 9966f54cef..527ec5f0a4 100644 --- a/examples/geometry/Surface.cpp +++ b/examples/geometry/Surface.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file */ #include diff --git a/examples/hardware/AvidaGP.cpp b/examples/hardware/AvidaGP.cpp index 7f460932dc..2f0728bd79 100644 --- a/examples/hardware/AvidaGP.cpp +++ b/examples/hardware/AvidaGP.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief This is example code for using AvidaGP. */ diff --git a/examples/hardware/BitSorter.cpp b/examples/hardware/BitSorter.cpp index d120861112..40f75c5330 100644 --- a/examples/hardware/BitSorter.cpp +++ b/examples/hardware/BitSorter.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief This is example code for using BitSorter.h */ diff --git a/examples/hardware/LinearCode.cpp b/examples/hardware/LinearCode.cpp index d2ebdecbf7..a4070142f3 100644 --- a/examples/hardware/LinearCode.cpp +++ b/examples/hardware/LinearCode.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief This is example code for using LinearCode.hpp */ diff --git a/examples/hardware/SignalGP.cpp b/examples/hardware/SignalGP.cpp index 8913113fbf..2ee7e0d5bf 100644 --- a/examples/hardware/SignalGP.cpp +++ b/examples/hardware/SignalGP.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief This is example code for using EventDrivenGP (SignalGP). */ diff --git a/examples/io/ContiguousStream.cpp b/examples/io/ContiguousStream.cpp index 9ed9e78ade..304b0fa37c 100644 --- a/examples/io/ContiguousStream.cpp +++ b/examples/io/ContiguousStream.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/examples/io/File.cpp b/examples/io/File.cpp index 2868abb7de..0d7c4b88e2 100644 --- a/examples/io/File.cpp +++ b/examples/io/File.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief An example file for using File.hpp */ diff --git a/examples/io/StreamManager.cpp b/examples/io/StreamManager.cpp index 3970a622db..67238c5d62 100644 --- a/examples/io/StreamManager.cpp +++ b/examples/io/StreamManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file * @brief An example file for using StreamManager.hpp */ diff --git a/examples/math/Distribution.cpp b/examples/math/Distribution.cpp index 4c5a4817a8..f15dda9900 100644 --- a/examples/math/Distribution.cpp +++ b/examples/math/Distribution.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018-2020 */ /** + * @file * @brief Some examples code for using emp::Distribution and derived classes. */ diff --git a/examples/math/Random.cpp b/examples/math/Random.cpp index 03e862507d..8bb69dbe0f 100644 --- a/examples/math/Random.cpp +++ b/examples/math/Random.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using emp::Random */ diff --git a/examples/math/Range.cpp b/examples/math/Range.cpp index 82ff6384a3..19dc6296ee 100644 --- a/examples/math/Range.cpp +++ b/examples/math/Range.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file */ #include diff --git a/examples/math/combos.cpp b/examples/math/combos.cpp index 254ad9286a..5731417daa 100644 --- a/examples/math/combos.cpp +++ b/examples/math/combos.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Example code for emp::ComboIDs class, emp::ComboGenerator class, and emp::combos function. */ diff --git a/examples/math/constants.cpp b/examples/math/constants.cpp index 502ed50212..fa13464aec 100644 --- a/examples/math/constants.cpp +++ b/examples/math/constants.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file */ #include diff --git a/examples/math/info_theory.cpp b/examples/math/info_theory.cpp index 39b2329ad9..d6df8a7190 100644 --- a/examples/math/info_theory.cpp +++ b/examples/math/info_theory.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples code for using info theory tools. */ diff --git a/examples/math/math.cpp b/examples/math/math.cpp index 30323e364b..ab376eb444 100644 --- a/examples/math/math.cpp +++ b/examples/math/math.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file * @brief Some examples code for using math functions. */ diff --git a/examples/math/stats.cpp b/examples/math/stats.cpp index 0bc0c116e9..67e754c89d 100644 --- a/examples/math/stats.cpp +++ b/examples/math/stats.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/meta/ConceptWrapper.cpp b/examples/meta/ConceptWrapper.cpp index 341b2ef5f8..0a9d4b3a1b 100644 --- a/examples/meta/ConceptWrapper.cpp +++ b/examples/meta/ConceptWrapper.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Some examples code for using emp::ConceptWrapper template */ diff --git a/examples/meta/TypePack.cpp b/examples/meta/TypePack.cpp index d29b4d7c37..134a3f0f0a 100644 --- a/examples/meta/TypePack.cpp +++ b/examples/meta/TypePack.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2019 */ /** + * @file * @brief Some examples of code using reflection techniques. */ diff --git a/examples/meta/ValPack.cpp b/examples/meta/ValPack.cpp index 19f149a822..3f693c4d71 100644 --- a/examples/meta/ValPack.cpp +++ b/examples/meta/ValPack.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Some example code for using ValPack */ diff --git a/examples/meta/macros.cpp b/examples/meta/macros.cpp index 22ddf38cf9..4445e24e13 100644 --- a/examples/meta/macros.cpp +++ b/examples/meta/macros.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2021 */ /** + * @file */ #include diff --git a/examples/meta/meta.cpp b/examples/meta/meta.cpp index 95e73d3fe9..ddced80d41 100644 --- a/examples/meta/meta.cpp +++ b/examples/meta/meta.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2021 */ /** + * @file */ #include diff --git a/examples/meta/reflection.cpp b/examples/meta/reflection.cpp index acdf9747c3..5988839d57 100644 --- a/examples/meta/reflection.cpp +++ b/examples/meta/reflection.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** + * @file * @brief Some examples of code using reflection techniques. */ diff --git a/examples/prefab/Card.cpp b/examples/prefab/Card.cpp index ee6f753b34..936c6905f3 100644 --- a/examples/prefab/Card.cpp +++ b/examples/prefab/Card.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/CodeBlock.cpp b/examples/prefab/CodeBlock.cpp index 7aa1880fdd..86d3df46d2 100644 --- a/examples/prefab/CodeBlock.cpp +++ b/examples/prefab/CodeBlock.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/Collapse.cpp b/examples/prefab/Collapse.cpp index 02da3fff0b..89b0a4a473 100644 --- a/examples/prefab/Collapse.cpp +++ b/examples/prefab/Collapse.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/CommentBox.cpp b/examples/prefab/CommentBox.cpp index f0edfad450..5b9aba862e 100644 --- a/examples/prefab/CommentBox.cpp +++ b/examples/prefab/CommentBox.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/ConfigPanel.cpp b/examples/prefab/ConfigPanel.cpp index 2a8f85b834..b93b4cfcf7 100644 --- a/examples/prefab/ConfigPanel.cpp +++ b/examples/prefab/ConfigPanel.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/FontAwesomeIcon.cpp b/examples/prefab/FontAwesomeIcon.cpp index 59313a7e60..1ba170baa9 100644 --- a/examples/prefab/FontAwesomeIcon.cpp +++ b/examples/prefab/FontAwesomeIcon.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/LoadingIcon.cpp b/examples/prefab/LoadingIcon.cpp index 7630af6f91..d1f8b2753e 100644 --- a/examples/prefab/LoadingIcon.cpp +++ b/examples/prefab/LoadingIcon.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/LoadingModal.cpp b/examples/prefab/LoadingModal.cpp index 87ff0e5f48..7cdc3bac86 100644 --- a/examples/prefab/LoadingModal.cpp +++ b/examples/prefab/LoadingModal.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/Modal.cpp b/examples/prefab/Modal.cpp index f7bafd43fb..61f761217a 100644 --- a/examples/prefab/Modal.cpp +++ b/examples/prefab/Modal.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/examples/prefab/ReadoutPanel.cpp b/examples/prefab/ReadoutPanel.cpp index 433e9668d8..5da9683d1a 100644 --- a/examples/prefab/ReadoutPanel.cpp +++ b/examples/prefab/ReadoutPanel.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "emp/math/Random.hpp" diff --git a/examples/prefab/ToggleSwitch.cpp b/examples/prefab/ToggleSwitch.cpp index ec71c20cad..332f2d6d14 100644 --- a/examples/prefab/ToggleSwitch.cpp +++ b/examples/prefab/ToggleSwitch.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: ,020 */ /** + * @file */ #include diff --git a/examples/prefab/assets/SampleConfig.hpp b/examples/prefab/assets/SampleConfig.hpp index 773f5c175d..1e804e7989 100644 --- a/examples/prefab/assets/SampleConfig.hpp +++ b/examples/prefab/assets/SampleConfig.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + */ + * @note Adapted from Emily's memic_model project * https://github.com/emilydolson/memic_model */ diff --git a/examples/scholar/Citation.cpp b/examples/scholar/Citation.cpp index 174f8d7ece..df35b48f83 100644 --- a/examples/scholar/Citation.cpp +++ b/examples/scholar/Citation.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/examples/testing/ExampleFail.cpp b/examples/testing/ExampleFail.cpp index 455146b0b7..15f50c5d14 100644 --- a/examples/testing/ExampleFail.cpp +++ b/examples/testing/ExampleFail.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief An example file to show what FAILING unit tests look like, with commentary. */ diff --git a/examples/testing/ExampleFail2.cpp b/examples/testing/ExampleFail2.cpp index 5c4be27bd5..131e62fc0d 100644 --- a/examples/testing/ExampleFail2.cpp +++ b/examples/testing/ExampleFail2.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief An second example file to show what a single FAILING unit test looks like. */ diff --git a/examples/testing/ExamplePass.cpp b/examples/testing/ExamplePass.cpp index d9212bf8b7..b6b2b6933b 100644 --- a/examples/testing/ExamplePass.cpp +++ b/examples/testing/ExamplePass.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief An example file to show what PASSING unit tests look like, with commentary. * * Unit tests can be built easily, with a good bit of flexibility, as described below. diff --git a/examples/testing/Template.cpp b/examples/testing/Template.cpp index 7aa68a9429..11c49f3081 100644 --- a/examples/testing/Template.cpp +++ b/examples/testing/Template.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief A starting point for writing unit tests. */ diff --git a/examples/timing/IndexMap.cpp b/examples/timing/IndexMap.cpp index 2804a5ed1f..080dab3ffc 100644 --- a/examples/timing/IndexMap.cpp +++ b/examples/timing/IndexMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Comparing the ordered versus unordered versions of IndexMap */ diff --git a/examples/timing/Othello.cpp b/examples/timing/Othello.cpp index 1ecebe5aeb..b88f18b45c 100644 --- a/examples/timing/Othello.cpp +++ b/examples/timing/Othello.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file * @brief Code examining the speed of an Othello board. */ diff --git a/examples/timing/Random_timings.cpp b/examples/timing/Random_timings.cpp index 7370848c23..c768c6b221 100644 --- a/examples/timing/Random_timings.cpp +++ b/examples/timing/Random_timings.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file * @brief Some code testing the speed of random operations. */ diff --git a/examples/timing/bit_timings.cpp b/examples/timing/bit_timings.cpp index 795e0fc725..f2882af113 100644 --- a/examples/timing/bit_timings.cpp +++ b/examples/timing/bit_timings.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020-2021 */ /** + * @file * @brief Some code testing the speed of operations on BitSet and BitVector. */ diff --git a/examples/timing/pointers.cpp b/examples/timing/pointers.cpp index fc64b28537..9f82aa9191 100644 --- a/examples/timing/pointers.cpp +++ b/examples/timing/pointers.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file * @brief Some code comparing T*, emp::Ptr, and std::shared_ptr * * We are comparing the timings and code complexity for creating a series of N pointers, diff --git a/examples/tools/TypeTracker.cpp b/examples/tools/TypeTracker.cpp index 1bedd08cd9..00c341b286 100644 --- a/examples/tools/TypeTracker.cpp +++ b/examples/tools/TypeTracker.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file * @brief Some example code for using TypeTracker */ diff --git a/examples/tools/attrs.cpp b/examples/tools/attrs.cpp index 5d7ee03a5a..d16b25c25a 100644 --- a/examples/tools/attrs.cpp +++ b/examples/tools/attrs.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/examples/web/Animate.cpp b/examples/web/Animate.cpp index 63b157981d..de506c46e8 100644 --- a/examples/web/Animate.cpp +++ b/examples/web/Animate.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2018 */ /** + * @file */ #include "emp/math/Random.hpp" diff --git a/examples/web/Animate2.cpp b/examples/web/Animate2.cpp index 8fabe6751d..ca707d9df3 100644 --- a/examples/web/Animate2.cpp +++ b/examples/web/Animate2.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2018 */ /** + * @file */ #include "emp/math/Random.hpp" diff --git a/examples/web/Attributes.cpp b/examples/web/Attributes.cpp index c6e63b419f..b5797e0ac0 100644 --- a/examples/web/Attributes.cpp +++ b/examples/web/Attributes.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/web/web.hpp" diff --git a/examples/web/Canvas.cpp b/examples/web/Canvas.cpp index 6c0ffd56b0..dcd619ef50 100644 --- a/examples/web/Canvas.cpp +++ b/examples/web/Canvas.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2018 */ /** + * @file */ #include "emp/math/Random.hpp" diff --git a/examples/web/DP.cpp b/examples/web/DP.cpp index 7f9fc20a85..ad2248fc44 100644 --- a/examples/web/DP.cpp +++ b/examples/web/DP.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file */ #include diff --git a/examples/web/Div.cpp b/examples/web/Div.cpp index 65d40b8156..48a9a983c1 100644 --- a/examples/web/Div.cpp +++ b/examples/web/Div.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/web/commands.hpp" diff --git a/examples/web/Example.cpp b/examples/web/Example.cpp index 156852d2a9..83ad6e28e1 100644 --- a/examples/web/Example.cpp +++ b/examples/web/Example.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file */ #include "emp/web/web.hpp" diff --git a/examples/web/Font.cpp b/examples/web/Font.cpp index c8fa7f356b..a324fcd3cd 100644 --- a/examples/web/Font.cpp +++ b/examples/web/Font.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file */ #include "emp/web/web.hpp" diff --git a/examples/web/Graph.cpp b/examples/web/Graph.cpp index 8dae9e1b88..23f698104a 100644 --- a/examples/web/Graph.cpp +++ b/examples/web/Graph.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017 */ /** + * @file */ #include "emp/base/vector.hpp" diff --git a/examples/web/Hello.cpp b/examples/web/Hello.cpp index e8ae673686..69278aeca2 100644 --- a/examples/web/Hello.cpp +++ b/examples/web/Hello.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** + * @file */ #include "emp/web/web.hpp" diff --git a/examples/web/Image.cpp b/examples/web/Image.cpp index 24282f825b..2d1ab1469b 100644 --- a/examples/web/Image.cpp +++ b/examples/web/Image.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** + * @file */ #include "emp/math/Random.hpp" diff --git a/examples/web/RPS.cpp b/examples/web/RPS.cpp index bc9d0dae54..5a848f91e1 100644 --- a/examples/web/RPS.cpp +++ b/examples/web/RPS.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2018 */ /** + * @file */ #include "emp/geometry/Surface.hpp" diff --git a/examples/web/Sudoku.cpp b/examples/web/Sudoku.cpp index 1900ebd307..f831bf192b 100644 --- a/examples/web/Sudoku.cpp +++ b/examples/web/Sudoku.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/base/vector.hpp" diff --git a/examples/web/Table.cpp b/examples/web/Table.cpp index e0f841737f..5df3900c90 100644 --- a/examples/web/Table.cpp +++ b/examples/web/Table.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/web/web.hpp" diff --git a/examples/web/TextArea.cpp b/examples/web/TextArea.cpp index 473f86b9b8..4855d6ae84 100644 --- a/examples/web/TextArea.cpp +++ b/examples/web/TextArea.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/web/web.hpp" diff --git a/examples/web/Tween.cpp b/examples/web/Tween.cpp index 38d49714e0..e603ae2604 100644 --- a/examples/web/Tween.cpp +++ b/examples/web/Tween.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/web/Tween.hpp" diff --git a/examples/web/Web.cpp b/examples/web/Web.cpp index 3698af613c..e4e7474664 100644 --- a/examples/web/Web.cpp +++ b/examples/web/Web.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/debug/alert.hpp" diff --git a/examples/web/assert.cpp b/examples/web/assert.cpp index 1c5cfb54f9..ab6a13ed60 100644 --- a/examples/web/assert.cpp +++ b/examples/web/assert.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include "emp/base/assert.hpp" diff --git a/examples/web/keypress.cpp b/examples/web/keypress.cpp index 8d99f648b8..c5528fd09b 100644 --- a/examples/web/keypress.cpp +++ b/examples/web/keypress.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2017 */ /** + * @file */ #include "emp/web/KeypressManager.hpp" diff --git a/tests/Evolve/NK-const.cpp b/tests/Evolve/NK-const.cpp index a4cbf16d1c..284801496f 100644 --- a/tests/Evolve/NK-const.cpp +++ b/tests/Evolve/NK-const.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/NK.cpp b/tests/Evolve/NK.cpp index ab203c9e19..6d89248e8c 100644 --- a/tests/Evolve/NK.cpp +++ b/tests/Evolve/NK.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #define EMP_TDEBUG diff --git a/tests/Evolve/OEE.cpp b/tests/Evolve/OEE.cpp index 4d806c4ac7..c63fa646ab 100644 --- a/tests/Evolve/OEE.cpp +++ b/tests/Evolve/OEE.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #ifndef EMP_TRACK_MEM diff --git a/tests/Evolve/Resource.cpp b/tests/Evolve/Resource.cpp index 9691edeabf..81afbaa6b3 100644 --- a/tests/Evolve/Resource.cpp +++ b/tests/Evolve/Resource.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/StateGrid.cpp b/tests/Evolve/StateGrid.cpp index e4377fab7c..fde3a00bc1 100644 --- a/tests/Evolve/StateGrid.cpp +++ b/tests/Evolve/StateGrid.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/Systematics.cpp b/tests/Evolve/Systematics.cpp index baf78749ee..c5c73ad631 100644 --- a/tests/Evolve/Systematics.cpp +++ b/tests/Evolve/Systematics.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/Evolve/World.cpp b/tests/Evolve/World.cpp index bedd69ceef..d1e13af5c9 100644 --- a/tests/Evolve/World.cpp +++ b/tests/Evolve/World.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/World_iterator.cpp b/tests/Evolve/World_iterator.cpp index 6189d53393..dde6ba555e 100644 --- a/tests/Evolve/World_iterator.cpp +++ b/tests/Evolve/World_iterator.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/World_output.cpp b/tests/Evolve/World_output.cpp index 915466e6a2..e61e7b67bc 100644 --- a/tests/Evolve/World_output.cpp +++ b/tests/Evolve/World_output.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/Evolve/World_reflect.cpp b/tests/Evolve/World_reflect.cpp index 2316e42a0a..a57793e407 100644 --- a/tests/Evolve/World_reflect.cpp +++ b/tests/Evolve/World_reflect.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/Evolve/World_select.cpp b/tests/Evolve/World_select.cpp index 7510faee49..4e2d5edeeb 100644 --- a/tests/Evolve/World_select.cpp +++ b/tests/Evolve/World_select.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/Evolve/World_structure.cpp b/tests/Evolve/World_structure.cpp index 1d39137e77..4bb53bb498 100644 --- a/tests/Evolve/World_structure.cpp +++ b/tests/Evolve/World_structure.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #define EMP_TDEBUG diff --git a/tests/OLD/Slideshow/Slideshow.cpp b/tests/OLD/Slideshow/Slideshow.cpp index 60d77380d4..e9af79edf5 100644 --- a/tests/OLD/Slideshow/Slideshow.cpp +++ b/tests/OLD/Slideshow/Slideshow.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Animate.cpp b/tests/OLD/UI/Animate.cpp index 2fbd3a7a2d..77e365b22e 100644 --- a/tests/OLD/UI/Animate.cpp +++ b/tests/OLD/UI/Animate.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../tools/Random.h" diff --git a/tests/OLD/UI/Canvas.cpp b/tests/OLD/UI/Canvas.cpp index 9c21042097..89594ed676 100644 --- a/tests/OLD/UI/Canvas.cpp +++ b/tests/OLD/UI/Canvas.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Element.cpp b/tests/OLD/UI/Element.cpp index 5f50a12c31..628157b1f5 100644 --- a/tests/OLD/UI/Element.cpp +++ b/tests/OLD/UI/Element.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../jquery/jquery.h" diff --git a/tests/OLD/UI/ElementSlate.cpp b/tests/OLD/UI/ElementSlate.cpp index 432d66e18d..835a53b709 100644 --- a/tests/OLD/UI/ElementSlate.cpp +++ b/tests/OLD/UI/ElementSlate.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/ElementTable.cpp b/tests/OLD/UI/ElementTable.cpp index 48252e3031..bd8ba5d846 100644 --- a/tests/OLD/UI/ElementTable.cpp +++ b/tests/OLD/UI/ElementTable.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Example.cpp b/tests/OLD/UI/Example.cpp index c19cdba020..eafd6b880f 100644 --- a/tests/OLD/UI/Example.cpp +++ b/tests/OLD/UI/Example.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/Example2.cpp b/tests/OLD/UI/Example2.cpp index c491f57fe9..e50680699b 100644 --- a/tests/OLD/UI/Example2.cpp +++ b/tests/OLD/UI/Example2.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../UI/UI.h" diff --git a/tests/OLD/UI/base_tests/test2.cpp b/tests/OLD/UI/base_tests/test2.cpp index cc323fe254..61a9e178e8 100644 --- a/tests/OLD/UI/base_tests/test2.cpp +++ b/tests/OLD/UI/base_tests/test2.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/OLD/UI/base_tests/test3.cpp b/tests/OLD/UI/base_tests/test3.cpp index 866fea5ccb..559434808d 100644 --- a/tests/OLD/UI/base_tests/test3.cpp +++ b/tests/OLD/UI/base_tests/test3.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/OLD/UI/base_tests/test4.cpp b/tests/OLD/UI/base_tests/test4.cpp index e60f43e14b..d8493b06f6 100644 --- a/tests/OLD/UI/base_tests/test4.cpp +++ b/tests/OLD/UI/base_tests/test4.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/OLD/UI/canvas_utils.cpp b/tests/OLD/UI/canvas_utils.cpp index b9bc46c550..4069758f0d 100644 --- a/tests/OLD/UI/canvas_utils.cpp +++ b/tests/OLD/UI/canvas_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "../../tools/Random.h" diff --git a/tests/OLD/UI/events.cpp b/tests/OLD/UI/events.cpp index b6476295c9..04e9b47853 100644 --- a/tests/OLD/UI/events.cpp +++ b/tests/OLD/UI/events.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/OLD/UI/mini_evoke.cpp b/tests/OLD/UI/mini_evoke.cpp index ac7b074f95..301851a4c3 100644 --- a/tests/OLD/UI/mini_evoke.cpp +++ b/tests/OLD/UI/mini_evoke.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/OLD/kinetic/BatchDraw.cpp b/tests/OLD/kinetic/BatchDraw.cpp index 54717245b9..3477894d60 100644 --- a/tests/OLD/kinetic/BatchDraw.cpp +++ b/tests/OLD/kinetic/BatchDraw.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include diff --git a/tests/OLD/kinetic/LayerManagement.cpp b/tests/OLD/kinetic/LayerManagement.cpp index 3468377dd9..f33e4e36da 100644 --- a/tests/OLD/kinetic/LayerManagement.cpp +++ b/tests/OLD/kinetic/LayerManagement.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include diff --git a/tests/OLD/kinetic/Simple.cpp b/tests/OLD/kinetic/Simple.cpp index 4a6c2c8d42..6f23a8f46f 100644 --- a/tests/OLD/kinetic/Simple.cpp +++ b/tests/OLD/kinetic/Simple.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include diff --git a/tests/OLD/kinetic/VaderImage.cpp b/tests/OLD/kinetic/VaderImage.cpp index 52a0f47b72..edc8b787ce 100644 --- a/tests/OLD/kinetic/VaderImage.cpp +++ b/tests/OLD/kinetic/VaderImage.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include diff --git a/tests/OLD/kinetic/test.cpp b/tests/OLD/kinetic/test.cpp index 4c43ba9935..25ac1310a1 100644 --- a/tests/OLD/kinetic/test.cpp +++ b/tests/OLD/kinetic/test.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include diff --git a/tests/base/MapProxy.cpp b/tests/base/MapProxy.cpp index 445929769f..e5b387550b 100644 --- a/tests/base/MapProxy.cpp +++ b/tests/base/MapProxy.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/base/Ptr.cpp b/tests/base/Ptr.cpp index dc015b16b1..bae0b8889d 100644 --- a/tests/base/Ptr.cpp +++ b/tests/base/Ptr.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ //#ifndef EMP_TRACK_MEM diff --git a/tests/base/always_assert.cpp b/tests/base/always_assert.cpp index 6ca5db6568..942aac68ae 100644 --- a/tests/base/always_assert.cpp +++ b/tests/base/always_assert.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/base/always_assert_warning.cpp b/tests/base/always_assert_warning.cpp index 41319a4129..3037774cd5 100644 --- a/tests/base/always_assert_warning.cpp +++ b/tests/base/always_assert_warning.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/base/array.cpp b/tests/base/array.cpp index 4ab8dfd8cd..c229bc9995 100644 --- a/tests/base/array.cpp +++ b/tests/base/array.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file */ #include diff --git a/tests/base/assert.cpp b/tests/base/assert.cpp index ff3c27abb5..2ecd212e5c 100644 --- a/tests/base/assert.cpp +++ b/tests/base/assert.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file */ #undef NDEBUG diff --git a/tests/base/assert_warning.cpp b/tests/base/assert_warning.cpp index 95425001a1..4a133b8fd7 100644 --- a/tests/base/assert_warning.cpp +++ b/tests/base/assert_warning.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #undef NDEBUG diff --git a/tests/base/error.cpp b/tests/base/error.cpp index b5a298e399..c0a0422555 100644 --- a/tests/base/error.cpp +++ b/tests/base/error.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2021 */ /** + * @file */ #undef NDEBUG diff --git a/tests/base/errors.cpp b/tests/base/errors.cpp index a7e74f4973..8f755426c8 100644 --- a/tests/base/errors.cpp +++ b/tests/base/errors.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file */ #include diff --git a/tests/base/map.cpp b/tests/base/map.cpp index 750a1c9506..e5a68d4dda 100644 --- a/tests/base/map.cpp +++ b/tests/base/map.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/base/optional.cpp b/tests/base/optional.cpp index e158c3d945..4ee8ec247f 100644 --- a/tests/base/optional.cpp +++ b/tests/base/optional.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/base/unordered_map.cpp b/tests/base/unordered_map.cpp index 3b0e2fce4e..b2315631b2 100644 --- a/tests/base/unordered_map.cpp +++ b/tests/base/unordered_map.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/base/vector.cpp b/tests/base/vector.cpp index 85002f1c95..324351daa9 100644 --- a/tests/base/vector.cpp +++ b/tests/base/vector.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/bits/BitArray.cpp b/tests/bits/BitArray.cpp index 8583e78896..1830dd7307 100644 --- a/tests/bits/BitArray.cpp +++ b/tests/bits/BitArray.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #define EMP_DECORATE(X) [X] diff --git a/tests/bits/BitMatrix.cpp b/tests/bits/BitMatrix.cpp index 24d127dcbc..4094b78b35 100644 --- a/tests/bits/BitMatrix.cpp +++ b/tests/bits/BitMatrix.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file * */ diff --git a/tests/bits/BitSet.cpp b/tests/bits/BitSet.cpp index 28ff21117f..a15c5bbce9 100644 --- a/tests/bits/BitSet.cpp +++ b/tests/bits/BitSet.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #define EMP_DECORATE(X) [X] diff --git a/tests/bits/BitVector.cpp b/tests/bits/BitVector.cpp index 04c80dc45a..ec27fe9033 100644 --- a/tests/bits/BitVector.cpp +++ b/tests/bits/BitVector.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/bits/bitset_utils.cpp b/tests/bits/bitset_utils.cpp index cce509bc2a..ebf16bdb23 100644 --- a/tests/bits/bitset_utils.cpp +++ b/tests/bits/bitset_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/compiler/DFA.cpp b/tests/compiler/DFA.cpp index b8e301def1..77f5a4d04a 100644 --- a/tests/compiler/DFA.cpp +++ b/tests/compiler/DFA.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/compiler/Lexer.cpp b/tests/compiler/Lexer.cpp index fb9aaad339..6500374a8a 100644 --- a/tests/compiler/Lexer.cpp +++ b/tests/compiler/Lexer.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/compiler/NFA.cpp b/tests/compiler/NFA.cpp index 672c349ffa..f9cf4c0077 100644 --- a/tests/compiler/NFA.cpp +++ b/tests/compiler/NFA.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/compiler/RegEx.cpp b/tests/compiler/RegEx.cpp index f7618dea2b..8da02096fc 100644 --- a/tests/compiler/RegEx.cpp +++ b/tests/compiler/RegEx.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/compiler/lexer_utils.cpp b/tests/compiler/lexer_utils.cpp index 0c015b6b0a..3dc98ce6ed 100644 --- a/tests/compiler/lexer_utils.cpp +++ b/tests/compiler/lexer_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/config/ArgManager.cpp b/tests/config/ArgManager.cpp index a4ac1d6cf5..27e75750cf 100644 --- a/tests/config/ArgManager.cpp +++ b/tests/config/ArgManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/ConfigManager.cpp b/tests/config/ConfigManager.cpp index 070f88630e..9ed2922cc4 100644 --- a/tests/config/ConfigManager.cpp +++ b/tests/config/ConfigManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/SettingCombos.cpp b/tests/config/SettingCombos.cpp index b5a26f7058..66b004320f 100644 --- a/tests/config/SettingCombos.cpp +++ b/tests/config/SettingCombos.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/SettingConfig.cpp b/tests/config/SettingConfig.cpp index a987f42b07..85e4c15026 100644 --- a/tests/config/SettingConfig.cpp +++ b/tests/config/SettingConfig.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/assets/config_setup.hpp b/tests/config/assets/config_setup.hpp index 8a6e96f29c..3875eb8ef3 100644 --- a/tests/config/assets/config_setup.hpp +++ b/tests/config/assets/config_setup.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * date: 2023 */ /** + */ + * @brief This file provides an example of how to build a configuration class. * * To create a new config from scratch, the format is: diff --git a/tests/config/command_line.cpp b/tests/config/command_line.cpp index e2738e3001..df5fae03e0 100644 --- a/tests/config/command_line.cpp +++ b/tests/config/command_line.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/config.cpp b/tests/config/config.cpp index ff35dab4d7..d6bd9949ce 100644 --- a/tests/config/config.cpp +++ b/tests/config/config.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/config/config_utils.cpp b/tests/config/config_utils.cpp index 804deb00a2..159be8049b 100644 --- a/tests/config/config_utils.cpp +++ b/tests/config/config_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/Action.cpp b/tests/control/Action.cpp index 0d6fab0a4b..259a3d771c 100644 --- a/tests/control/Action.cpp +++ b/tests/control/Action.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/ActionManager.cpp b/tests/control/ActionManager.cpp index deefad08db..c231bd5ee7 100644 --- a/tests/control/ActionManager.cpp +++ b/tests/control/ActionManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/Signal.cpp b/tests/control/Signal.cpp index 853e0e95da..673714580b 100644 --- a/tests/control/Signal.cpp +++ b/tests/control/Signal.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/SignalControl.cpp b/tests/control/SignalControl.cpp index a912cdc15d..3b9016c06c 100644 --- a/tests/control/SignalControl.cpp +++ b/tests/control/SignalControl.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/control/SignalManager.cpp b/tests/control/SignalManager.cpp index 920a81267d..972692272a 100644 --- a/tests/control/SignalManager.cpp +++ b/tests/control/SignalManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/DataFile.cpp b/tests/data/DataFile.cpp index 32d6f3b304..79473a0fde 100644 --- a/tests/data/DataFile.cpp +++ b/tests/data/DataFile.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataInterface.cpp b/tests/data/DataInterface.cpp index c37688d117..80fe8cf956 100644 --- a/tests/data/DataInterface.cpp +++ b/tests/data/DataInterface.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataLayout.cpp b/tests/data/DataLayout.cpp index 6c56d64748..ca28d1906d 100644 --- a/tests/data/DataLayout.cpp +++ b/tests/data/DataLayout.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/DataLog.cpp b/tests/data/DataLog.cpp index 03aa072213..18f87c5e80 100644 --- a/tests/data/DataLog.cpp +++ b/tests/data/DataLog.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataManager.cpp b/tests/data/DataManager.cpp index 1f50dc5312..fc968c4d3a 100644 --- a/tests/data/DataManager.cpp +++ b/tests/data/DataManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/DataMap.cpp b/tests/data/DataMap.cpp index 510435bca9..0a48b48248 100644 --- a/tests/data/DataMap.cpp +++ b/tests/data/DataMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/DataNode.cpp b/tests/data/DataNode.cpp index 00990d96f2..1f83b36a9a 100644 --- a/tests/data/DataNode.cpp +++ b/tests/data/DataNode.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #ifndef EMP_TRACK_MEM diff --git a/tests/data/MemoryImage.cpp b/tests/data/MemoryImage.cpp index c81bd48c9f..768b091a39 100644 --- a/tests/data/MemoryImage.cpp +++ b/tests/data/MemoryImage.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/Trait.cpp b/tests/data/Trait.cpp index 772b4717ab..029994526b 100644 --- a/tests/data/Trait.cpp +++ b/tests/data/Trait.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/data/VarMap.cpp b/tests/data/VarMap.cpp index a3f2b4e40e..d2f2c6d1cb 100644 --- a/tests/data/VarMap.cpp +++ b/tests/data/VarMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/BloomFilter.cpp b/tests/datastructs/BloomFilter.cpp index 763aa91363..c90c28d951 100644 --- a/tests/datastructs/BloomFilter.cpp +++ b/tests/datastructs/BloomFilter.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/Bool.cpp b/tests/datastructs/Bool.cpp index 4cd2c7903e..5dd6e966e7 100644 --- a/tests/datastructs/Bool.cpp +++ b/tests/datastructs/Bool.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/Cache.cpp b/tests/datastructs/Cache.cpp index a7b708e377..e04ed1552b 100644 --- a/tests/datastructs/Cache.cpp +++ b/tests/datastructs/Cache.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/DynamicString.cpp b/tests/datastructs/DynamicString.cpp index 5d54b604ac..a1e4de8bf7 100644 --- a/tests/datastructs/DynamicString.cpp +++ b/tests/datastructs/DynamicString.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/Graph.cpp b/tests/datastructs/Graph.cpp index 0ba4abd6a2..5bd31f671e 100644 --- a/tests/datastructs/Graph.cpp +++ b/tests/datastructs/Graph.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/IndexMap.cpp b/tests/datastructs/IndexMap.cpp index 177c9d4067..3d7acffccd 100644 --- a/tests/datastructs/IndexMap.cpp +++ b/tests/datastructs/IndexMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/QueueCache.cpp b/tests/datastructs/QueueCache.cpp index 39c2ecc8f8..3699608c23 100644 --- a/tests/datastructs/QueueCache.cpp +++ b/tests/datastructs/QueueCache.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/SmallFifoMap.cpp b/tests/datastructs/SmallFifoMap.cpp index b42fd58b9a..dc295ba55d 100644 --- a/tests/datastructs/SmallFifoMap.cpp +++ b/tests/datastructs/SmallFifoMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/SmallVector.cpp b/tests/datastructs/SmallVector.cpp index 00dd1d89c9..53265a2887 100644 --- a/tests/datastructs/SmallVector.cpp +++ b/tests/datastructs/SmallVector.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file * * Adapted in part from the LLVM Project, under the Apache License v2.0 with * LLVM Exceptions. See https://llvm.org/LICENSE.txt for license information. diff --git a/tests/datastructs/StringMap.cpp b/tests/datastructs/StringMap.cpp index 1e7eaff8c0..ffc636f6da 100644 --- a/tests/datastructs/StringMap.cpp +++ b/tests/datastructs/StringMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/TimeQueue.cpp b/tests/datastructs/TimeQueue.cpp index a70dd059ea..3969d78218 100644 --- a/tests/datastructs/TimeQueue.cpp +++ b/tests/datastructs/TimeQueue.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/TypeMap.cpp b/tests/datastructs/TypeMap.cpp index 9f74f03e02..b6849f7a6a 100644 --- a/tests/datastructs/TypeMap.cpp +++ b/tests/datastructs/TypeMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/UnorderedIndexMap.cpp b/tests/datastructs/UnorderedIndexMap.cpp index 3bbbb55313..28a28f6277 100644 --- a/tests/datastructs/UnorderedIndexMap.cpp +++ b/tests/datastructs/UnorderedIndexMap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/graph_utils.cpp b/tests/datastructs/graph_utils.cpp index 2a4b6e5bbc..003a799839 100644 --- a/tests/datastructs/graph_utils.cpp +++ b/tests/datastructs/graph_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/hash_utils.cpp b/tests/datastructs/hash_utils.cpp index 723fd78695..de6fd748e5 100644 --- a/tests/datastructs/hash_utils.cpp +++ b/tests/datastructs/hash_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/map_utils.cpp b/tests/datastructs/map_utils.cpp index d3b78eeba6..252a7c67cb 100644 --- a/tests/datastructs/map_utils.cpp +++ b/tests/datastructs/map_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/ra_set.cpp b/tests/datastructs/ra_set.cpp index 0f7b0a29a5..9fbcb03fa6 100644 --- a/tests/datastructs/ra_set.cpp +++ b/tests/datastructs/ra_set.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/reference_vector.cpp b/tests/datastructs/reference_vector.cpp index 56078f69a2..0333c1e68b 100644 --- a/tests/datastructs/reference_vector.cpp +++ b/tests/datastructs/reference_vector.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/set_utils.cpp b/tests/datastructs/set_utils.cpp index 8b675dd516..17b1ea0409 100644 --- a/tests/datastructs/set_utils.cpp +++ b/tests/datastructs/set_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/tuple_struct.cpp b/tests/datastructs/tuple_struct.cpp index f9cd32ebf2..308c5ca094 100644 --- a/tests/datastructs/tuple_struct.cpp +++ b/tests/datastructs/tuple_struct.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/tuple_utils.cpp b/tests/datastructs/tuple_utils.cpp index a167a3378c..6435239898 100644 --- a/tests/datastructs/tuple_utils.cpp +++ b/tests/datastructs/tuple_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/datastructs/valsort_map.cpp b/tests/datastructs/valsort_map.cpp index e4431a749c..e7b3554867 100644 --- a/tests/datastructs/valsort_map.cpp +++ b/tests/datastructs/valsort_map.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/datastructs/vector_utils.cpp b/tests/datastructs/vector_utils.cpp index 98985620e6..2b4c9c23ec 100644 --- a/tests/datastructs/vector_utils.cpp +++ b/tests/datastructs/vector_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/debug/alert.cpp b/tests/debug/alert.cpp index 6baed8dadc..648b2dc9c7 100644 --- a/tests/debug/alert.cpp +++ b/tests/debug/alert.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/debug/debug.cpp b/tests/debug/debug.cpp index c98bafca96..1db0f28c63 100644 --- a/tests/debug/debug.cpp +++ b/tests/debug/debug.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/debug/mem_track.cpp b/tests/debug/mem_track.cpp index e818363072..65f19b3f7f 100644 --- a/tests/debug/mem_track.cpp +++ b/tests/debug/mem_track.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #define EMP_TRACK_MEM diff --git a/tests/functional/AnyFunction.cpp b/tests/functional/AnyFunction.cpp index 355c7ca0df..f5fcd6bb4b 100644 --- a/tests/functional/AnyFunction.cpp +++ b/tests/functional/AnyFunction.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/functional/FunctionSet.cpp b/tests/functional/FunctionSet.cpp index eef3291d83..cb5d3c3a64 100644 --- a/tests/functional/FunctionSet.cpp +++ b/tests/functional/FunctionSet.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/functional/GenericFunction.cpp b/tests/functional/GenericFunction.cpp index 006cc69787..79780d3cee 100644 --- a/tests/functional/GenericFunction.cpp +++ b/tests/functional/GenericFunction.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/functional/flex_function.cpp b/tests/functional/flex_function.cpp index 2f79ac2b6f..a905301630 100644 --- a/tests/functional/flex_function.cpp +++ b/tests/functional/flex_function.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/functional/memo_function.cpp b/tests/functional/memo_function.cpp index 7f2bca27a6..d6659f4798 100644 --- a/tests/functional/memo_function.cpp +++ b/tests/functional/memo_function.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file * @note doing any sort of copying of memo_functions seems to give my terminal a stack overflow error (using mingw on windows 10) * @MAM not sure who left this comment about stack overflow on mingw... */ diff --git a/tests/games/Mancala.cpp b/tests/games/Mancala.cpp index fd3fac35fd..f450a4aede 100644 --- a/tests/games/Mancala.cpp +++ b/tests/games/Mancala.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/games/Othello.cpp b/tests/games/Othello.cpp index 3a9783b3b5..717042fa67 100644 --- a/tests/games/Othello.cpp +++ b/tests/games/Othello.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/games/Othello8.cpp b/tests/games/Othello8.cpp index f955280ba7..a68697c810 100644 --- a/tests/games/Othello8.cpp +++ b/tests/games/Othello8.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/games/PayoffMatrix.cpp b/tests/games/PayoffMatrix.cpp index 04b84a29e1..571ac60010 100644 --- a/tests/games/PayoffMatrix.cpp +++ b/tests/games/PayoffMatrix.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Angle2D.cpp b/tests/geometry/Angle2D.cpp index edc3ab4f07..d7e55b6797 100644 --- a/tests/geometry/Angle2D.cpp +++ b/tests/geometry/Angle2D.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Body2D.cpp b/tests/geometry/Body2D.cpp index e900290e07..6ff906b7a7 100644 --- a/tests/geometry/Body2D.cpp +++ b/tests/geometry/Body2D.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/geometry/Circle2D.cpp b/tests/geometry/Circle2D.cpp index a5a6b4c9f2..695bba7bcf 100644 --- a/tests/geometry/Circle2D.cpp +++ b/tests/geometry/Circle2D.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/geometry/Physics2D.cpp b/tests/geometry/Physics2D.cpp index 6e583d088c..dce7f9992a 100644 --- a/tests/geometry/Physics2D.cpp +++ b/tests/geometry/Physics2D.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Point2D.cpp b/tests/geometry/Point2D.cpp index c2c997abfa..2fa934fb60 100644 --- a/tests/geometry/Point2D.cpp +++ b/tests/geometry/Point2D.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/geometry/Surface.cpp b/tests/geometry/Surface.cpp index 99c18a4167..a8d3b879b7 100644 --- a/tests/geometry/Surface.cpp +++ b/tests/geometry/Surface.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/geometry/Surface2D.cpp b/tests/geometry/Surface2D.cpp index ebc25c3710..0bc570d599 100644 --- a/tests/geometry/Surface2D.cpp +++ b/tests/geometry/Surface2D.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/hardware/BitSorter.cpp b/tests/hardware/BitSorter.cpp index 1f53606aca..e276aa8b9d 100644 --- a/tests/hardware/BitSorter.cpp +++ b/tests/hardware/BitSorter.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/hardware/LinearCode.cpp b/tests/hardware/LinearCode.cpp index 02a08dd1b8..8a870606e6 100644 --- a/tests/hardware/LinearCode.cpp +++ b/tests/hardware/LinearCode.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/hardware/avida_gp.cpp b/tests/hardware/avida_gp.cpp index 89e27dcc2c..0ab65e322d 100644 --- a/tests/hardware/avida_gp.cpp +++ b/tests/hardware/avida_gp.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/hardware/event_driven_gp.cpp b/tests/hardware/event_driven_gp.cpp index 657883b27b..05ed403d9f 100644 --- a/tests/hardware/event_driven_gp.cpp +++ b/tests/hardware/event_driven_gp.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/io/ContiguousStream.cpp b/tests/io/ContiguousStream.cpp index 7183c31773..c80044c25b 100644 --- a/tests/io/ContiguousStream.cpp +++ b/tests/io/ContiguousStream.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/io/File.cpp b/tests/io/File.cpp index ab625990bf..6d80a02130 100644 --- a/tests/io/File.cpp +++ b/tests/io/File.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/io/MemoryIStream.cpp b/tests/io/MemoryIStream.cpp index 778ec4abfc..56ebbcdc1e 100644 --- a/tests/io/MemoryIStream.cpp +++ b/tests/io/MemoryIStream.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/io/NullStream.cpp b/tests/io/NullStream.cpp index 0a5c718535..4da0292fe7 100644 --- a/tests/io/NullStream.cpp +++ b/tests/io/NullStream.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/io/StreamManager.cpp b/tests/io/StreamManager.cpp index c5a95b9c69..bfa6cebdae 100644 --- a/tests/io/StreamManager.cpp +++ b/tests/io/StreamManager.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/io/ascii_utils.cpp b/tests/io/ascii_utils.cpp index 1cba1c57e3..e43c3d7226 100644 --- a/tests/io/ascii_utils.cpp +++ b/tests/io/ascii_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/io/serialize.cpp b/tests/io/serialize.cpp index 1f25548c7b..8ba3ccd494 100644 --- a/tests/io/serialize.cpp +++ b/tests/io/serialize.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/matching/MatchBin.cpp b/tests/matching/MatchBin.cpp index f91d184fc5..ced7cbecb6 100644 --- a/tests/matching/MatchBin.cpp +++ b/tests/matching/MatchBin.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/matching/MatchBin_logging.cpp b/tests/matching/MatchBin_logging.cpp index b089907a01..a78d2ca669 100644 --- a/tests/matching/MatchBin_logging.cpp +++ b/tests/matching/MatchBin_logging.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2020 */ /** + * @file */ #define EMP_DECORATE(X) [X] diff --git a/tests/matching/MatchDepository.cpp b/tests/matching/MatchDepository.cpp index 79553fdbaf..d17a6f9ca7 100644 --- a/tests/matching/MatchDepository.cpp +++ b/tests/matching/MatchDepository.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/matching/RankedSelector.cpp b/tests/matching/RankedSelector.cpp index 65670a20b2..958dc9d3f6 100644 --- a/tests/matching/RankedSelector.cpp +++ b/tests/matching/RankedSelector.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/matching/_DepositoryEntry.cpp b/tests/matching/_DepositoryEntry.cpp index 5c314d3693..44f606d250 100644 --- a/tests/matching/_DepositoryEntry.cpp +++ b/tests/matching/_DepositoryEntry.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/matching/matchbin_utils.cpp b/tests/matching/matchbin_utils.cpp index 030cea5b88..7e04a7f407 100644 --- a/tests/matching/matchbin_utils.cpp +++ b/tests/matching/matchbin_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020-2021 */ /** + * @file */ #include diff --git a/tests/math/Distribution.cpp b/tests/math/Distribution.cpp index 87acbdc339..9730d34dd7 100644 --- a/tests/math/Distribution.cpp +++ b/tests/math/Distribution.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/math/Random.cpp b/tests/math/Random.cpp index e68163b8c8..7e5c94c2da 100644 --- a/tests/math/Random.cpp +++ b/tests/math/Random.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/math/Range.cpp b/tests/math/Range.cpp index 794f133aab..f49ab4af66 100644 --- a/tests/math/Range.cpp +++ b/tests/math/Range.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/math/combos.cpp b/tests/math/combos.cpp index 00559cd6c2..eaf5b5d5ef 100644 --- a/tests/math/combos.cpp +++ b/tests/math/combos.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/math/distances.cpp b/tests/math/distances.cpp index 414e63e01d..145f3fac54 100644 --- a/tests/math/distances.cpp +++ b/tests/math/distances.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/math/info_theory.cpp b/tests/math/info_theory.cpp index f95bff1d69..e849cdc1cf 100644 --- a/tests/math/info_theory.cpp +++ b/tests/math/info_theory.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/math/math.cpp b/tests/math/math.cpp index e492a9aa18..a01db2e41a 100644 --- a/tests/math/math.cpp +++ b/tests/math/math.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/math/random_utils.cpp b/tests/math/random_utils.cpp index f12cca38a8..5aa63b0dd6 100644 --- a/tests/math/random_utils.cpp +++ b/tests/math/random_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/math/sequence_utils.cpp b/tests/math/sequence_utils.cpp index 05fae07e93..6dd0017141 100644 --- a/tests/math/sequence_utils.cpp +++ b/tests/math/sequence_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/math/spatial_stats.cpp b/tests/math/spatial_stats.cpp index 56b1d1d3de..8a95b702b9 100644 --- a/tests/math/spatial_stats.cpp +++ b/tests/math/spatial_stats.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/math/stats.cpp b/tests/math/stats.cpp index cdcb3b07be..5527657569 100644 --- a/tests/math/stats.cpp +++ b/tests/math/stats.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/meta/ConceptWrapper.cpp b/tests/meta/ConceptWrapper.cpp index 14250996ec..0d4574c0e1 100644 --- a/tests/meta/ConceptWrapper.cpp +++ b/tests/meta/ConceptWrapper.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/meta/TypeID.cpp b/tests/meta/TypeID.cpp index d8d3b1d335..6302411970 100644 --- a/tests/meta/TypeID.cpp +++ b/tests/meta/TypeID.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/meta/TypePack.cpp b/tests/meta/TypePack.cpp index dd927dad45..a2adec16c8 100644 --- a/tests/meta/TypePack.cpp +++ b/tests/meta/TypePack.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/meta/ValPack.cpp b/tests/meta/ValPack.cpp index c6859fbffe..e8000176b0 100644 --- a/tests/meta/ValPack.cpp +++ b/tests/meta/ValPack.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/meta/macro_math.cpp b/tests/meta/macro_math.cpp index 4a4b351c18..b8ed348a5f 100644 --- a/tests/meta/macro_math.cpp +++ b/tests/meta/macro_math.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2018 */ /** + * @file */ #include diff --git a/tests/meta/macros.cpp b/tests/meta/macros.cpp index aab1e4ea27..1526546bc0 100644 --- a/tests/meta/macros.cpp +++ b/tests/meta/macros.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2020 */ /** + * @file */ #include diff --git a/tests/meta/meta.cpp b/tests/meta/meta.cpp index 2a5aacf78f..dfd983e923 100644 --- a/tests/meta/meta.cpp +++ b/tests/meta/meta.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/meta/reflection.cpp b/tests/meta/reflection.cpp index e0e32d8b99..ee2262331c 100644 --- a/tests/meta/reflection.cpp +++ b/tests/meta/reflection.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/meta/type_traits.cpp b/tests/meta/type_traits.cpp index 8b27ed927e..221b5ed1b9 100644 --- a/tests/meta/type_traits.cpp +++ b/tests/meta/type_traits.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/scholar/Author.cpp b/tests/scholar/Author.cpp index 54a56a45b5..ca8791d9d2 100644 --- a/tests/scholar/Author.cpp +++ b/tests/scholar/Author.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/scholar/Bibliography.cpp b/tests/scholar/Bibliography.cpp index 2329849658..1047d7d498 100644 --- a/tests/scholar/Bibliography.cpp +++ b/tests/scholar/Bibliography.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/scholar/Citation.cpp b/tests/scholar/Citation.cpp index 8798c43eb7..c986168991 100644 --- a/tests/scholar/Citation.cpp +++ b/tests/scholar/Citation.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/testing/unit_tests.cpp b/tests/testing/unit_tests.cpp index cbb0146c71..ecfa034eb8 100644 --- a/tests/testing/unit_tests.cpp +++ b/tests/testing/unit_tests.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/SolveState.cpp b/tests/tools/SolveState.cpp index c11d6626ba..9344bd0c7d 100644 --- a/tests/tools/SolveState.cpp +++ b/tests/tools/SolveState.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/tools/TypeTracker.cpp b/tests/tools/TypeTracker.cpp index 67a19c6a90..f758c88149 100644 --- a/tests/tools/TypeTracker.cpp +++ b/tests/tools/TypeTracker.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/tools/attrs.cpp b/tests/tools/attrs.cpp index f2f0b91a42..71779add50 100644 --- a/tests/tools/attrs.cpp +++ b/tests/tools/attrs.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/hash_namify.cpp b/tests/tools/hash_namify.cpp index 7e7291ac9a..d0c9e24727 100644 --- a/tests/tools/hash_namify.cpp +++ b/tests/tools/hash_namify.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/keyname_utils.cpp b/tests/tools/keyname_utils.cpp index 577269a145..73cc41ffcf 100644 --- a/tests/tools/keyname_utils.cpp +++ b/tests/tools/keyname_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/tools/string_utils.cpp b/tests/tools/string_utils.cpp index 282af2fb73..ca530eb2a8 100644 --- a/tests/tools/string_utils.cpp +++ b/tests/tools/string_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include "../third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/timing.cpp b/tests/tools/timing.cpp index 4cb0c88f4e..5f24037602 100644 --- a/tests/tools/timing.cpp +++ b/tests/tools/timing.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/tools/unique.cpp b/tests/tools/unique.cpp index 542a2328f1..4300557e31 100644 --- a/tests/tools/unique.cpp +++ b/tests/tools/unique.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/tools/value_utils.cpp b/tests/tools/value_utils.cpp index fb1f91c1e9..b6d63d08ea 100644 --- a/tests/tools/value_utils.cpp +++ b/tests/tools/value_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "third-party/Catch/single_include/catch2/catch.hpp" diff --git a/tests/web/Card.cpp b/tests/web/Card.cpp index 129de14ec8..60d05b15d6 100644 --- a/tests/web/Card.cpp +++ b/tests/web/Card.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/ClickCollapseDemo.cpp b/tests/web/ClickCollapseDemo.cpp index a609b765c8..48425c02c1 100644 --- a/tests/web/ClickCollapseDemo.cpp +++ b/tests/web/ClickCollapseDemo.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file * @brief This file can be used to test triggering a mouse click by the user. * * It appears that .click() can be used to trigger a click. diff --git a/tests/web/ClickCounterDemo.cpp b/tests/web/ClickCounterDemo.cpp index d44f47449a..56cc7b6a14 100644 --- a/tests/web/ClickCounterDemo.cpp +++ b/tests/web/ClickCounterDemo.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file * @brief This file provides a simple example of clicking a web * element at multiple points within a test. * diff --git a/tests/web/CodeBlock.cpp b/tests/web/CodeBlock.cpp index 0468960867..70ec4c0f74 100644 --- a/tests/web/CodeBlock.cpp +++ b/tests/web/CodeBlock.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/Collapse.cpp b/tests/web/Collapse.cpp index cf6f090738..76ab33d5c0 100644 --- a/tests/web/Collapse.cpp +++ b/tests/web/Collapse.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/CommentBox.cpp b/tests/web/CommentBox.cpp index 3735b06379..eaddb47544 100644 --- a/tests/web/CommentBox.cpp +++ b/tests/web/CommentBox.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/ConfigPanel.cpp b/tests/web/ConfigPanel.cpp index b5450975fb..72460a5ffd 100644 --- a/tests/web/ConfigPanel.cpp +++ b/tests/web/ConfigPanel.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/Element.cpp b/tests/web/Element.cpp index 35bc472f4c..3d0ffeea66 100644 --- a/tests/web/Element.cpp +++ b/tests/web/Element.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/FontAwesomeIcon.cpp b/tests/web/FontAwesomeIcon.cpp index a054d6e34b..d44703bea8 100644 --- a/tests/web/FontAwesomeIcon.cpp +++ b/tests/web/FontAwesomeIcon.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/GetUrlParams.cpp b/tests/web/GetUrlParams.cpp index 8e788150d1..4716af77db 100644 --- a/tests/web/GetUrlParams.cpp +++ b/tests/web/GetUrlParams.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2019 */ /** + * @file */ #include diff --git a/tests/web/JSWrap.cpp b/tests/web/JSWrap.cpp index 68e0f2a0dd..96d9114f3a 100644 --- a/tests/web/JSWrap.cpp +++ b/tests/web/JSWrap.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2015-2020 */ /** + * @file */ #include diff --git a/tests/web/LoadingIcon.cpp b/tests/web/LoadingIcon.cpp index 13c73d8b09..e375f2eba6 100644 --- a/tests/web/LoadingIcon.cpp +++ b/tests/web/LoadingIcon.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/LoadingModal.cpp b/tests/web/LoadingModal.cpp index f9eac60f08..afd0058dc6 100644 --- a/tests/web/LoadingModal.cpp +++ b/tests/web/LoadingModal.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/Modal.cpp b/tests/web/Modal.cpp index 558885c495..d1b522d029 100644 --- a/tests/web/Modal.cpp +++ b/tests/web/Modal.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/ReadoutPanel.cpp b/tests/web/ReadoutPanel.cpp index 48b5419f65..539c4ef947 100644 --- a/tests/web/ReadoutPanel.cpp +++ b/tests/web/ReadoutPanel.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include "emp/base/assert.hpp" diff --git a/tests/web/TextFeed.cpp b/tests/web/TextFeed.cpp index 0008d4040d..e101cca855 100644 --- a/tests/web/TextFeed.cpp +++ b/tests/web/TextFeed.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/ToggleSwitch.cpp b/tests/web/ToggleSwitch.cpp index 642435f89b..dca48c8734 100644 --- a/tests/web/ToggleSwitch.cpp +++ b/tests/web/ToggleSwitch.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/ValueBox.cpp b/tests/web/ValueBox.cpp index 826d32bf61..17f9da80ec 100644 --- a/tests/web/ValueBox.cpp +++ b/tests/web/ValueBox.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ #include diff --git a/tests/web/Widget.cpp b/tests/web/Widget.cpp index 1597d815b1..46de3ae1ea 100644 --- a/tests/web/Widget.cpp +++ b/tests/web/Widget.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2020 */ /** + * @file */ #include diff --git a/tests/web/assets/Config.hpp b/tests/web/assets/Config.hpp index 7ae4a58586..dd413ec0ea 100644 --- a/tests/web/assets/Config.hpp +++ b/tests/web/assets/Config.hpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2023 */ /** + */ + * */ diff --git a/tests/web/color_map.cpp b/tests/web/color_map.cpp index 9e16a2022e..3caaebdd79 100644 --- a/tests/web/color_map.cpp +++ b/tests/web/color_map.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2017 */ /** + * @file */ #include diff --git a/tests/web/js_utils.cpp b/tests/web/js_utils.cpp index fb926055ab..013a7cba24 100644 --- a/tests/web/js_utils.cpp +++ b/tests/web/js_utils.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016-2020 */ /** + * @file */ #include diff --git a/tests/web/visualizations.cpp b/tests/web/visualizations.cpp index 59f5039542..42269656a6 100644 --- a/tests/web/visualizations.cpp +++ b/tests/web/visualizations.cpp @@ -1,9 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file */ // This file is a monstrosity, because including multiple emscripten-generated From 9c8f35ff758eb24fa10b1956b65004bfb8dda0bc Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Thu, 29 Jun 2023 15:00:28 -0400 Subject: [PATCH 14/80] Minor docs fixes --- doc/library/base/base.md | 3 +-- doc/library/bits/bits.md | 24 +++++++++++---------- doc/library/compiler/compiler.md | 31 ++++++++++++++-------------- doc/library/evolve/evolve.md | 4 ++-- doc/library/functional/functional.md | 6 +++--- 5 files changed, 35 insertions(+), 33 deletions(-) diff --git a/doc/library/base/base.md b/doc/library/base/base.md index 940bb558c9..a3e9deb0b9 100644 --- a/doc/library/base/base.md +++ b/doc/library/base/base.md @@ -36,8 +36,7 @@ emp::array array({1,2,3}); // You can treat this just like an std::array ``` -Empirical asserts ------------------ +## Empirical asserts These asserts function similarly to normal asserts, with a few important additional features: - If compiled with Emscripten they will provide diff --git a/doc/library/bits/bits.md b/doc/library/bits/bits.md index 4dad8383c9..4106c4ad65 100644 --- a/doc/library/bits/bits.md +++ b/doc/library/bits/bits.md @@ -4,16 +4,21 @@ ```{eval-rst} .. doxygenfile:: emp/bits/BitMatrix.hpp - :sections: briefdescription detaileddescription -.. doxygenclass:: emp::BitMatrix - :members: - :undoc-members: + :project: Empirical +``` + +## BitArray + +```{eval-rst} +.. doxygenfile:: emp/bits/BitArray.hpp + :project: Empirical ``` ## BitSet ```{eval-rst} -.. doxygentypedef:: emp::BitSet +.. doxygenfile:: emp/bits/BitSet.hpp + :project: Empirical ``` ## BitSet Utilities @@ -21,14 +26,11 @@ ```{eval-rst} .. doxygenfile:: emp/bits/bitset_utils.hpp :project: Empirical - ``` ## BitVector ```{eval-rst} -.. doxygenclass:: emp::BitVector - :sections: briefdescription detaileddescription - :members: - :undoc-members: -``` +.. doxygenfile:: emp/bits/BitVector.hpp + :project: Empirical +``` diff --git a/doc/library/compiler/compiler.md b/doc/library/compiler/compiler.md index 4ac2965805..f36e7a177e 100644 --- a/doc/library/compiler/compiler.md +++ b/doc/library/compiler/compiler.md @@ -4,38 +4,39 @@ ```{eval-rst} .. doxygenfile:: emp/compiler/DFA.hpp - :project: Empirical - :no-link: ``` ## Lexer Utilities ```{eval-rst} -.. doxygenfile:: emp/compiler/lexer_utils.hpp - :project: Empirical - :no-link: +.. doxygenfile:: emp/compiler/lexer_utils.hpp ``` ## Lexer ```{eval-rst} .. doxygenfile:: emp/compiler/Lexer.hpp - :project: Empirical - :no-link: ``` -## NonDeterministic Finite Automata +## Non-Deterministic Finite Automata -```{eval-rst} + + + diff --git a/doc/library/evolve/evolve.md b/doc/library/evolve/evolve.md index 89e6470a10..c3bb4a65df 100644 --- a/doc/library/evolve/evolve.md +++ b/doc/library/evolve/evolve.md @@ -1,6 +1,6 @@ # Evolution tools - +``` diff --git a/doc/library/functional/functional.md b/doc/library/functional/functional.md index b2515743f1..bd0d64ccec 100644 --- a/doc/library/functional/functional.md +++ b/doc/library/functional/functional.md @@ -3,7 +3,7 @@ ## Flex Functions ```{eval-rst} -.. doxygenfile:: tools/flex_function.hpp +.. doxygenfile:: functional/flex_function.hpp :project: Empirical :no-link: ``` @@ -19,7 +19,7 @@ ## Generic Functions ```{eval-rst} -.. doxygenfile:: emp/functional/GenericFunctions.hpp +.. doxygenfile:: emp/functional/GenericFunction.hpp :project: Empirical :no-link: ``` @@ -27,7 +27,7 @@ ## Memoized Functions ```{eval-rst} -.. doxygenfile:: emp/functional/memo_functions.hpp +.. doxygenfile:: emp/functional/memo_function.hpp :project: Empirical :no-link: ``` From 76fb3e78c19a2761059aa5fbe9c6acbcd4b705e8 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 14:45:43 -0400 Subject: [PATCH 15/80] Update to systematics docs --- doc/library/evolve/{systematics_docs.md => _systematics_docs.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/library/evolve/{systematics_docs.md => _systematics_docs.md} (100%) diff --git a/doc/library/evolve/systematics_docs.md b/doc/library/evolve/_systematics_docs.md similarity index 100% rename from doc/library/evolve/systematics_docs.md rename to doc/library/evolve/_systematics_docs.md From aa731e2190501672f19fb9955ccfe140b8cabe1e Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 15:38:55 -0400 Subject: [PATCH 16/80] Documentation fixes --- .readthedocs.yaml | 1 + Doxyfile | 23 +- Makefile | 1 + doc/QuickStartGuides/todos/todo.md | 2 +- doc/conf.py | 1 + doc/filter_namespace | 28 ++ doc/library/base/base.md | 63 +++- doc/library/bits/bits.md | 36 +- doc/library/compiler/compiler.md | 44 +-- doc/library/data/data.md | 33 +- doc/library/datastructs/datastructs.md | 91 +---- doc/library/debug/debug.md | 35 +- doc/library/evolve/_systematics_docs.md | 252 -------------- doc/library/evolve/evolve.md | 270 +++++++++++++-- doc/library/functional/functional.md | 33 +- doc/library/index.md | 18 +- doc/library/io/io.md | 25 +- doc/library/math/math.md | 73 +--- doc/library/prefab/prefab.rst | 355 -------------------- doc/library/testing/testing.md | 11 +- doc/library/tools/tools.md | 33 +- doc/library/web/d3/d3-intro.md | 78 ++--- doc/library/web/web.md | 239 +------------ doc/make_md.py | 53 +++ doc/requirements.in | 3 +- doc/requirements.txt | 22 +- include/emp/Evolve/Systematics.hpp | 3 + include/emp/Evolve/World.hpp | 3 +- include/emp/base/MapProxy.hpp | 7 +- include/emp/base/Ptr.hpp | 16 +- include/emp/base/always_assert.hpp | 2 +- include/emp/base/always_assert_warning.hpp | 2 +- include/emp/base/array.hpp | 4 +- include/emp/base/emscripten_assert.hpp | 3 + include/emp/base/optional.hpp | 3 +- include/emp/bits/BitArray.hpp | 220 ++++++------ include/emp/bits/BitMatrix.hpp | 25 +- include/emp/bits/BitVector.hpp | 42 +-- include/emp/compiler/lexer_utils.hpp | 11 +- include/emp/config/config_web_interface.hpp | 2 + include/emp/control/Signal.hpp | 6 +- include/emp/data/DataNode.hpp | 78 ++++- include/emp/datastructs/BloomFilter.hpp | 5 +- include/emp/datastructs/DynamicString.hpp | 4 +- include/emp/datastructs/Graph.hpp | 6 +- include/emp/datastructs/SmallVector.hpp | 14 +- include/emp/functional/AnyFunction.hpp | 3 +- include/emp/functional/GenericFunction.hpp | 3 +- include/emp/geometry/Point2D.hpp | 2 + include/emp/hardware/AvidaGP.hpp | 6 + include/emp/hardware/BitSorter.hpp | 4 +- include/emp/hardware/EventDrivenGP.hpp | 2 + include/emp/math/Random.hpp | 6 +- include/emp/meta/TypeID.hpp | 3 +- include/emp/meta/type_traits.hpp | 2 + include/emp/prefab/CommentBox.hpp | 4 +- include/emp/prefab/ConfigPanel.hpp | 6 +- include/emp/prefab/ValueBox.hpp | 4 +- include/emp/web/CanvasShape.hpp | 10 +- include/emp/web/DocuExtras.hpp | 6 +- include/emp/web/Table.hpp | 32 +- include/emp/web/Text.hpp | 26 +- include/emp/web/TextFeed.hpp | 14 +- 63 files changed, 888 insertions(+), 1524 deletions(-) create mode 100755 doc/filter_namespace delete mode 100644 doc/library/evolve/_systematics_docs.md delete mode 100644 doc/library/prefab/prefab.rst create mode 100644 doc/make_md.py diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 267e5bd584..0abbb86079 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -13,6 +13,7 @@ build: jobs: pre_build: - doxygen + - cd doc && python make_md.py # Build documentation in the docs/ directory with Sphinx sphinx: diff --git a/Doxyfile b/Doxyfile index 94c6d2809d..7b9507c5f0 100644 --- a/Doxyfile +++ b/Doxyfile @@ -155,7 +155,7 @@ ALWAYS_DETAILED_SEC = NO # operators of the base classes will not be shown. # The default value is: NO. -INLINE_INHERITED_MEMB = YES +INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the @@ -380,7 +380,7 @@ AUTOLINK_SUPPORT = YES # diagrams that involve STL classes more complete and accurate. # The default value is: NO. -BUILTIN_STL_SUPPORT = NO +BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. @@ -540,7 +540,7 @@ EXTRACT_STATIC = YES # for Java sources. # The default value is: YES. -EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are @@ -588,7 +588,7 @@ HIDE_UNDOC_CLASSES = NO # documentation. # The default value is: NO. -HIDE_FRIEND_COMPOUNDS = NO +HIDE_FRIEND_COMPOUNDS = YES # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these @@ -691,7 +691,7 @@ SORT_BRIEF_DOCS = NO # detailed member documentation. # The default value is: NO. -SORT_MEMBERS_CTORS_1ST = NO +SORT_MEMBERS_CTORS_1ST = YES # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will @@ -921,7 +921,7 @@ WARN_LINE_FORMAT = "at line $line of file $file" # specified the warning and error messages are written to standard output # (stdout). -WARN_LOGFILE = +WARN_LOGFILE = doxygen_warnings.txt #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -1020,7 +1020,12 @@ EXCLUDE_PATTERNS = */demos/* \ # ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = EMP_* \ - EM_* + EM_* \ + internal \ + detail \ + decltypedetail \ + __* + # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include @@ -1072,7 +1077,7 @@ IMAGE_PATH = # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. -INPUT_FILTER = +INPUT_FILTER = doc/filter_namespace # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the @@ -2535,7 +2540,7 @@ INCLUDE_GRAPH = YES # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -INCLUDED_BY_GRAPH = YES +INCLUDED_BY_GRAPH = NO # If the CALL_GRAPH tag is set to YES then doxygen will generate a call # dependency graph for every global function or class method. diff --git a/Makefile b/Makefile index 4659e1e347..c2c8a002f4 100644 --- a/Makefile +++ b/Makefile @@ -46,6 +46,7 @@ test-cookiecutter: ../cookiecutter-empirical-project doc: doxygen + cd doc && python make_md.py cd doc && make html coverage coverage: diff --git a/doc/QuickStartGuides/todos/todo.md b/doc/QuickStartGuides/todos/todo.md index 528da1f6a1..a197deb93e 100644 --- a/doc/QuickStartGuides/todos/todo.md +++ b/doc/QuickStartGuides/todos/todo.md @@ -1,7 +1,7 @@ # Work In Progress The following pages are a work in progress 🚧. -[Contributions](contribution-guidelines-and-review) are welcome! +[Contributions](../../dev/contribution-guidelines-and-review) are welcome! ```{toctree} X-CreateWorld diff --git a/doc/conf.py b/doc/conf.py index 000d309aab..84ae412a22 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -41,6 +41,7 @@ 'sphinx_rtd_theme', 'breathe', 'myst_parser', + 'sphinx_tippy' ] myst_heading_anchors = 4 diff --git a/doc/filter_namespace b/doc/filter_namespace new file mode 100755 index 0000000000..d4c528fd7a --- /dev/null +++ b/doc/filter_namespace @@ -0,0 +1,28 @@ +#!/usr/bin/python3 + +import sys + +with open(sys.argv[1]) as infile: + open_braces = 0 + namespace_removed = 0 + for line in infile: + line = line.strip() + if line.startswith("namespace emp {") or \ + line.startswith("namespace web {") or \ + line.startswith("namespace prefab {") or \ + line.startswith("namespace emp::prefab {") or \ + line.startswith("namespace evo {"): + namespace_removed += 1 + open_braces = 1 + print() + elif namespace_removed and line == "}": + print() + namespace_removed -= 1 + else: + if namespace_removed: + open_braces += line.count("{") + open_braces -= line.count("}") + line = line.replace("emp::", "") + line = line.replace("web::", "") + line = line.replace("prefab::", "") + print(line) \ No newline at end of file diff --git a/doc/library/base/base.md b/doc/library/base/base.md index a3e9deb0b9..840bf37cef 100644 --- a/doc/library/base/base.md +++ b/doc/library/base/base.md @@ -39,13 +39,12 @@ emp::array array({1,2,3}); ## Empirical asserts These asserts function similarly to normal asserts, with a few important -additional features: - If compiled with Emscripten they will provide -pop-up alerts when run in a web browser. - emp_assert can take -additional arguments. If the assert is triggered, those extra arguments -will be evaluated and printed. - if NDEBUG -or- EMP_NDEBUG is defined, -the expression in emp_assert() is not evaluated. - if EMP_TDEBUG is -defined, emp_assert() goes into test mode and records failures, but -does not abort. (useful for unit tests of asserts) +additional features: + +- If compiled with Emscripten they will provide pop-up alerts when run in a web browser. +- emp_assert can take additional arguments. If the assert is triggered, those extra arguments will be evaluated and printed. +- if NDEBUG **or** EMP_NDEBUG is defined, the expression in emp_assert() is not evaluated. +- if EMP_TDEBUG is defined, emp_assert() goes into test mode and records failures, but does not abort. (useful for unit tests of asserts) Example: @@ -59,20 +58,41 @@ emp_assert(a==5, a); When compiled in debug mode (i.e. without the -DNDEBUG flag), this will trigger an assertion error and print the value of a. -### emp_assert API (base/assert.hpp) +Empirical also has an emscripten-specific assert, which will only trigger an error when the code was compiled with Emscripten: + +```cpp +#include "Empirical/include/emp/base/emscripten_assert.hpp" + +int a = 6; +// If compiled in with emscripten in debug mode, +// this will print a warning and the value of a +emp_emscripten_assert(a==5, a); -```{eval-rst} -.. doxygendefine:: emp_assert - :project: Empirical - :no-link: ``` -```{eval-rst} -.. doxygendefine:: emp_emscripten_assert - :project: Empirical - :no-link: +If you want your assert to be triggered outside of debug mode, you can use {c:func}`emp_always_assert`. + +## Empirical Warnings + +These work very similar to Empirical asserts, except they do not throw assertion errors. When compiled in debug mode, they will print a warning (and any desired additional information) on failure but program execution will continue. When compiled outside of debug mode they do nothing. + +```cpp +#include "Empirical/include/emp/base/assert_warning.hpp" +#include + +int a = 6; +// If compiled in debug mode, this will print a +// warning and the value of a +emp_assert_warning(a==5, a); + +// This will get printed because no assertion +// error will be triggered +std::cout << "Still running!" << std::endl; + ``` +If you want your warning to be triggered outside of debug mode, you can use {c:func}`emp_always_assert_warning`. + ## Empirical pointers Ptr objects behave as normal pointers under most conditions. However, if @@ -95,3 +115,14 @@ int_ptr.New(123456); // Store the value 123456 in int_ptr. std::cout << "*int_ptr = " << *int_ptr << std::endl; int_ptr.Delete(); ``` + +## API + + + +```{eval-rst} +.. toctree:: + :glob: + + api/* +``` diff --git a/doc/library/bits/bits.md b/doc/library/bits/bits.md index 4106c4ad65..daf71df77a 100644 --- a/doc/library/bits/bits.md +++ b/doc/library/bits/bits.md @@ -1,36 +1,14 @@ # Bits -## BitMatrix +Stuff about bits -```{eval-rst} -.. doxygenfile:: emp/bits/BitMatrix.hpp - :project: Empirical -``` - -## BitArray +## API + + ```{eval-rst} -.. doxygenfile:: emp/bits/BitArray.hpp - :project: Empirical -``` +.. toctree:: + :glob: -## BitSet - -```{eval-rst} -.. doxygenfile:: emp/bits/BitSet.hpp - :project: Empirical + api/* ``` - -## BitSet Utilities - -```{eval-rst} -.. doxygenfile:: emp/bits/bitset_utils.hpp - :project: Empirical -``` - -## BitVector - -```{eval-rst} -.. doxygenfile:: emp/bits/BitVector.hpp - :project: Empirical -``` diff --git a/doc/library/compiler/compiler.md b/doc/library/compiler/compiler.md index f36e7a177e..935ae6f615 100644 --- a/doc/library/compiler/compiler.md +++ b/doc/library/compiler/compiler.md @@ -1,42 +1,12 @@ # Compiler -## Deterministic Finite Automata +## API + + ```{eval-rst} -.. doxygenfile:: emp/compiler/DFA.hpp -``` +.. toctree:: + :glob: -## Lexer Utilities - -```{eval-rst} -.. doxygenfile:: emp/compiler/lexer_utils.hpp -``` - -## Lexer - -```{eval-rst} -.. doxygenfile:: emp/compiler/Lexer.hpp -``` - -## Non-Deterministic Finite Automata - - - - + api/* +``` \ No newline at end of file diff --git a/doc/library/data/data.md b/doc/library/data/data.md index cca68494a8..9d64cea237 100644 --- a/doc/library/data/data.md +++ b/doc/library/data/data.md @@ -29,34 +29,11 @@ for collecting data over the course of a computational experiment. ## Data Tools API -### DataNodes - -```{eval-rst} -.. doxygenfile:: emp/data/DataNode.hpp - :project: Empirical - :no-link: -``` - -### DataManagers - -```{eval-rst} -.. doxygenfile:: emp/data/DataManager.hpp - :project: Empirical - :no-link: -``` - -### DataInterfaces - + + ```{eval-rst} -.. doxygenfile:: emp/data/DataInterface.hpp - :project: Empirical - :no-link: -``` - -### DataFiles +.. toctree:: + :glob: -```{eval-rst} -.. doxygenfile:: emp/data/DataFile.hpp - :project: Empirical - :no-link: + api/* ``` diff --git a/doc/library/datastructs/datastructs.md b/doc/library/datastructs/datastructs.md index 0a13ca9580..ccdf664412 100644 --- a/doc/library/datastructs/datastructs.md +++ b/doc/library/datastructs/datastructs.md @@ -1,89 +1,12 @@ # Data structures -## Cache +## API + + ```{eval-rst} -.. doxygenfile:: emp/datastructs/Cache.hpp - :project: Empirical - :no-link: -``` +.. toctree:: + :glob: -## Dynamic Strings - -```{eval-rst} -.. doxygenfile:: emp/datastructs/DynamicString.hpp - :project: Empirical - :no-link: -``` - -## Graph Utilities - -```{eval-rst} -.. doxygenfile:: emp/datastructs/graph_utils.hpp - :project: Empirical - :no-link: -``` - -## Graphs - -```{eval-rst} -.. doxygenfile:: emp/datastructs/Graph.hpp - :project: Empirical - :no-link: -``` - -## Index Map - -```{eval-rst} -.. doxygenfile:: emp/datastructs/IndexMap.hpp - :project: Empirical - :no-link: -``` - -## Map Utilities - -```{eval-rst} -.. doxygenfile:: emp/datastructs/map_utils.hpp - :project: Empirical - :no-link: -``` - -## RandomAccess Set - -```{eval-rst} -.. doxygenfile:: emp/datastructs/ra_set.hpp - :project: Empirical - :no-link: -``` - -## Set Utilities - -```{eval-rst} -.. doxygenfile:: emp/datastructs/set_utils.hpp - :project: Empirical - :no-link: -``` - -## Tuple Struct - -```{eval-rst} -.. doxygenfile:: emp/datastructs/tuple_struct.hpp - :project: Empirical - :no-link: -``` - -## Tuple Utilities - -```{eval-rst} -.. doxygenfile:: emp/datastructs/tuple_utils.hpp - :project: Empirical - :no-link: -``` - -## Vector Utilities - -```{eval-rst} -.. doxygenfile:: emp/datastructs/vector_utils.hpp - :project: Empirical - :no-link: -``` + api/* +``` \ No newline at end of file diff --git a/doc/library/debug/debug.md b/doc/library/debug/debug.md index 85ee6fb6d0..86f1310c6a 100644 --- a/doc/library/debug/debug.md +++ b/doc/library/debug/debug.md @@ -1,33 +1,12 @@ # Debug -## Alert +## API + + ```{eval-rst} -.. doxygenfile:: emp/debug/alert.hpp - :project: Empirical - :no-link: -``` +.. toctree:: + :glob: -## Debugging Tools - -```{eval-rst} -.. doxygenfile:: emp/debug/debug.hpp - :project: Empirical - :no-link: -``` - -## Errors - -```{eval-rst} -.. doxygenfile:: emp/debug/errors.hpp - :project: Empirical - :no-link: -``` - -## Memory Tracking - -```{eval-rst} -.. doxygenfile:: emp/debug/mem_track.hpp - :project: Empirical - :no-link: -``` + api/* +``` \ No newline at end of file diff --git a/doc/library/evolve/_systematics_docs.md b/doc/library/evolve/_systematics_docs.md deleted file mode 100644 index 354f5096c2..0000000000 --- a/doc/library/evolve/_systematics_docs.md +++ /dev/null @@ -1,252 +0,0 @@ - -The systematics manager tracks phylogenetic relationships among organisms within a digital -evolution system. For asexual systems, these relationships forma phylogenetic tree -(phylogeny). Systems with recombination (i.e. sexual reproduction systems) are not -yet supported. One of the major benefits of doing *in silico* evolution experiments (instead of or in addition to laboratory or field experiments) is that they allow perfect measurement of quantities that can only be inferred in nature. Once such property is the precise phylogeny (i.e. ancestry tree) of the population. - -![An example phylogeny](../images/phylogeny.jpg) - -At face value, measuring a phylogeny in *in silico* evolution may seem very straightforward: you just need to keep track of what gives birth to what. However, multiple aspects turn out to be non-trivial (see below). The Empirical systematics manager is designed to handle these challenges in a flexible way such that it can be easily plugged into any digital evolution system. It flexibly handle all aspects of recording phylogenies in *in silico* evolution. - -Note: A python wrapper for systematics manager exists in the form of the [Phylotrackpy library](https://phylotrackpy.readthedocs.io/en/latest/). - -### Features - -#### Flexible taxon definitions - -One of the central decisions when creating a phylogeny is choosing what the taxonomic units (i.e. the nodes in the tree) are. In a traditional phylogeny, these nodes are species. However, the concept of species is so murky that it is impossible to generically apply to computational evolution systems (we'd argue that it's questionable whether it could even be applied to biological data recorded at perfect temporal resolution, but that's a separate conversation). One alternative would be to make a phylogeny in which all nodes are individuals, but these trees are usually so large that they are impractical to work with. - -Increasingly, biologists have embraced the idea of building trees in which the taxonomic units are not species. Often, these are denoted by referring to them as an "X tree", where X is the taxonomic unit of interest. A traditional phylogeny, then, is a species tree. This terminology is particularly common in cancer evolution research, in which species trees are often contrasted with "clone trees" or "gene trees", in which the taxonomic units are genotypes. - -We can generalize this concept - any phylogeny of individuals can be abstracted by lumping individuals together based on a shared feature (see figure). This feature could be something simple like a phenotypic or genotypic trait, or it could be something more complex. For example, to approximate something more like a traditional biological species concept, you could choose to define an individual as being a member of a new taxonomic unit if it fails to produce successful offspring when recombined with an individual prototypical of its parent species (although note that the stochasticity inherent in this definition could have some unexpected side effects). The broader the grouping, the smaller the phylogeny will be (e.g. a genotype tree will be larger than a phenotype tree). - -![Illustration of different ways taxonomic units could be defined](https://raw.githubusercontent.com/emilydolson/interpreting_the_tape_of_life/master/figs/dolson.lineage_metrics_cartoon.png) -(Figure from "Quantifying the tape of life: Ancestry-based metrics provide insights and intuition about evolutionary dynamics" published in the proceedings of [ALIFE 2018](http://2018.alife.org/)) - -So how does the systematics manager handle this problem? By giving you the power to define taxonomic groupings however you want! When you construct a `Systematics` object, you give it a function that it can use to determine the taxonomic unit of an organism. Later, when organisms are born, you will pass them to the `Systematics` object and it will run that function on them. If the result matches the result of calling that function on the new organism's parent, then the organism will be considered to be part of the same taxonomic unit (taxon) as its parent. If the results do not match, the new organism will be considered to be the start of a new taxon descended from the parent's taxon. - -Note that multiple taxa may evolve that are the "same" (i.e. running the function on organisms in each yields the same result); each unique evolutionary origin will be counted as a distinct taxon. For example, let's imagine we are building a phylogeny of real animals in nature and grouping them into taxa based on whether they spend more than 50% of their lives in water. Fish and whales would be parts of two different taxa. Even though they both live their whole lives in the water, there would be a "land" taxon in between them on the line of descent. - -Example: - -```cpp -#include "Systematics.hpp" - -// Assuming that the org_t class has a member variable called genotype that stores -// its genotype, this will create a phylogeny based on genotypes -// The org_t template parameter is the type of the organisms living in your world. -// The info_t template parameter is the type of the piece of information you will -// return to indicate which organisms count as the same taxon. -// e.g. here, info_t should be whatever the type of org.genotype is. -sys = emp::Systematics sys([](const org_t & org){return org.genotype;}); -``` - -#### Pruning - -Phylogenies can get very large. So large that they can cause you program to exceed its available memory. To combat this problem, phylogenies can be "pruned" so they only contain extant (i.e. not extinct) taxa and their ancestors. If the `store_outside` variable for a systematics object is set to `False` (the default), this pruning will happen automatically. If you truly want to keep track of every taxon that ever existed, you can do so by setting `store_outside` to `True`. If you want to keep track of some historical data but can't afford the memory overhead of storing every taxon that ever existed, an intermediate options is to periodically print "snapshot" files containing all taxa currently in the phylogeny. - -#### Phylostatistics calculations - -Phylogenies are very information-dense data structures, but it can sometimes be hard to know how to usefully compare them. A variety of phylogenetic summary statistics (mostly based on topology) have been developed for the purpose of usefully making high-level comparisons. The systematics manager has many of these statistics built-in and can automatically output them. It can even keep running data (mean, variance, maximum, and minimum) on each statistic over time in a highly efficient format. - -Available statistics include: - -- Mean/max/min/sum/variance pairwise distance -- Colless-like index (a variant of the Colless index adjusted for trees with multifurcations) -- Sackin index -- Phylogenetic diversity - -#### Efficiency - -Tracking phylogenies can be computationally expensive. We have sought to keep the computational overhead as low as possible. - -We also provide the option to remove all taxa that died before a certain time point (the `remove_before` method). Use this with caution, as it will inhibit the use of many phylogenetic topology metrics. In extreme cases it may be necessary to keep your memory footprint sufficiently low, though. - -If you need substantially higher efficiency (in terms of time or memory) or are working in a distributed computing environment (where having a centralized phylogeny tracker can pose a large bottleneck), check out the [hstrat library](https://github.com/mmore500/hstrat), which lets you sacrifice some precision to achieve lower computational overhead. - -#### Flexible output options - -At any time, you can tell the systematics manager to print out the full contents of its current phylogeny in a "snapshot" file. These files will be formatted according to the [Artificial Life Phylogeny Data Standard format](https://alife-data-standards.github.io/alife-data-standards/phylogeny.html). By default they will contain the following columns for each taxon: 1) unique ID, 2) ancestor list, 3) origin time, and 4) destruction time. However, you can add additional columns with the `add_snapshot_fun` method. - -You can also print information on a single lineage. - -### Useful background information - -There are certain quirks associated with real-time phylogenies that you might not be used to thinking about if you're used to dealing with reconstructed phylogenies. Many of these discrepancies are the result of the very different temporal resolutions on which these types of phylogenies are measured, and the fact that the taxonomic units we work with are often at a finer resolution than species. We document some here so that they don't catch you off guard: - -- **Multifurcations are real**: In phylogenetic reconstructions, there is usually an assumption that any multifurcation/polytomy (i.e. a node that has more than two child nodes) is an artifact of having insufficient data. In real-time phylogenies, however, we often observe multifurcations that we know for sure actually happened. -- **Not all extant taxa are leaf nodes**: In phylogenetic reconstructions, there is usually an assumption that all extant (i.e. still living) taxa are leaf nodes in the phylogeny (i.e. none of them are parents/offspring of each other; similar taxa are descended from a shared common ancestor). In real-time phylogenies it is entirely possible that one taxon gives birth to something that we have defined as a different taxon and then continues to coexist with that child taxon. -- **Not all nodes are branch points**: In phylogenetic reconstructions, we only attempt to infer where branch points (i.e. common ancestors of multiple taxa) occurred. We do not try to infer how many taxa existed on a line of descent between a branch point and an extant taxa. In real-time phylogenies we observe exactly how many taxa exist on this line of descent and we keep a record of them. In practice there are often a lot of them, depending on you define your taxa. It is unclear whether we should include these non-branching nodes when calculating phylogenetic statistics (which is why the systematics manager lets you choose whether you want to). - -![An example of a full digital evolution phylogeny](images/FullPhylogeny.png) - -The above image represents an actual phylogeny measured from digital evolution. Each rectangle represents a different taxon. It's position along the x axis represents the span of time it existed for. Note that there are often sections along a single branch where multiple taxa coexisted for a period of time. Circles represent extant taxa at the end of this run. - -### Glossary - -Some useful terminology that might be useful in understanding the documentation (and especially the code base) for the systematics manager, particularly in light of the fact that different sub-fields of evolutionary biology tend to use different words in many of these contexts. - -- **Taxon**: a generic word for a specific taxonomic unit. We use "taxon" as a generic term to represent a node in a phylogeny. For example, species are a common type of taxon to use when depicting portions of the phylogeny of life on earth. However, sometimes people choose to use higher-order types of taxa (e.g. genus, family, order, class, etc.) when they are trying to depict a larger swath of the whole phylogeny. -- **Taxa**: Plural of taxon. -- **Multifurcation/polytomy**: A node in a phylogeny that has more than two child nodes -- **Bifurcation**: A node in a phylogeny that has exactly two child nodes. -- **Non-branch node**: A node in a phylogeny with only one child node. -- **Leaf node**: A node in a phylogeny with no children. -- **Most Recent Common Ancestor (MRCA)**: The most recent node in a phylogeny that is a common ancestor of all nodes associated with extant taxa. If the phylogeny is pruned, there won't be any branch points before the MRCA (because any branches not leading to the MRCA would lead to taxa that are now extinct). -- **Coalescence events**: Occur when the most recent common ancestor changes (i.e. all descendants from one side of the deepest branch of the phylogeny have gone extinct). In the absence of diversity-preserving features coalescence events are expected to occur by chance with a frequency dependent on population size and spatial structure (but be careful of distributional assumptions). Observing coalescence less frequently than you would expect by chance can be an indication that ecological interactions are present (we have discussed this more [here](https://direct.mit.edu/artl/article/26/1/58/93272/Interpreting-the-Tape-of-Life-Ancestry-Based) and [here](https://direct.mit.edu/artl/article/25/1/50/2915/The-MODES-Toolbox-Measurements-of-Open-Ended)). - -### Quickstart - -#### Installation - -The Systematics manager is part of Empirical. Because Empirical is header-only, you can include whichever parts of it you want. To just use the Systematics manager, you just need to include the Systematics.hpp header. Note that the Systematics manager depends on the result of Empirical, so you will need to download the entire library. Currently, we recommend using the mabe-systematics branch: - -```bash -git clone --recursive git@github.com:devosoft/Empirical.git -cd Empirical -git checkout mabe-systematics -``` - -Then in your C++ file: - -```cpp -#include "Evolve/Systematics.hpp" -``` - -To compile your code using the systematics manager, you will need to tell you compiler where to find Systematics.hpp with the `-I` flag (the below assumes you are compiling from the directory you cloned Empirical into; if you aren't, you will need to include the full path to Empirical): - -```bash -g++ -IEmpirical/include/emp my_source_file.cc -``` - -#### Usage - -##### Creating a systematics object - -The first step in tracking a phylogeny with the systematics manager is to make a systematics object. The most important decision to make at this point is how to define taxa in your phylogeny (for more information, see the "flexible taxon definition" section under "features"). You can do so by passing a function to the systematics constructor which takes an organism object and returns a string that specifies a taxon. - -For example, to build a phylogeny based on genotypes, you could do the following: - -```cpp -#include "Evolve/Systematics.hpp" - -struct MyOrg { - std::string genotype; -}; - -// The first template argument is the type of your organisms -// The second template argument is the type of the piece of information you -// are using to differentiate taxa (here its a string because the genotype -// member variable of our organism struct is a string) -sys = emp::Systematics sys([](const MyOrg & org){return org.genotype;}); -``` - -There are a couple of other decisions that you also need to make at this point. The first is which set of taxa to store in the systematics manager. The defaults here are most likely what you want to use, but in case they aren't, the systematics manager can be told to store or not store the following sets of taxa: - -- **active**: the taxa that still currently have living members. You almost certainly want to store these (without them you don't really have a phylogeny), but can technically disable them by setting the `store_active` keyword argument in the constructor to false. -- **ancestors**: the taxa that are ancestors of active taxa. You almost certainly want to store these too (without them you don't really have a phylogeny), but can technically disable them by setting the `store_ancestors` keyword argument in the constructor to false. -- **outside**: the taxa that are not in either of the other two groups (i.e. taxa that have gone extinct and all of their ancestors have gone extinct). If you store these, your phylogeny will get very large very fast, so doing so is generally not recommended. It is occasionally useful, though, so you can enable storing these taxa by setting the `store_all` keyword argument in the constructor to true. - -The second decision is slightly trickier. Once you start adding organisms to the systematics manager, it will create `Taxon` objects associated with each one to keep track of which taxon it is part of. You will need to use these taxon objects when adding future organisms, to specify which taxon their parent was part of. If you have control over your organism class, it is likely that the easiest option is to add a `self.taxon` attribute and store the taxon there. However, if you cannot add arbitrary data to your organism class, keeping track of taxon objects can get annoying. For this reason, the systematics manager gives you the option of letting it manage them. To do so, it needs a way to map individuals to taxa (since its possible there are duplicate taxa, simply running the organism to taxon function again won't work). It achieves this mapping by keeping track of each organism's position in the population. Thus, to have the systematics manager keep track of taxon objects itself, you must set the `store_pos` keyword argument in the constructor to true. You must also use the position-based versions of add_org and remove_org, and make sure to notify the systematics manager if any organism ever changes position during its lifetime for any reason. - -Once you have created the systematics object, you just need to do two things: 1) notify it when something is born, and 2) notify it when something dies. - -##### Notifying the systematics object of births - -You must notify the systematics manager of births using the `add_org` family of functions. These functions require that you provide the newly born organism as well as either the taxon object of its parent or the position of its parent (if the systematics manager is tracking positions). - -Example of tracking taxa as object attributes (assume we're building on our example above, and already have created a systematics manager called `sys`): - -```cpp -// Do whatever you would normally do to create your first organism -// Here, we're assuming we can just call a constructor called Organism() -MyOrg my_org; - -// Notify systematics manager of this organism's birth -// This is the first org, so it doesn't have a parent -// so we do not pass a second argument/ -// add_org will return a pointer to this organism's taxon object, which we -// store for future reference -emp::Ptr > taxon = sys.AddOrg(my_org); - -// Assume stuff happens here that leads to my_org having offspring -// Here, we'll pretend that our organism class has a Reproduce method that -// returns a new offspring organism. You should handle this however you -// normally would -MyOrg org_2 = my_org.Reproduce(); - -// Notify the systematics manager of org_2's birth. Since it has a parent, -// we pass the taxon of that parent in as the second argument -sys.AddOrg(org_2, taxon) - -``` - -An example of tracking positions is coming soon. For now, feel free to contact us with questions! - -#### Notifying the systematics object of deaths - -You must notify the systematics manager of deaths using the `remove_org` family of functions. - -As an example (again, building on the previous examples): - -```cpp -// Assume stuff happens that causes my_org to die - -// We notify the systematics manager that this has happened by calling remove_org -// Note that remove_org takes the taxon of the dead organism as an argument, not -// the organism itself -sys.remove_org(taxon) - -``` - -#### Taxon properties - -Taxon objects maintain the following information: - -- taxon ID# ``GetID()`` -- details of organisms in the taxon ``GetInfo()`` -- pointer to the parent group (will return a null pointer if the species was injected) ``GetParent()`` -- how many organisms currently exist in the group and how many total organisms have ever existed in the group ``GetNumOrgs()`` or ``GetTotOrgs()`` -- how many direct offspring groups exist from this group and how many total extant offspring that exist from this taxa ``GetTotalOffspring()`` -- how deep in the tree the node you are examining is ``GetDepth()`` -- when did this taxon first appear in the population ``GetOriginationTime()`` -- when did the taxon leave the population ``GetDestructionTime()`` - -#### Systematics manager properties - -A systematics manager object maintains the following information: - -- Are we tracking a synchronous population? ``GetTrackSynchronous()`` ``SetTrackSynchronous()`` -- Are we storing all taxa that are still alive in the population? ``GetStoreActive()`` ``SetStoreActive()`` -- Are we storing all taxa that are ancestors of the living organisms in the population? ``GetStoreAncestors()`` ``SetStoreAncestors()`` -- Are we storing all taxa that have died out, as have all of their descendants? ``GetStoreOutside()`` ``SetStoreOutside()`` -- Are we storing any taxa types that have died out? ``GetArchive()`` ``SetArchive()`` -- Are we storing the positions of taxa? ``GetStorePosition()`` ``SetStorePosition()`` -- How many living organisms are currently being tracked? ``GetTotalOrgs()`` -- How many independent trees are being tracked? ``GetNumRoots()`` -- What ID will the next taxon have? ``GetNextID()`` -- What is the average phylogenetic depth of organisms in the population? ``GetAveDepth()`` -- To find the most recent common ancestor (MRCA) use ``GetMRCA()`` or ``GetMRCADepth()`` to find the distance to the MRCA. - -#### Phylogeny metrics - -Many different metrics can be used to quantify th topology of a phylogeny. For more information, see (Winters et al., 2013; Tucker et al. 2017). - -The Empirical systematics manager can calculate - -- Phylogenetic diversity (Faith, 1992) -- Taxon Distinctiveness (From Vane-Wright et al., 1991) -- Evolutionary Distinctiveness (Isaac, 2007) (mean, sum, and variance) -- Mean pairwise distance (Webb and Losos, 2000), which is equivalent to Average Taxonomic Diversity (Warwick and Clark, 1998, Tucker et al., 2016) -- Sum pairwise distance -- Variance pairwise distance -- Out-degree distribution -- Average origination time -- Colless-like Index (Mir, 2018, PLoS One) -- Sackin Index (Sackin, 1972; reviewed in Shao, 1990) -- Depth of most recent common ancestor -- Phenotypic volatility (Dolson et al., 2019) -- Unique taxa on lineage (Dolson et al., 2019) -- Mutation count along lineage (Dolson et al., 2019) -- Tree size -- Maximum depth diff --git a/doc/library/evolve/evolve.md b/doc/library/evolve/evolve.md index c3bb4a65df..1f95028d02 100644 --- a/doc/library/evolve/evolve.md +++ b/doc/library/evolve/evolve.md @@ -1,36 +1,266 @@ # Evolution tools -## World +## Phylotracklib (Systematics Manager) -```{eval-rst} -.. doxygenfile:: Evolve/World.hpp - :project: Empirical - :no-link: +The systematics manager tracks phylogenetic relationships among organisms within a digital +evolution system. For asexual systems, these relationships forma phylogenetic tree +(phylogeny). Systems with recombination (i.e. sexual reproduction systems) are not +yet supported. One of the major benefits of doing *in silico* evolution experiments (instead of or in addition to laboratory or field experiments) is that they allow perfect measurement of quantities that can only be inferred in nature. Once such property is the precise phylogeny (i.e. ancestry tree) of the population. + +![An example phylogeny](../images/phylogeny.jpg) + +At face value, measuring a phylogeny in *in silico* evolution may seem very straightforward: you just need to keep track of what gives birth to what. However, multiple aspects turn out to be non-trivial (see below). The Empirical systematics manager is designed to handle these challenges in a flexible way such that it can be easily plugged into any digital evolution system. It flexibly handle all aspects of recording phylogenies in *in silico* evolution. + +Note: A python wrapper for systematics manager exists in the form of the [Phylotrackpy library](https://phylotrackpy.readthedocs.io/en/latest/). + +### Features + +#### Flexible taxon definitions + +One of the central decisions when creating a phylogeny is choosing what the taxonomic units (i.e. the nodes in the tree) are. In a traditional phylogeny, these nodes are species. However, the concept of species is so murky that it is impossible to generically apply to computational evolution systems (we'd argue that it's questionable whether it could even be applied to biological data recorded at perfect temporal resolution, but that's a separate conversation). One alternative would be to make a phylogeny in which all nodes are individuals, but these trees are usually so large that they are impractical to work with. + +Increasingly, biologists have embraced the idea of building trees in which the taxonomic units are not species. Often, these are denoted by referring to them as an "X tree", where X is the taxonomic unit of interest. A traditional phylogeny, then, is a species tree. This terminology is particularly common in cancer evolution research, in which species trees are often contrasted with "clone trees" or "gene trees", in which the taxonomic units are genotypes. + +We can generalize this concept - any phylogeny of individuals can be abstracted by lumping individuals together based on a shared feature (see figure). This feature could be something simple like a phenotypic or genotypic trait, or it could be something more complex. For example, to approximate something more like a traditional biological species concept, you could choose to define an individual as being a member of a new taxonomic unit if it fails to produce successful offspring when recombined with an individual prototypical of its parent species (although note that the stochasticity inherent in this definition could have some unexpected side effects). The broader the grouping, the smaller the phylogeny will be (e.g. a genotype tree will be larger than a phenotype tree). + +![Illustration of different ways taxonomic units could be defined](https://raw.githubusercontent.com/emilydolson/interpreting_the_tape_of_life/master/figs/dolson.lineage_metrics_cartoon.png) +(Figure from "Quantifying the tape of life: Ancestry-based metrics provide insights and intuition about evolutionary dynamics" published in the proceedings of [ALIFE 2018](http://2018.alife.org/)) + +So how does the systematics manager handle this problem? By giving you the power to define taxonomic groupings however you want! When you construct a `Systematics` object, you give it a function that it can use to determine the taxonomic unit of an organism. Later, when organisms are born, you will pass them to the `Systematics` object and it will run that function on them. If the result matches the result of calling that function on the new organism's parent, then the organism will be considered to be part of the same taxonomic unit (taxon) as its parent. If the results do not match, the new organism will be considered to be the start of a new taxon descended from the parent's taxon. + +Note that multiple taxa may evolve that are the "same" (i.e. running the function on organisms in each yields the same result); each unique evolutionary origin will be counted as a distinct taxon. For example, let's imagine we are building a phylogeny of real animals in nature and grouping them into taxa based on whether they spend more than 50% of their lives in water. Fish and whales would be parts of two different taxa. Even though they both live their whole lives in the water, there would be a "land" taxon in between them on the line of descent. + +Example: + +```cpp +#include "Systematics.hpp" + +// Assuming that the org_t class has a member variable called genotype that stores +// its genotype, this will create a phylogeny based on genotypes +// The org_t template parameter is the type of the organisms living in your world. +// The info_t template parameter is the type of the piece of information you will +// return to indicate which organisms count as the same taxon. +// e.g. here, info_t should be whatever the type of org.genotype is. +sys = emp::Systematics sys([](const org_t & org){return org.genotype;}); ``` -## Phylotracklib (Systematics Manager) +#### Pruning + +Phylogenies can get very large. So large that they can cause you program to exceed its available memory. To combat this problem, phylogenies can be "pruned" so they only contain extant (i.e. not extinct) taxa and their ancestors. If the `store_outside` variable for a systematics object is set to `False` (the default), this pruning will happen automatically. If you truly want to keep track of every taxon that ever existed, you can do so by setting `store_outside` to `True`. If you want to keep track of some historical data but can't afford the memory overhead of storing every taxon that ever existed, an intermediate options is to periodically print "snapshot" files containing all taxa currently in the phylogeny. + +#### Phylostatistics calculations + +Phylogenies are very information-dense data structures, but it can sometimes be hard to know how to usefully compare them. A variety of phylogenetic summary statistics (mostly based on topology) have been developed for the purpose of usefully making high-level comparisons. The systematics manager has many of these statistics built-in and can automatically output them. It can even keep running data (mean, variance, maximum, and minimum) on each statistic over time in a highly efficient format. + +Available statistics include: -```{include} systematics_docs.md +- Mean/max/min/sum/variance pairwise distance +- Colless-like index (a variant of the Colless index adjusted for trees with multifurcations) +- Sackin index +- Phylogenetic diversity + +#### Efficiency + +Tracking phylogenies can be computationally expensive. We have sought to keep the computational overhead as low as possible. + +We also provide the option to remove all taxa that died before a certain time point (the `remove_before` method). Use this with caution, as it will inhibit the use of many phylogenetic topology metrics. In extreme cases it may be necessary to keep your memory footprint sufficiently low, though. + +If you need substantially higher efficiency (in terms of time or memory) or are working in a distributed computing environment (where having a centralized phylogeny tracker can pose a large bottleneck), check out the [hstrat library](https://github.com/mmore500/hstrat), which lets you sacrifice some precision to achieve lower computational overhead. + +#### Flexible output options + +At any time, you can tell the systematics manager to print out the full contents of its current phylogeny in a "snapshot" file. These files will be formatted according to the [Artificial Life Phylogeny Data Standard format](https://alife-data-standards.github.io/alife-data-standards/phylogeny.html). By default they will contain the following columns for each taxon: 1) unique ID, 2) ancestor list, 3) origin time, and 4) destruction time. However, you can add additional columns with the `add_snapshot_fun` method. + +You can also print information on a single lineage. + +### Useful background information + +There are certain quirks associated with real-time phylogenies that you might not be used to thinking about if you're used to dealing with reconstructed phylogenies. Many of these discrepancies are the result of the very different temporal resolutions on which these types of phylogenies are measured, and the fact that the taxonomic units we work with are often at a finer resolution than species. We document some here so that they don't catch you off guard: + +- **Multifurcations are real**: In phylogenetic reconstructions, there is usually an assumption that any multifurcation/polytomy (i.e. a node that has more than two child nodes) is an artifact of having insufficient data. In real-time phylogenies, however, we often observe multifurcations that we know for sure actually happened. +- **Not all extant taxa are leaf nodes**: In phylogenetic reconstructions, there is usually an assumption that all extant (i.e. still living) taxa are leaf nodes in the phylogeny (i.e. none of them are parents/offspring of each other; similar taxa are descended from a shared common ancestor). In real-time phylogenies it is entirely possible that one taxon gives birth to something that we have defined as a different taxon and then continues to coexist with that child taxon. +- **Not all nodes are branch points**: In phylogenetic reconstructions, we only attempt to infer where branch points (i.e. common ancestors of multiple taxa) occurred. We do not try to infer how many taxa existed on a line of descent between a branch point and an extant taxa. In real-time phylogenies we observe exactly how many taxa exist on this line of descent and we keep a record of them. In practice there are often a lot of them, depending on you define your taxa. It is unclear whether we should include these non-branching nodes when calculating phylogenetic statistics (which is why the systematics manager lets you choose whether you want to). + +![An example of a full digital evolution phylogeny](../images/FullPhylogeny.png) + +The above image represents an actual phylogeny measured from digital evolution. Each rectangle represents a different taxon. It's position along the x axis represents the span of time it existed for. Note that there are often sections along a single branch where multiple taxa coexisted for a period of time. Circles represent extant taxa at the end of this run. + +### Glossary + +Some useful terminology that might be useful in understanding the documentation (and especially the code base) for the systematics manager, particularly in light of the fact that different sub-fields of evolutionary biology tend to use different words in many of these contexts. + +- **Taxon**: a generic word for a specific taxonomic unit. We use "taxon" as a generic term to represent a node in a phylogeny. For example, species are a common type of taxon to use when depicting portions of the phylogeny of life on earth. However, sometimes people choose to use higher-order types of taxa (e.g. genus, family, order, class, etc.) when they are trying to depict a larger swath of the whole phylogeny. +- **Taxa**: Plural of taxon. +- **Multifurcation/polytomy**: A node in a phylogeny that has more than two child nodes +- **Bifurcation**: A node in a phylogeny that has exactly two child nodes. +- **Non-branch node**: A node in a phylogeny with only one child node. +- **Leaf node**: A node in a phylogeny with no children. +- **Most Recent Common Ancestor (MRCA)**: The most recent node in a phylogeny that is a common ancestor of all nodes associated with extant taxa. If the phylogeny is pruned, there won't be any branch points before the MRCA (because any branches not leading to the MRCA would lead to taxa that are now extinct). +- **Coalescence events**: Occur when the most recent common ancestor changes (i.e. all descendants from one side of the deepest branch of the phylogeny have gone extinct). In the absence of diversity-preserving features coalescence events are expected to occur by chance with a frequency dependent on population size and spatial structure (but be careful of distributional assumptions). Observing coalescence less frequently than you would expect by chance can be an indication that ecological interactions are present (we have discussed this more [here](https://direct.mit.edu/artl/article/26/1/58/93272/Interpreting-the-Tape-of-Life-Ancestry-Based) and [here](https://direct.mit.edu/artl/article/25/1/50/2915/The-MODES-Toolbox-Measurements-of-Open-Ended)). + +### Quickstart + +#### Installation + +The Systematics manager is part of Empirical. Because Empirical is header-only, you can include whichever parts of it you want. To just use the Systematics manager, you just need to include the Systematics.hpp header. Note that the Systematics manager depends on the result of Empirical, so you will need to download the entire library. Currently, we recommend using the mabe-systematics branch: + +```bash +git clone --recursive git@github.com:devosoft/Empirical.git +cd Empirical +git checkout mabe-systematics ``` -```{eval-rst} -.. doxygenfile:: Evolve/Systematics.hpp - :project: Empirical - :no-link: +Then in your C++ file: + +```cpp +#include "Evolve/Systematics.hpp" ``` -## NK +To compile your code using the systematics manager, you will need to tell you compiler where to find Systematics.hpp with the `-I` flag (the below assumes you are compiling from the directory you cloned Empirical into; if you aren't, you will need to include the full path to Empirical): -```{eval-rst} -.. doxygenfile:: Evolve/NK.hpp - :project: Empirical - :no-link: +```bash +g++ -IEmpirical/include/emp my_source_file.cc ``` -## Selection +#### Usage + +##### Creating a systematics object + +The first step in tracking a phylogeny with the systematics manager is to make a systematics object. The most important decision to make at this point is how to define taxa in your phylogeny (for more information, see the "flexible taxon definition" section under "features"). You can do so by passing a function to the systematics constructor which takes an organism object and returns a string that specifies a taxon. + +For example, to build a phylogeny based on genotypes, you could do the following: + +```cpp +#include "Evolve/Systematics.hpp" + +struct MyOrg { + std::string genotype; +}; + +// The first template argument is the type of your organisms +// The second template argument is the type of the piece of information you +// are using to differentiate taxa (here its a string because the genotype +// member variable of our organism struct is a string) +sys = emp::Systematics sys([](const MyOrg & org){return org.genotype;}); +``` + +There are a couple of other decisions that you also need to make at this point. The first is which set of taxa to store in the systematics manager. The defaults here are most likely what you want to use, but in case they aren't, the systematics manager can be told to store or not store the following sets of taxa: + +- **active**: the taxa that still currently have living members. You almost certainly want to store these (without them you don't really have a phylogeny), but can technically disable them by setting the `store_active` keyword argument in the constructor to false. +- **ancestors**: the taxa that are ancestors of active taxa. You almost certainly want to store these too (without them you don't really have a phylogeny), but can technically disable them by setting the `store_ancestors` keyword argument in the constructor to false. +- **outside**: the taxa that are not in either of the other two groups (i.e. taxa that have gone extinct and all of their ancestors have gone extinct). If you store these, your phylogeny will get very large very fast, so doing so is generally not recommended. It is occasionally useful, though, so you can enable storing these taxa by setting the `store_all` keyword argument in the constructor to true. + +The second decision is slightly trickier. Once you start adding organisms to the systematics manager, it will create `Taxon` objects associated with each one to keep track of which taxon it is part of. You will need to use these taxon objects when adding future organisms, to specify which taxon their parent was part of. If you have control over your organism class, it is likely that the easiest option is to add a `self.taxon` attribute and store the taxon there. However, if you cannot add arbitrary data to your organism class, keeping track of taxon objects can get annoying. For this reason, the systematics manager gives you the option of letting it manage them. To do so, it needs a way to map individuals to taxa (since its possible there are duplicate taxa, simply running the organism to taxon function again won't work). It achieves this mapping by keeping track of each organism's position in the population. Thus, to have the systematics manager keep track of taxon objects itself, you must set the `store_pos` keyword argument in the constructor to true. You must also use the position-based versions of add_org and remove_org, and make sure to notify the systematics manager if any organism ever changes position during its lifetime for any reason. + +Once you have created the systematics object, you just need to do two things: 1) notify it when something is born, and 2) notify it when something dies. + +##### Notifying the systematics object of births + +You must notify the systematics manager of births using the `add_org` family of functions. These functions require that you provide the newly born organism as well as either the taxon object of its parent or the position of its parent (if the systematics manager is tracking positions). + +Example of tracking taxa as object attributes (assume we're building on our example above, and already have created a systematics manager called `sys`): + +```cpp +// Do whatever you would normally do to create your first organism +// Here, we're assuming we can just call a constructor called Organism() +MyOrg my_org; + +// Notify systematics manager of this organism's birth +// This is the first org, so it doesn't have a parent +// so we do not pass a second argument/ +// add_org will return a pointer to this organism's taxon object, which we +// store for future reference +emp::Ptr > taxon = sys.AddOrg(my_org); + +// Assume stuff happens here that leads to my_org having offspring +// Here, we'll pretend that our organism class has a Reproduce method that +// returns a new offspring organism. You should handle this however you +// normally would +MyOrg org_2 = my_org.Reproduce(); + +// Notify the systematics manager of org_2's birth. Since it has a parent, +// we pass the taxon of that parent in as the second argument +sys.AddOrg(org_2, taxon) + +``` +An example of tracking positions is coming soon. For now, feel free to contact us with questions! + +##### Notifying the systematics object of deaths + +You must notify the systematics manager of deaths using the `remove_org` family of functions. + +As an example (again, building on the previous examples): + +```cpp +// Assume stuff happens that causes my_org to die + +// We notify the systematics manager that this has happened by calling remove_org +// Note that remove_org takes the taxon of the dead organism as an argument, not +// the organism itself +sys.remove_org(taxon) + +``` + +### Taxon properties + +Taxon objects maintain the following information: + +- taxon ID# ``GetID()`` +- details of organisms in the taxon ``GetInfo()`` +- pointer to the parent group (will return a null pointer if the species was injected) ``GetParent()`` +- how many organisms currently exist in the group and how many total organisms have ever existed in the group ``GetNumOrgs()`` or ``GetTotOrgs()`` +- how many direct offspring groups exist from this group and how many total extant offspring that exist from this taxa ``GetTotalOffspring()`` +- how deep in the tree the node you are examining is ``GetDepth()`` +- when did this taxon first appear in the population ``GetOriginationTime()`` +- when did the taxon leave the population ``GetDestructionTime()`` + +### Systematics manager properties + +A systematics manager object maintains the following information: + +- Are we tracking a synchronous population? ``GetTrackSynchronous()`` ``SetTrackSynchronous()`` +- Are we storing all taxa that are still alive in the population? ``GetStoreActive()`` ``SetStoreActive()`` +- Are we storing all taxa that are ancestors of the living organisms in the population? ``GetStoreAncestors()`` ``SetStoreAncestors()`` +- Are we storing all taxa that have died out, as have all of their descendants? ``GetStoreOutside()`` ``SetStoreOutside()`` +- Are we storing any taxa types that have died out? ``GetArchive()`` ``SetArchive()`` +- Are we storing the positions of taxa? ``GetStorePosition()`` ``SetStorePosition()`` +- How many living organisms are currently being tracked? ``GetTotalOrgs()`` +- How many independent trees are being tracked? ``GetNumRoots()`` +- What ID will the next taxon have? ``GetNextID()`` +- What is the average phylogenetic depth of organisms in the population? ``GetAveDepth()`` +- To find the most recent common ancestor (MRCA) use ``GetMRCA()`` or ``GetMRCADepth()`` to find the distance to the MRCA. + +### Phylogeny metrics + +Many different metrics can be used to quantify th topology of a phylogeny. For more information, see (Winters et al., 2013; Tucker et al. 2017). + +The Empirical systematics manager can calculate + +- Phylogenetic diversity (Faith, 1992) +- Taxon Distinctiveness (From Vane-Wright et al., 1991) +- Evolutionary Distinctiveness (Isaac, 2007) (mean, sum, and variance) +- Mean pairwise distance (Webb and Losos, 2000), which is equivalent to Average Taxonomic Diversity (Warwick and Clark, 1998, Tucker et al., 2016) +- Sum pairwise distance +- Variance pairwise distance +- Out-degree distribution +- Average origination time +- Colless-like Index (Mir, 2018, PLoS One) +- Sackin Index (Sackin, 1972; reviewed in Shao, 1990) +- Depth of most recent common ancestor +- Phenotypic volatility (Dolson et al., 2019) +- Unique taxa on lineage (Dolson et al., 2019) +- Mutation count along lineage (Dolson et al., 2019) +- Tree size +- Maximum depth + +## API + + + ```{eval-rst} -.. doxygenfile:: Evolve/World_select.hpp - :project: Empirical - :no-link: +.. toctree:: + :glob: + + api/* ``` diff --git a/doc/library/functional/functional.md b/doc/library/functional/functional.md index bd0d64ccec..0b8ea00cc0 100644 --- a/doc/library/functional/functional.md +++ b/doc/library/functional/functional.md @@ -1,33 +1,12 @@ # Functional -## Flex Functions +## API + + ```{eval-rst} -.. doxygenfile:: functional/flex_function.hpp - :project: Empirical - :no-link: -``` - -## Function Sets - -```{eval-rst} -.. doxygenfile:: emp/functional/FunctionSet.hpp - :project: Empirical - :no-link: -``` - -## Generic Functions +.. toctree:: + :glob: -```{eval-rst} -.. doxygenfile:: emp/functional/GenericFunction.hpp - :project: Empirical - :no-link: -``` - -## Memoized Functions - -```{eval-rst} -.. doxygenfile:: emp/functional/memo_function.hpp - :project: Empirical - :no-link: + api/* ``` diff --git a/doc/library/index.md b/doc/library/index.md index 3f9c52606b..b6002c88cf 100644 --- a/doc/library/index.md +++ b/doc/library/index.md @@ -3,22 +3,10 @@ Contents: ```{toctree} -:maxdepth: 1 +:maxdepth: 4 +:glob: -base/base -bits/bits -compiler/compiler -data/data -datastructs/datastructs -debug/debug -evolve/evolve -functional/functional -io/io -math/math -prefab/prefab -testing/testing -tools/tools -web/web +*/[!_]* ``` - {ref}`genindex` diff --git a/doc/library/io/io.md b/doc/library/io/io.md index 5a43b32d62..5b63e70782 100644 --- a/doc/library/io/io.md +++ b/doc/library/io/io.md @@ -1,25 +1,12 @@ # IO -## Inmemory Files +## API + + ```{eval-rst} -.. doxygenfile:: emp/io/File.hpp - :project: Empirical - :no-link: -``` - -## Serialization Macros +.. toctree:: + :glob: -```{eval-rst} -.. doxygenfile:: emp/io/serialize_macros.hpp - :project: Empirical - :no-link: -``` - -## Serialization Tools - -```{eval-rst} -.. doxygenfile:: emp/io/serialize.hpp - :project: Empirical - :no-link: + api/* ``` diff --git a/doc/library/math/math.md b/doc/library/math/math.md index 035f0bb2c5..0b4365b3b7 100644 --- a/doc/library/math/math.md +++ b/doc/library/math/math.md @@ -1,73 +1,12 @@ # Math -## Combinations +## API + + ```{eval-rst} -.. doxygenfile:: emp/math/combos.hpp - :project: Empirical - :no-link: -``` - -## Constants - -```{eval-rst} -.. doxygenfile:: emp/math/constants.hpp - :project: Empirical - :no-link: -``` - -## Information Theory Tools - -```{eval-rst} -.. doxygenfile:: emp/math/info_theory.hpp - :project: Empirical - :no-link: -``` - -## Math - -```{eval-rst} -.. doxygenfile:: emp/math/math.hpp - :project: Empirical - :no-link: -``` - -## Randomness Utilites +.. toctree:: + :glob: -```{eval-rst} -.. doxygenfile:: emp/math/random_utils.hpp - :project: Empirical - :no-link: -``` - -## Random Number Generator - -```{eval-rst} -.. doxygenfile:: emp/math/Random.hpp - :project: Empirical - :no-link: -``` - -## Range - -```{eval-rst} -.. doxygenfile:: emp/math/Range.hpp - :project: Empirical - :no-link: -``` - -## Sequence Utilities - -```{eval-rst} -.. doxygenfile:: emp/math/sequence_utils.hpp - :project: Empirical - :no-link: -``` - -## Statistics Tools - -```{eval-rst} -.. doxygenfile:: emp/math/stats.hpp - :project: Empirical - :no-link: + api/* ``` diff --git a/doc/library/prefab/prefab.rst b/doc/library/prefab/prefab.rst deleted file mode 100644 index 554da916c1..0000000000 --- a/doc/library/prefab/prefab.rst +++ /dev/null @@ -1,355 +0,0 @@ -Prefabricated Web Tools (for use with Emscripten) -================================================= - -These prefabricated tools were created to help you quickly create interesting web applicications without being overwhelmed with the underlying HTML, CSS, and Bootstrap classes required. -These tools use Empirical's web tools to provide structure for the site, and many of the prefab tools inherit from web tools so you can add your own styling and stream them into other web components in a similar way. - -When using these prefab tools be sure to link to the Bootstrap library, jQuery, and the default style stylesheet for this class in the head section of your HTML file. -.. code-block:: html - - - - - - - - -You can view these tools in action `here `_. - -Card -~~~~ -The Card class allows you to define a Bootstrap style card into your project. -A card that is not collapsible will have its state set to :code:`STATIC`. -Cards are static by default. -A card can be collapsible if its state parameter it set to :code:`INIT_OPEN` or :code:`INIT_CLOSED`. -By default, if a card is collapsible, it will have toggle icons in the header, but this can be overridden by setting the :code:`showGlyphs` parameter to :code:`false`. - -Since this class inherits from :code:`web::Div`, you can set styling and attributes with :code:`SetCSS` and :code:`SetAttr` respectively. -You can also stream your Card into other web components with the :code:`<<` operator. - -Example: -******** -.. code-block:: c++ - - #include "web/web.h" - #include "prefab/Card.h" - - emp::web::Document doc("emp_base"); - - emp::prefab::Card my_card("STATIC"); - doc << my_card; - - my_card.AddHeaderContent("Title"); - my_card.AddBodyContent("Content for the card's body"); - // Web components can also be passed as parameters to AddHeaderContent and AddBodyContent - -**Note**: The toggle icons that are avalible for collapsible cards use the `FontAwesome`_ library. -You will need to add the CSS file for this library to the head of your HTML file: - -.. code-block:: html - - - -CodeBlock -~~~~~~~~~ -The CardBlock class provides an interface for the `HighlightJS Library`_ which allows you to display code on web pages with language specific highlighting. -You can find a list of `all languages`_ on their GitHub page. - -To use this class, you need to pass the code you want displayed and the programming language to the constructor. - -Since this class inherits from :code:`web::Element`, you can stream your CodeBlock into other web components with the :code:`<<` operator. - -Example: -******** -.. code-block:: c++ - - #include "web/web.h" - #include "prefab/CodeBlock.h" - - emp::web::Document doc("emp_base"); - - std::string code_str = - R"( - int num = 9; - std::cout << num << " is a square number" << std::endl; - )"; - emp::prefab::CodeBlock code_block(code_str, "c++"); - - doc << code_block; - -**Note**: You will also need to add the following code to the bottom of the body section of your HTML file: - -.. code-block:: html - - - - - - -.. _HighlightJS Library: https://highlightjs.org/ -.. _all languages: https://github.com/highlightjs/highlight.js/blob/master/SUPPORTED_LANGUAGES.md - -Collapse -~~~~~~~~ -The CollapseCouple maintains a group of targets and controllers. -When a controller is clicked on a web page, all the associated targets will change state (expand/collapse). - -By default, the target element will start off closed, but this can be set to open by passing :code:`true` for the :code:`expanded` parameter. - -Since the collapse controller and collapse target element will not necessarily directly neighbor eachother, call :code:`GetControllerDiv()` and :code:`GetTargetDiv()` to obtain a vector of all the asspociated controllers and targets, respectively. -To obtain just one controller or target, pass its index into a get div function call. - -Example: -******** -.. code-block:: cpp - - #include "web/web.h" - #include "web/Div.h" - #include "prefab/CommentBox.h" - - #include "prefab/Collapse.h" - - emp::web::Document doc("emp_base"); - - emp::prefab::CommentBox box1; - box1.AddContent("

Box 1

"); - emp::web::Div btn1; - btn1.SetAttr("class", "btn btn-info"); - btn1 << "Button 1: controls box 1"; - - emp::prefab::CollapseCoupling collapse1(btn1, box1, true); - - doc << collapse1.GetControllerDiv(0); - doc << collapse1.GetTargetDiv(0); - -CommentBox -~~~~~~~~~~ -A CommentBox is a simple grey comment bubble. -Content can be added to it using :code:`AddContent()`. -If there is data you only want to be visible on mobile devices, use :code:`AddMobileContent()`. - -Since this class inherits from :code:`web::Div`, you can set styling and attributes with :code:`SetCSS()` and :code:`SetAttr()` respectively. -You can also stream your CommentBox into other web components with the :code:`<<` operator. - -Example: -******** -.. code-block:: cpp - - #include "web/web.h" - #include "prefab/CommentBox.h" - - emp::web::Document doc("emp_base"); - - emp::prefab::CommentBox my_box; - doc << my_box; - - my_box.AddContent("

Content that shows on all screen sizes

"); - my_box.AddMobileContent("
Content that only shows on small screens"); - // Web components can also be passed as parameters to AddContent and AddMobileContent - -ConfigPanel -~~~~~~~~~~~ -The ConfigPanel allows developers to easily set up a user interface for their configuration options. -It allows web apps to be interactive and dynamic, allowing users to change configuration settings within the applicaiton and providing a better user experiance. - -Using the ConfigPanel class, a configuration panel is constructed when passed a Config file. -It uses other Prefabricated components to add styling and structure to the panel. -Use :code:`GetConfigPanelDiv()` to stream this component into another web component or document. - -It is important to note that ConfigPanel instances are destroyed when they go out of scope. -This causes the form to no longer respond to changes made by the user. -You will need to initialize an instance outside of :code:`main()` if you would like the user to be able to interact with the panel. - -Example: -******** -.. code-block:: cpp - - #include "web/web.h" - #include "prefab/ConfigPanel.h" - #include "config/ArgManager.h" - - #include "SampleConfig.h" // Config file - - emp::web::Document doc("emp_base"); - Config cfg; - - emp::prefab::ConfigPanel config_panel(cfg); - - // apply configuration query params and config files to Config - auto specs = emp::ArgManager::make_builtin_specs(&cfg); - emp::ArgManager am(emp::web::GetUrlParams(), specs); - // cfg.Read("config.cfg"); - am.UseCallbacks(); - if (am.HasUnused()) std::exit(EXIT_FAILURE); - - // setup configuration panel - config_panel.Setup(); - doc << config_panel.GetConfigPanelDiv(); - -FontAwesomeIcon -~~~~~~~~~~~~~~~ -`FontAwesome`_ is a free library of icons that can be used in web pages. - -To use this class: - -1. Find the icon you wish to use in the `FontAwesome library`_ -2. Pass :code:`"fa-" + *icon name*` as a parameter to the constructor. -3. Add the following CSS file to the head of your HTML document. - -.. code-block:: html - - - -Since this class inherits from :code:`web::Element`, you can set styling and attributes with :code:`SetCSS()` and :code:`SetAttr()` respectively. -You can also stream your FontAwesomeIcon into other web components with the :code:`<<` operator. - -Example: -******** -.. code-block:: cpp - - #include "web/web.h" - #include "prefab/FontAwesomeIcon.h" - - emp::web::Document doc("emp_base"); - - emp::prefab::FontAwesomeIcon my_icon("fa-paw"); - doc << my_icon; - - my_icon.AddClass("custom_class"); - -.. _FontAwesome: https://fontawesome.com/v4.7.0/ -.. _FontAwesome library: https://fontawesome.com/v4.7.0/icons/ - -LoadingIcon -~~~~~~~~~~~ -The LoadingIcon class is used to add an animated loading icon. -One possible use for this icon is to be displayed while the contents of a web page is loading. -The icon is provided by `FontAwesome`_, so you will need to add its CSS to your HTML file to use this class. - -.. code-block:: html - - - -Since this class inherits from :code:`web::Element`, you can set styling and attributes with :code:`SetCSS()` and :code:`SetAttr()` respectively. -You can also stream your LoadingIcon into other web components with the :code:`<<` operator. - -Example: -******** -.. code-block:: cpp - - #include "web/web.h" - #include "prefab/LoadingIcon.h" - - emp::web::Document doc("emp_base"); - - emp::prefab::LoadingIcon spinner; - doc << spinner; - -LoadingModal -~~~~~~~~~~~~ -The LoadingModal header file makes adding a loading modal to a web page easy. -It will appear while the content of the page is rendering and will disappear when the page has completed loading. - -This header file is slightly different from the other prefab web tools. -To place the loading modal on your web page, you must import the LoadingModal.js script into your HTML file right after the opening body tag. -To close the modal you must call the :code:`CloseLoadingModal()` function in your .cc file after loading the desired content into the doc. - -Example: -******** -.. code-block:: cpp - - // .cc file - #include "web/web.h" - #include "LoadingModal.h" - - emp::web::Document doc("emp_base"); - - // Add elements to the doc a normal - - emp::prefab::CloseLoadingModal(); - -.. code-block:: html - - - - - - - - - - - - - - - - - - - -Modal -~~~~~ -The Modal class can be used to create Bootstrap modals that pops up in the middle of the screen. - -Since this class inherits from :code:`web::Div`, you can stream your Modal into other web components with the :code:`<<` operator. -You can also set the background color of the Modal with :code:`SetBackground()` passing it a string with a color name or its hex code value. - -Example: -******** -.. code-block:: cpp - - #include "web/web.h" - #include "web/Button.h" - #include "prefab/Modal.h" - - emp::web::Document doc("emp_base"); - - emp::prefab::Modal modal; - doc << modal; - - modal.AddHeaderContent("

Modal Header Section

"); - modal.AddBodyContent("This is the content of the modal"); - - modal.AddFooterContent("Modal Footer Section"); - UI::Button close_btn([](){;}, "Close"); - close_btn.SetAttr("class", "btn btn-secondary"); - modal.AddFooterContent(close_btn); - modal.AddButton(close_btn); - - modal.AddClosingX(); - - UI::Button modal_btn([](){;}, "Show Modal"); - doc << modal_btn; - modal_btn.SetAttr("class", "btn btn-info"); - modal.AddButton(modal_btn); - -ToggleSwitch -~~~~~~~~~~~~ -The ToggleSwitch class wraps checkbox input with Bootstrap custom swtich classes. -If you need to add a CSS class to the Input, do it after the creating the ToggleSwitch instance with :code:`AddClass()`. - - -Since this class inherits from :code:`web::Element`, you can set styling and attributes with :code:`SetCSS()` and :code:`SetAttr()` respectively. -You can also stream your ToggleSwitch into other web components with the :code:`<<` operator. - -Example: -******** -.. code-block:: cpp - - #include "web/web.h" - #include "prefab/ToggleSwitch.h" - - emp::prefab::ToggleSwitch on_switch([](std::string val){}, "Switch Defult On", true, "user_defined_switch_id"); - doc << on_switch; - - doc << "
"; - - emp::prefab::ToggleSwitch off_switch([](std::string val){}, NULL, false); - doc << off_switch; - off_switch.AddLabel("Switch Defult Off"); - -Add the link to Bootstrap in the head of your HTML file: -.. code-block:: html - - diff --git a/doc/library/testing/testing.md b/doc/library/testing/testing.md index 286b527229..1e0d9847b0 100644 --- a/doc/library/testing/testing.md +++ b/doc/library/testing/testing.md @@ -1,9 +1,12 @@ # Testing -## Unit Testing +## API + + ```{eval-rst} -.. doxygenfile:: emp/testing/unit_tests.hpp - :project: Empirical - :no-link: +.. toctree:: + :glob: + + api/* ``` diff --git a/doc/library/tools/tools.md b/doc/library/tools/tools.md index b1417a70c4..fcf1c6eda0 100644 --- a/doc/library/tools/tools.md +++ b/doc/library/tools/tools.md @@ -1,33 +1,12 @@ # Other Tools -## Timing Functions +## API + + ```{eval-rst} -.. doxygenfile:: emp/tools/timing.hpp - :project: Empirical - :no-link: -``` - -## Branch and Bound Solution States - -```{eval-rst} -.. doxygenfile:: emp/tools/SolveState.hpp - :project: Empirical - :no-link: -``` - -## String Utilities +.. toctree:: + :glob: -```{eval-rst} -.. doxygenfile:: emp/tools/string_utils.hpp - :project: Empirical - :no-link: -``` - -## Type Tracker - -```{eval-rst} -.. doxygenfile:: emp/tools/TypeTracker.hpp - :project: Empirical - :no-link: + api/* ``` diff --git a/doc/library/web/d3/d3-intro.md b/doc/library/web/d3/d3-intro.md index 13fb8332c4..1c512ad20b 100644 --- a/doc/library/web/d3/d3-intro.md +++ b/doc/library/web/d3/d3-intro.md @@ -1,9 +1,8 @@ -Using Empirical\'s D3.js Wrapper -================================ +# Using Empirica's D3.js Wrapper -If you\'re writing scientific code that runs on the web, you\'ll +If you're writing scientific code that runs on the web, you'll probably want to visualize the results (either as your program runs or -after it\'s done). To make this as easy as possible, Empirical includes +after it's done). To make this as easy as possible, Empirical includes a C++ wrapper for d3.js, a wildly popular and powerful Javascript data visualization library. Using the wrapper, you can create visualizations directly from C++. @@ -19,8 +18,7 @@ pre-built graph objects in an effort to help those new to Javascript visualization get started fast. This is an ongoing process and we\'re always open to suggestions! -A Minimal Example -================= +## A Minimal Example D3 visualizations run in web browsers. That means that to use this wrapper, you need to compile your C++ code to Javascript, using @@ -38,8 +36,7 @@ easiest way to make a visualization is to use one of the pre-built visualizations. Later we\'ll get into writing your own. Either way, you\'ll need: -C++ File --------- +### C++ File The C++ file that you\'ll compile to Javascript. For this example, we\'ll use the Empirical web module to build the whole web page: @@ -94,8 +91,7 @@ emcc my_program.cc -o my_program.js \ #.js extension tells Emscripten to compile #once you're done debugging) ``` -HTML File ---------- +### HTML File To tell the browser what to do with your Javascript, you need an html file: @@ -135,8 +131,7 @@ file: ``` -CSS File --------- +### CSS File Optionally, a CSS file can be used to make elements look the way you want them to. Here\'s one that includes the necessary styles to make @@ -174,8 +169,7 @@ style\_sheet.css, and is in the same directory as the html file): } ``` -Running your visualization --------------------------- +### Running your visualization Now to open up the page in a browser! Some browsers will let you open the page up directly, but some will complain about the fact that you\'re @@ -199,30 +193,29 @@ python -m http.server ![Using SimpleHTTPServer with Python3](../../images/python3HTTPserver.png){.align-center} You can now open a browser to the server (, -replacing 8000 with whatever number was after \"port\" in the output +replacing 8000 with whatever number was after "port" in the output from the command). You should see a list of file names in the directory your terminal was open to when you ran the HTTP Server command (unless -you happen to have a file named index.html, in which case you\'ll see +you happen to have a file named index.html, in which case you'll see the contents of that file). Assuming you ran this command from the -\"example\" directory in the directory structure shown above, you should +"example" directory in the directory structure shown above, you should see \"my\_html.html\" (or whatever you called your html file) on the list. Click on it. -Ta-da! There\'s your visualization. +Ta-da! There's your visualization. -It\'s convenient to have a visualization of data you\'ve already +It's convenient to have a visualization of data you've already generated, but the real power of D3 visualization objects is that they -can update in real time while your code runs. Here\'s an example C++ +can update in real time while your code runs. Here's an example C++ file that does that: > Example here -So that\'s how you use out-of-the-box D3 visualizations in Empirical. +So that's how you use out-of-the-box D3 visualizations in Empirical. Sometimes, though, you want to do something new and exciting. Which -brings us to the next section\... +brings us to the next section... -Writing Your Own Visualization -============================== +## Writing Your Own Visualization To build your own visualization, you need to understand a bit about how D3 works. Which means you need to understand a bit about how Javascript @@ -262,8 +255,8 @@ D3 C++ wrapper, you\'re doing the same thing, but from C++. Let\'s take a tour of the main components of D3: -Selections ----------- +### Selections + `Selections `{.interpreted-text role="ref"} are a way to work with groups of DOM elements. For instance, @@ -343,8 +336,7 @@ D3::Selection graph_circles = svg.SelectAll("circle"); Advanced note: You can also make selections based on classes with [D3::Select(.classname)]{.title-ref}. -Binding Data ------------- +### Binding Data In D3, you bind data to selections. Usually, you are binding that data because you to visualize it with SVG elements. So, usually the selection @@ -541,8 +533,7 @@ update.EnterAppend("circle") update.ExitRemove(); ``` -Changing Elements\' Traits --------------------------- +### Changing Elements\' Traits There are three types of traits that a DOM element might have: attributes, styles, and properties. For the most part, attributes are @@ -643,8 +634,7 @@ also select transitions, allowing you to choose to have their effects be animated, rather than occuring instantaneously (which can look choppy in many visualizations). -Scales and Axes ---------------- +### Scales and Axes Usually your data is not in units that you can directly draw on the screen. For instance, if you want to plot a variable on the Y axis that @@ -832,8 +822,7 @@ emp::JSWrap(times_two, "times_two"); s.SetAttr("r", "times_two"); ``` -- Advanced users may also wish to write functions directly in - Javascript, which is possible using Emscripten\'s macros. +- Advanced users may also wish to write functions directly in Javascript, which is possible using Emscripten's macros. ``` cpp // Put the function in global scope by adding it @@ -876,8 +865,7 @@ int get_x(JSONData d, int i, int j) {return d.x();}; s.SetAttr("cx", get_x); ``` -Under the Hood (for the curious, developers, and people trying to do weird stuff) -================================================================================= +## Under the Hood (for the curious, developers, and people trying to do weird stuff) For the most part, Empirical\'s d3 wrapper isn\'t that complicated under the hood. All C++ objects in the d3 module have a unique integer id. @@ -907,17 +895,7 @@ have not been conducted. Things to watch out for: -- D3 object creation order - be careful of the order your constructors - for d3 objects get called in. It\'s hard to make this happen, but if - you\'re constructing objects in the constructors for other objects, - it\'s possible for the ids to get mixed up. -- Errors in Javascript usually won\'t show up on compilation - you - need to actually run the code. -- Main is a function that gets run like any other. When main finishes - running, its local variables will go out of scope. This means that - everything needed for an ongoing animation needs to live in global - scope. -- Javascript is designed to work asynchronously in a lot of contexts - (especially when loading outside resources or updating the graphics - on the screen). This can change the way you need to structure your - code. +- D3 object creation order - be careful of the order your constructors for d3 objects get called in. It's hard to make this happen, but if you're constructing objects in the constructors for other objects, it's possible for the ids to get mixed up. +- Errors in Javascript usually won't show up on compilation - you need to actually run the code. +- Main is a function that gets run like any other. When main finishes running, its local variables will go out of scope. This means that everything needed for an ongoing animation needs to live in global scope. +- Javascript is designed to work asynchronously in a lot of contexts (especially when loading outside resources or updating the graphics on the screen). This can change the way you need to structure your code. diff --git a/doc/library/web/web.md b/doc/library/web/web.md index 2de8318c86..aafe7736c9 100644 --- a/doc/library/web/web.md +++ b/doc/library/web/web.md @@ -6,240 +6,13 @@ d3/d3 ``` -## Animations +## API + + ```{eval-rst} -.. doxygenfile:: emp/web/Animate.hpp - :project: Empirical - :no-link: -``` - -## Attributes - -```{eval-rst} -.. doxygenfile:: emp/web/Attributes.hpp - :project: Empirical - :no-link: -``` - -## Buttons - -```{eval-rst} -.. doxygenfile:: emp/web/Button.hpp - :project: Empirical - :no-link: -``` - -## Canvas - -```{eval-rst} -.. doxygenfile:: emp/web/Canvas.hpp - :project: Empirical - :no-link: -``` - -## Canvas Utilities - -```{eval-rst} -.. doxygenfile:: emp/web/canvas_utils.hpp - :project: Empirical - :no-link: -``` - -## Canvas Actions - -```{eval-rst} -.. doxygenfile:: emp/web/CanvasAction.hpp - :project: Empirical - :no-link: -``` - -## Canvas Shapes - -```{eval-rst} -.. doxygenfile:: emp/web/CanvasShape.hpp - :project: Empirical - :no-link: -``` - -## Color maps - -```{eval-rst} -.. doxygenfile:: emp/web/color_map.hpp - :project: Empirical - :no-link: -``` - -## Commands - -```{eval-rst} -.. doxygenfile:: emp/web/commands.hpp - :project: Empirical - :no-link: -``` - -## Divs - -```{eval-rst} -.. doxygenfile:: emp/web/Div.hpp - :project: Empirical - :no-link: -``` - -## Documents - -```{eval-rst} -.. doxygenfile:: emp/web/Document.hpp - :project: Empirical - :no-link: -``` - -## Useful functions for emscripten - -```{eval-rst} -.. doxygenfile:: emp/web/emfunctions.hpp - :project: Empirical - :no-link: -``` - -## Event Handling - -```{eval-rst} -.. doxygenfile:: emp/web/events.hpp - :project: Empirical - :no-link: -``` - -## File Input - -```{eval-rst} -.. doxygenfile:: emp/web/FileInput.hpp - :project: Empirical - :no-link: -``` - -## Font - -```{eval-rst} -.. doxygenfile:: emp/web/Font.hpp - :project: Empirical - :no-link: -``` +.. toctree:: + :glob: -## Images - -```{eval-rst} -.. doxygenfile:: emp/web/Image.hpp - :project: Empirical - :no-link: -``` - -## Initialization - -```{eval-rst} -.. doxygenfile:: emp/web/init.hpp - :project: Empirical - :no-link: -``` - -## Javascript Utilities - -```{eval-rst} -.. doxygenfile:: emp/web/js_utils.hpp - :project: Empirical - :no-link: -``` - -## JSWrap - -```{eval-rst} -.. doxygenfile:: emp/web/JSWrap.hpp - :project: Empirical - :no-link: -``` - -## Keypress Manager - -```{eval-rst} -.. doxygenfile:: emp/web/KeypressManager.hpp - :project: Empirical - :no-link: -``` - -## Listeners - -```{eval-rst} -.. doxygenfile:: emp/web/Listeners.hpp - :project: Empirical - :no-link: -``` - -## Raw Image - -```{eval-rst} -.. doxygenfile:: emp/web/RawImage.hpp - :project: Empirical - :no-link: -``` - -## Selector - -```{eval-rst} -.. doxygenfile:: emp/web/Selector.hpp - :project: Empirical - :no-link: -``` - -## Styles - -```{eval-rst} -.. doxygenfile:: emp/web/Style.hpp - :project: Empirical - :no-link: -``` - -## Tables - -```{eval-rst} -.. doxygenfile:: emp/web/Table.hpp - :project: Empirical - :no-link: -``` - -## Text - -```{eval-rst} -.. doxygenfile:: emp/web/Text.hpp - :project: Empirical - :no-link: -``` - -## Text Areas - -```{eval-rst} -.. doxygenfile:: emp/web/TextArea.hpp - :project: Empirical - :no-link: -``` - -## Tweens - -```{eval-rst} -.. doxygenfile:: emp/web/Tween.hpp - :project: Empirical - :no-link: -``` - -## Widgets - -```{eval-rst} -.. emp/web/Widget.hpp - :project: Empirical - :no-link: -``` - -```{eval-rst} -.. doxygenfile:: emp/web/WidgetExtras.hpp - :project: Empirical - :no-link: + api/* ``` diff --git a/doc/make_md.py b/doc/make_md.py new file mode 100644 index 0000000000..558684a627 --- /dev/null +++ b/doc/make_md.py @@ -0,0 +1,53 @@ +import os +import glob + + +def format_directive(filename): + """Create the breathe directive and add the options.""" + directive = f"```{{eval-rst}}\n.. doxygenfile:: {filename}\n :project: Empirical\n```\n" + return directive + + +def format_heading(level, text): + """Create a heading of [1, 2 or 3 supported].""" + symbol = ["# ", "## ", "### ", "#### "][ + level - 1 + ] + return symbol + text + "\n\n" + + +header_files = glob.glob("../include/emp/**/*.hpp") + +for h in header_files: + print(h) + h = h.removeprefix("../include/emp/") + just_dir = "/".join(h.split("/")[:-1]).lower() + last_dir = just_dir.split("/")[-1] + just_file = h.split("/")[-1] + if just_file.startswith("_"): + continue + if just_dir.startswith("in_progress"): + continue + if just_dir.startswith("polyfill"): + continue + new_dir = "library/" + just_dir + "/api" + print(new_dir) + toc_text = format_heading(2, "API") + "```{eval-rst}\n.. toctree::\n :glob:\n\n api/*\n```\n" + if not os.path.exists(new_dir): + os.makedirs(new_dir) + toc_file_name = f"library/{just_dir}/{last_dir}.md" + if not os.path.exists(toc_file_name): + toc_text = format_heading(1, last_dir) + with open(toc_file_name, "w") as target: + target.write(toc_text) + # elif toc_text not in open(toc_file_name).read(): + # with open(toc_file_name, "a") as target: + # target.write("\n" + toc_text) + + text = format_heading(1, f"{just_file}") + text += format_directive("emp/" + h) + + filename = just_file.removesuffix(".hpp") + ".md" + + with open(new_dir + "/" + filename, "w") as target: + target.write(text) diff --git a/doc/requirements.in b/doc/requirements.in index b828b68d43..799c4c954f 100644 --- a/doc/requirements.in +++ b/doc/requirements.in @@ -1,6 +1,7 @@ sphinx exhale -sphinx-rtd-theme +sphinx-rtd-theme>=1.0.0 coverxygen breathe myst-parser +sphinx-tippy diff --git a/doc/requirements.txt b/doc/requirements.txt index 688edaba1f..01466d8bf9 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -2,14 +2,16 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --resolver=backtracking +# pip-compile # alabaster==0.7.13 # via sphinx babel==2.12.1 # via sphinx beautifulsoup4==4.12.2 - # via exhale + # via + # exhale + # sphinx-tippy breathe==4.35.0 # via # -r requirements.in @@ -20,11 +22,12 @@ charset-normalizer==3.1.0 # via requests coverxygen==1.7.0 # via -r requirements.in -docutils==0.19 +docutils==0.18.1 # via # breathe # myst-parser # sphinx + # sphinx-rtd-theme exhale==0.2.4 # via -r requirements.in idna==3.4 @@ -37,6 +40,7 @@ jinja2==3.1.2 # via # myst-parser # sphinx + # sphinx-tippy lxml==4.9.2 # via exhale markdown-it-py==2.2.0 @@ -58,7 +62,9 @@ pygments==2.15.1 pyyaml==6.0 # via myst-parser requests==2.31.0 - # via sphinx + # via + # sphinx + # sphinx-tippy six==1.16.0 # via exhale snowballstemmer==2.2.0 @@ -72,7 +78,11 @@ sphinx==6.2.1 # exhale # myst-parser # sphinx-rtd-theme -sphinx-rtd-theme==0.5.1 + # sphinx-tippy + # sphinxcontrib-jquery +sphinx-rtd-theme==1.2.2 + # via -r requirements.in +sphinx-tippy==0.4.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx @@ -80,6 +90,8 @@ sphinxcontrib-devhelp==1.0.2 # via sphinx sphinxcontrib-htmlhelp==2.0.1 # via sphinx +sphinxcontrib-jquery==4.1 + # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 # via sphinx sphinxcontrib-qthelp==1.0.3 diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 32edb585e4..471428f2cd 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1408,6 +1408,7 @@ namespace emp { }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS // ============================================================= // === === // === Out-of-class member function definitions from above === @@ -1835,6 +1836,8 @@ namespace emp { double Systematics::CalcDiversity() const { return emp::Entropy(active_taxa, [](Ptr x){ return x->GetNumOrgs(); }, (double) org_count); } + + #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE diff --git a/include/emp/Evolve/World.hpp b/include/emp/Evolve/World.hpp index 54f2b9c1f8..f4a243fe81 100644 --- a/include/emp/Evolve/World.hpp +++ b/include/emp/Evolve/World.hpp @@ -944,6 +944,7 @@ namespace emp { }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS // ============================================================= // === === // === Out-of-class member function definitions from above === @@ -1735,7 +1736,7 @@ namespace emp { os << std::endl; } } - + #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_EVOLVE_WORLD_HPP_INCLUDE diff --git a/include/emp/base/MapProxy.hpp b/include/emp/base/MapProxy.hpp index 09ab236757..446a28ac15 100644 --- a/include/emp/base/MapProxy.hpp +++ b/include/emp/base/MapProxy.hpp @@ -108,7 +108,7 @@ namespace emp { operator const T&() const { emp_assert(is_init); return value; } }; - + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Doxygen is getting tripped up by the enable_ifs /// A type trait to determine if a class is a MapProxy template struct is_MapProxy : public std::false_type { }; @@ -116,8 +116,7 @@ namespace emp { struct is_MapProxy> : public std::true_type { }; - // Build externaly binary operators with MapProxy as the second argument. - #ifndef DOXYGEN_SHOULD_SKIP_THIS // Doxygen is getting tripped up by the enable_ifs + // Build external binary operators with MapProxy as the second argument. template () == false>::type* = nullptr> auto operator + (T1 v1, const MapProxy & v2) { return v1 + v2.emp_GetValue(); } template () == false>::type* = nullptr> @@ -159,6 +158,7 @@ namespace emp { #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ } +#ifndef DOXYGEN_SHOULD_SKIP_THIS // A crude, generic printing function for emp::MapProxy. template std::ostream & operator<<(std::ostream & out, const typename emp::MapProxy & p) { @@ -171,5 +171,6 @@ std::istream & operator>>(std::istream & is, typename emp::MapProxy & p) { is >> p.emp_GetValue(); return is; } +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_BASE_MAPPROXY_HPP_INCLUDE diff --git a/include/emp/base/Ptr.hpp b/include/emp/base/Ptr.hpp index 9ed0e0f14e..f479cd8287 100644 --- a/include/emp/base/Ptr.hpp +++ b/include/emp/base/Ptr.hpp @@ -180,7 +180,7 @@ namespace emp { } if (undeleted_info.size()) { - std::cerr << undeleted_info.size() << " undeleted pointers at end of exectution.\n"; + std::cerr << undeleted_info.size() << " undeleted pointers at end of execution.\n"; for (size_t i = 0; i < undeleted_info.size() && i < 10; ++i) { const auto & info = undeleted_info[i]; std::cerr << " PTR=" << info.GetPtr() @@ -216,7 +216,7 @@ namespace emp { return ptr_id.find(ptr) != ptr_id.end(); } - /// Retrive the ID associated with a pointer. + /// Retrieve the ID associated with a pointer. size_t GetCurID(const void * ptr) { emp_assert(HasPtr(ptr)); return ptr_id[ptr]; } /// Lookup how many pointers are being tracked. @@ -271,7 +271,7 @@ namespace emp { } #endif if (internal::ptr_debug) std::cout << "New: " << id << " (" << ptr << ")" << std::endl; - // Make sure pointer is not already stored -OR- hase been deleted (since re-use is possible). + // Make sure pointer is not already stored -OR- has been deleted (since re-use is possible). emp_assert(!HasPtr(ptr) || IsDeleted(GetCurID(ptr)), id); id_info.emplace_back(ptr); ptr_id[ptr] = id; @@ -286,14 +286,14 @@ namespace emp { return id; } - /// Increment the nuber of Pointers associated with an ID + /// Increment the number of Pointers associated with an ID void IncID(size_t id) { if (id == UNTRACKED_ID) return; // Not tracked! if (internal::ptr_debug) std::cout << "Inc: " << id << std::endl; id_info[id].Inc(id); } - /// Decrement the nuber of Pointers associated with an ID + /// Decrement the number of Pointers associated with an ID void DecID(size_t id) { if (id == UNTRACKED_ID) return; // Not tracked! auto & info = id_info[id]; @@ -437,7 +437,7 @@ namespace emp { Tracker().IncID(id); } - /// Construct from a raw pointer of campatable type. + /// Construct from a raw pointer of compatable type. template Ptr(T2 * in_ptr, bool track=false) : BasePtr(in_ptr, UNTRACKED_ID) { @@ -592,7 +592,7 @@ namespace emp { /// Delete this pointer (must NOT be an array). void Delete() { emp_assert(ptr, "Trying to delete null Ptr."); - emp_assert(id < Tracker().GetNumIDs(), id, "Trying to delete Ptr that we are not resposible for."); + emp_assert(id < Tracker().GetNumIDs(), id, "Trying to delete Ptr that we are not responsible for."); emp_assert(Tracker().IsArrayID(id) == false, id, "Trying to delete array pointer as non-array."); emp_assert(Tracker().IsActive(ptr), id, "Trying to delete inactive pointer (already deleted!)"); if (internal::ptr_debug) std::cout << "Ptr::Delete() : " << ptr << std::endl; @@ -603,7 +603,7 @@ namespace emp { /// Delete this pointer to an array (must be an array). void DeleteArray() { - emp_assert(id < Tracker().GetNumIDs(), id, "Trying to delete Ptr that we are not resposible for."); + emp_assert(id < Tracker().GetNumIDs(), id, "Trying to delete Ptr that we are not responsible for."); emp_assert(ptr, "Trying to delete null Ptr."); emp_assert(Tracker().IsArrayID(id), id, "Trying to delete non-array pointer as array."); emp_assert(Tracker().IsActive(ptr), id, "Trying to delete inactive pointer (already deleted!)"); diff --git a/include/emp/base/always_assert.hpp b/include/emp/base/always_assert.hpp index fe06b461e3..e5ec365210 100644 --- a/include/emp/base/always_assert.hpp +++ b/include/emp/base/always_assert.hpp @@ -22,7 +22,7 @@ * int a = 6; * emp_always_assert(a==5, a); * - * Unlinke "emp_assert", "emp_always_assert" will trigger an assertion error + * Unlike "emp_assert", "emp_always_assert" will trigger an assertion error * whether compiled in debug mode or not. * */ diff --git a/include/emp/base/always_assert_warning.hpp b/include/emp/base/always_assert_warning.hpp index 3fd557b1c9..2e24bb4ff2 100644 --- a/include/emp/base/always_assert_warning.hpp +++ b/include/emp/base/always_assert_warning.hpp @@ -21,7 +21,7 @@ * int a = 6; * emp_always_assert(a==5, a); * - * Unlinke "emp_assert_warning", "emp_always_assert_warning" will trigger an + * Unlike "emp_assert_warning", "emp_always_assert_warning" will trigger an * assertion error whether compiled in debug mode or not. */ diff --git a/include/emp/base/array.hpp b/include/emp/base/array.hpp index a52c71d579..feca6fa706 100644 --- a/include/emp/base/array.hpp +++ b/include/emp/base/array.hpp @@ -204,7 +204,7 @@ struct std::tuple_size> : public integral_constant { #endif // NDEBUG off - +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { // A crude, generic printing function for arrays. template @@ -218,7 +218,7 @@ namespace std { for (T & x : v) is >> x; return is; } - + #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_BASE_ARRAY_HPP_INCLUDE diff --git a/include/emp/base/emscripten_assert.hpp b/include/emp/base/emscripten_assert.hpp index 62fad7cf5b..6f985b42ae 100644 --- a/include/emp/base/emscripten_assert.hpp +++ b/include/emp/base/emscripten_assert.hpp @@ -20,6 +20,9 @@ /// emp_emscripten_assert() will not do anything. #define emp_emscripten_assert(...) emp_assert(__VA_ARGS__) #else + /// Require a specified condition to be true if this program was compiled to + /// Javascript with Emscripten. Note: If NDEBUG is defined, + /// emp_emscripten_assert() will not do anything. #define emp_emscripten_assert(...) #endif diff --git a/include/emp/base/optional.hpp b/include/emp/base/optional.hpp index 565890b098..ca12f6d58d 100644 --- a/include/emp/base/optional.hpp +++ b/include/emp/base/optional.hpp @@ -100,6 +100,7 @@ namespace emp { } // namespace emp +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { template @@ -110,7 +111,7 @@ namespace std { }; } // namespace std - +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif #endif // #ifndef EMP_BASE_OPTIONAL_HPP_INCLUDE diff --git a/include/emp/bits/BitArray.hpp b/include/emp/bits/BitArray.hpp index aaa9d54447..d1759b4303 100644 --- a/include/emp/bits/BitArray.hpp +++ b/include/emp/bits/BitArray.hpp @@ -43,8 +43,10 @@ namespace emp { template class BitArray { + #ifndef DOXYGEN_SHOULD_SKIP_THIS // make all templated instantiations friends with each other template friend class BitArray; + #endif // DOXYGEN_SHOULD_SKIP_THIS private: using this_t = BitArray; @@ -66,7 +68,7 @@ namespace emp { // Track number of bits in the final field; use 0 if a perfect fit. static constexpr size_t NUM_END_BITS = NUM_BITS & (FIELD_BITS - 1); - /// How many EXTRA bits are leftover in the gap at the end? + // How many EXTRA bits are leftover in the gap at the end? static constexpr size_t END_GAP = NUM_END_BITS ? (FIELD_BITS - NUM_END_BITS) : 0; // Mask to use to clear out any end bits that should be zeroes. @@ -122,10 +124,10 @@ namespace emp { [[nodiscard]] emp::Ptr BytePtr() { return reinterpret_cast(bits); } - /// Helper: call SHIFT with positive number instead + // Helper: call SHIFT with positive number instead void ShiftLeft(const size_t shift_size); - /// Helper for calling SHIFT with negative number + // Helper for calling SHIFT with negative number void ShiftRight(const size_t shift_size); /// Helper: call ROTATE with negative number instead @@ -138,7 +140,7 @@ namespace emp { /// Constructor: Assume all bits set to zero. explicit BitArray(bool init_val=false) noexcept { if (init_val) SetAll(); else Clear(); } - /// Copy constructor from another BitArray + // Copy constructor from another BitArray BitArray(const this_t & _in) noexcept { Copy(_in.bits); } /// Constructor to generate a BitArray from a std::bitset. @@ -168,7 +170,7 @@ namespace emp { /// Destructor. ~BitArray() = default; - /// Assignment operator (no separate move opperator since no resources to move...) + /// Assignment operator (no separate move operator since no resources to move...) BitArray & operator=(const this_t & in_bits) noexcept { return Copy(in_bits.bits); } /// Assignment operator from a std::bitset. @@ -188,7 +190,7 @@ namespace emp { template BitArray Export(size_t start_bit=0) const; - /// For debugging: make sure that there are no obvous problems with a BitArray object. + /// For debugging: make sure that there are no obvious problems with a BitArray object. bool OK() const; /// How many bits are in this BitArray? @@ -291,12 +293,14 @@ namespace emp { // ========= Comparison Operators ========== // + /// Test if two BitArray objects are identical. template [[nodiscard]] bool operator==(const BitArray & in) const; template [[nodiscard]] bool operator!=(const BitArray & in) const { return !(*this == in); } + /// Compare two BitArray objects, based on the associated binary value. template [[nodiscard]] bool operator< (const BitArray & in) const; @@ -315,7 +319,7 @@ namespace emp { // ========= Access Groups of bits ========= // - /// Retrive the byte at the specified byte index. + /// Retrieve the byte at the specified byte index. [[nodiscard]] uint8_t GetByte(size_t index) const; /// Get a read-only view into the internal array used by BitArray. @@ -429,7 +433,7 @@ namespace emp { [[nodiscard]] int FindOne() const; /// Deprecated: Return the position of the first one; return -1 if no ones in vector. - [[deprecated("Renamed to more acurate FindOne()")]] + [[deprecated("Renamed to more accurate FindOne()")]] [[nodiscard]] int FindBit() const { return FindOne(); } /// Return the position of the first one after start_pos; return -1 if no ones in vector. @@ -440,7 +444,7 @@ namespace emp { [[nodiscard]] int FindOne(const size_t start_pos) const; /// Deprecated version of FindOne(). - [[deprecated("Renamed to more acurate FindOne(start_pos)")]] + [[deprecated("Renamed to more accurate FindOne(start_pos)")]] [[nodiscard]] int FindBit(const size_t start_pos) const; /// Find the most-significant set-bit. @@ -450,7 +454,7 @@ namespace emp { int PopOne(); /// Deprecated version of PopOne(). - [[deprecated("Renamed to more acurate PopOne()")]] + [[deprecated("Renamed to more accurate PopOne()")]] int PopBit() { return PopOne(); } /// Return positions of all ones. @@ -645,10 +649,10 @@ namespace emp { /// Compound operator plus... const BitArray & operator+=(const BitArray & ar2) { return ADD_SELF(ar2); } - /// Compoount operator minus... + /// Compound operator minus... const BitArray & operator-=(const BitArray & ar2) { return SUB_SELF(ar2); } - /// STL COMPATABILITY + /// STL COMPATIBILITY /// A set of functions to allow drop-in replacement with std::bitset. [[nodiscard]] constexpr static size_t size() { return NUM_BITS; } [[nodiscard]] inline bool all() const { return All(); } @@ -685,7 +689,7 @@ namespace emp { const size_t start_pos = FieldPos(start); // Identify the start position WITHIN a bit field. const size_t stop_pos = FieldPos(stop); // Identify the stop position WITHIN a bit field. - size_t start_field = FieldID(start); // Ideftify WHICH bit field we're starting in. + size_t start_field = FieldID(start); // Identify WHICH bit field we're starting in. const size_t stop_field = FieldID(stop-1); // Identify the last field where we actually make a change. // If the start field and stop field are the same, mask off the middle. @@ -721,7 +725,7 @@ namespace emp { return *this; } - + #ifndef DOXYGEN_SHOULD_SKIP_THIS template void BitArray::ShiftLeft(const size_t shift_size) { // If we have only a single field, this operation can be quick. @@ -761,7 +765,7 @@ namespace emp { } - /// Helper for calling SHIFT with negative number + // Helper for calling SHIFT with negative number template void BitArray::ShiftRight(const size_t shift_size) { // If we have only a single field, this operation can be quick. @@ -801,7 +805,7 @@ namespace emp { } } - /// Helper: call ROTATE with negative number + // Helper: call ROTATE with negative number template void BitArray::RotateLeft(const size_t shift_size_raw) { const field_t shift_size = shift_size_raw % NUM_BITS; @@ -813,7 +817,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // mask necessary to suprress shift count overflow warnings + // mask necessary to suppress shift count overflow warnings c &= FIELD_LOG2_MASK; n = (n<>( (-(c+FIELD_BITS-NUM_BITS)) & FIELD_LOG2_MASK )); @@ -824,7 +828,7 @@ namespace emp { ShiftRight(NUM_BITS - shift_size); OR_SELF(dup); } else { - // for big BitArrays, manual rotating is fater + // for big BitArrays, manual rotating is faster // note that we already modded shift_size by NUM_BITS // so there's no need to mod by FIELD_SIZE here @@ -885,7 +889,7 @@ namespace emp { } - /// Helper for calling ROTATE with positive number + // Helper for calling ROTATE with positive number template void BitArray::RotateRight(const size_t shift_size_raw) { @@ -899,7 +903,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // mask necessary to suprress shift count overflow warnings + // mask necessary to suppress shift count overflow warnings c &= FIELD_LOG2_MASK; n = (n>>c) | (n<<( (NUM_BITS-c) & FIELD_LOG2_MASK )); @@ -910,7 +914,7 @@ namespace emp { ShiftLeft(NUM_BITS - shift_size); OR_SELF(dup); } else { - // for big BitArrays, manual rotating is fater + // for big BitArrays, manual rotating is faster const field_t field_shift = (shift_size / FIELD_BITS) % NUM_FIELDS; const int bit_shift = shift_size % FIELD_BITS; @@ -960,14 +964,14 @@ namespace emp { // -------------------- Longer Constructors and bit copying --------------------- - /// Constructor to generate a BitArray from a std::bitset. + // Constructor to generate a BitArray from a std::bitset. template BitArray::BitArray(const std::bitset & bitset) { for (size_t bit{}; bit < NUM_BITS; ++bit) Set( bit, bitset[bit] ); ClearExcessBits(); } - /// Constructor to generate a BitArray from a string of '0's and '1's. + // Constructor to generate a BitArray from a string of '0's and '1's. template BitArray::BitArray(const std::string & bitstring) { @@ -995,7 +999,7 @@ namespace emp { } } - /// Assignment operator from a std::bitset. + // Assignment operator from a std::bitset. template BitArray & BitArray::operator=(const std::bitset & bitset) { @@ -1003,7 +1007,7 @@ namespace emp { return *this; } - /// Assignment operator from a string of '0's and '1's. + // Assignment operator from a string of '0's and '1's. template BitArray & BitArray::operator=(const std::string & bitstring) { @@ -1019,7 +1023,7 @@ namespace emp { } - /// Assign from a BitArray of a different size. + // Assign from a BitArray of a different size. template template BitArray & BitArray::Import( @@ -1065,7 +1069,7 @@ namespace emp { } - /// Convert to a BitArray of a different size. + // Convert to a BitArray of a different size. template template BitArray BitArray::Export(size_t start_bit) const { @@ -1075,7 +1079,7 @@ namespace emp { return out_bits; } - /// For debugging: make sure that there are no obvous problems with a BitArray object. + // For debugging: make sure that there are no obvious problems with a BitArray object. template bool BitArray::OK() const { // Make sure final bits are zeroed out. @@ -1096,7 +1100,7 @@ namespace emp { return (bits[field_id] & (((field_t)1U) << pos_id)) != 0; } - /// Set the bit at a specified index. + // Set the bit at a specified index. template BitArray & BitArray::Set(size_t index, bool value) { emp_assert(index < NUM_BITS); @@ -1110,7 +1114,7 @@ namespace emp { return *this; } - /// Set all bits to one. + // Set all bits to one. template BitArray & BitArray::SetAll() noexcept { for (field_t & x : bits) x = FIELD_ALL; @@ -1119,7 +1123,7 @@ namespace emp { } - /// Flip a single bit + // Flip a single bit template BitArray & BitArray::Toggle(size_t index) { emp_assert(index >= 0 && index < NUM_BITS); @@ -1136,7 +1140,7 @@ namespace emp { // ------------------------- Implementations Randomization functions ------------------------- - /// Set all bits randomly, with a 50% probability of being a 0 or 1. + // Set all bits randomly, with a 50% probability of being a 0 or 1. template BitArray & BitArray::Randomize(Random & random) { random.RandFill(BytePtr(), TOTAL_BYTES); @@ -1144,7 +1148,7 @@ namespace emp { return *this; } - /// Set all bits randomly, with probability specified at compile time. + // Set all bits randomly, with probability specified at compile time. template template BitArray & BitArray::RandomizeP(Random & random, @@ -1157,7 +1161,7 @@ namespace emp { } - /// Set all bits randomly, with a given probability of being on. + // Set all bits randomly, with a given probability of being on. template BitArray & BitArray::Randomize(Random & random, const double p, const size_t start_pos, const size_t stop_pos) { @@ -1169,7 +1173,7 @@ namespace emp { return *this; } - /// Set all bits randomly, with a given number of them being on. + // Set all bits randomly, with a given number of them being on. template BitArray & BitArray::ChooseRandom( @@ -1232,7 +1236,7 @@ namespace emp { return *this; } - /// Flip random bits with a given probability. + // Flip random bits with a given probability. // @CAO: Possibly faster to generate a sequence of bits and XORing with them. template BitArray & BitArray::FlipRandom(Random & random, @@ -1249,7 +1253,7 @@ namespace emp { return *this; } - /// Set random bits with a given probability (does not check if already set.) + // Set random bits with a given probability (does not check if already set.) template BitArray & BitArray::SetRandom(Random & random, const double p, @@ -1265,7 +1269,7 @@ namespace emp { return *this; } - /// Unset random bits with a given probability (does not check if already zero.) + // Unset random bits with a given probability (does not check if already zero.) template BitArray & BitArray::ClearRandom(Random & random, const double p, @@ -1281,7 +1285,7 @@ namespace emp { return *this; } - /// Flip a specified number of random bits. + // Flip a specified number of random bits. template BitArray & BitArray::FlipRandomCount(Random & random, const size_t num_bits) @@ -1291,7 +1295,7 @@ namespace emp { return *this ^= target_bits; } - /// Set a specified number of random bits (does not check if already set.) + // Set a specified number of random bits (does not check if already set.) template BitArray & BitArray::SetRandomCount(Random & random, const size_t num_bits) @@ -1301,7 +1305,7 @@ namespace emp { return *this |= target_bits; } - /// Unset a specified number of random bits (does not check if already zero.) + // Unset a specified number of random bits (does not check if already zero.) template BitArray & BitArray::ClearRandomCount(Random & random, const size_t num_bits) @@ -1314,7 +1318,7 @@ namespace emp { // ------------------------- Implementations of Comparison Operators ------------------------- - /// Test if two BitArray objects are identical. + // Test if two BitArray objects are identical. template template bool BitArray::operator==(const BitArray & in_bits) const { @@ -1326,7 +1330,7 @@ namespace emp { return true; } - /// Compare two BitArray objects, based on the associated binary value. + // Compare two BitArray objects, based on the associated binary value. template template bool BitArray::operator<(const BitArray & in_bits) const { @@ -1342,7 +1346,7 @@ namespace emp { // ------------------------- Access Groups of bits ------------------------- - /// Get the full byte starting from the bit at a specified index. + // Get the full byte starting from the bit at a specified index. template uint8_t BitArray::GetByte(size_t index) const { emp_assert(index < TOTAL_BYTES); @@ -1352,8 +1356,8 @@ namespace emp { } - /// Get a read-only view into the internal array used by BitArray. - /// @return Read-only span of BitArray's bytes. + // Get a read-only view into the internal array used by BitArray. + // @return Read-only span of BitArray's bytes. template std::span BitArray::GetBytes() const { return std::span( @@ -1363,7 +1367,7 @@ namespace emp { } - /// Set the full byte starting at the bit at the specified index. + // Set the full byte starting at the bit at the specified index. template void BitArray::SetByte(size_t index, uint8_t value) { emp_assert(index < TOTAL_BYTES); @@ -1373,8 +1377,8 @@ namespace emp { bits[field_id] = (bits[field_id] & ~(((field_t)255U) << pos_id)) | (val_uint << pos_id); } - /// Get the overall value of this BitArray, using a uint encoding, but including all bits - /// and returning the value as a double. + // Get the overall value of this BitArray, using a uint encoding, but including all bits + // and returning the value as a double. template double BitArray::GetValue() const { // If we have 64 bits or fewer, we can load the full value and return it. @@ -1399,7 +1403,7 @@ namespace emp { return out_value; } - /// Get specified type at a given index (in steps of that type size) + // Get specified type at a given index (in steps of that type size) template template T BitArray::GetValueAtIndex(const size_t index) const { @@ -1416,7 +1420,7 @@ namespace emp { } - /// Set specified type at a given index (in steps of that type size) + // Set specified type at a given index (in steps of that type size) template template void BitArray::SetValueAtIndex(const size_t index, T in_value) { @@ -1430,7 +1434,7 @@ namespace emp { } - /// Get the specified type starting from a given BIT position. + // Get the specified type starting from a given BIT position. template template T BitArray::GetValueAtBit(const size_t index) const { @@ -1444,7 +1448,7 @@ namespace emp { } - /// Set the specified type starting from a given BIT position. + // Set the specified type starting from a given BIT position. // @CAO: Can be optimized substantially, especially for long BitArrays. template template @@ -1465,10 +1469,10 @@ namespace emp { // ------------------------- Other Analyses ------------------------- - /// A simple hash function for bit vectors. + // A simple hash function for bit vectors. template std::size_t BitArray::Hash() const noexcept { - /// If we have a vector of size_t, treat it as a vector of hash values to combine. + // If we have a vector of size_t, treat it as a vector of hash values to combine. if constexpr (std::is_same_v) { return hash_combine(bits, NUM_FIELDS); } @@ -1488,7 +1492,7 @@ namespace emp { } // TODO: see https://arxiv.org/pdf/1611.07612.pdf for fast pop counts - /// Count the number of ones in the BitArray. + // Count the number of ones in the BitArray. template size_t BitArray::CountOnes() const { size_t bit_count = 0; @@ -1501,7 +1505,7 @@ namespace emp { return bit_count; } - /// Faster counting of ones for very sparse bit vectors. + // Faster counting of ones for very sparse bit vectors. template size_t BitArray::CountOnes_Sparse() const { size_t bit_count = 0; @@ -1514,7 +1518,7 @@ namespace emp { return bit_count; } - /// Return the index of the first one in the sequence; return -1 if no ones are available. + // Return the index of the first one in the sequence; return -1 if no ones are available. template int BitArray::FindOne() const { size_t field_id = 0; @@ -1523,7 +1527,7 @@ namespace emp { (int) (find_bit(bits[field_id]) + (field_id << FIELD_LOG2)) : -1; } - /// Return index of first one in sequence AFTER start_pos (or -1 if no ones) + // Return index of first one in sequence AFTER start_pos (or -1 if no ones) template int BitArray::FindOne(const size_t start_pos) const { if (start_pos >= NUM_BITS) return -1; // If we're past the end, return fail. @@ -1543,7 +1547,7 @@ namespace emp { (int) (find_bit(bits[field_id]) + (field_id * FIELD_BITS)) : -1; } - /// Find the most-significant set-bit. + // Find the most-significant set-bit. template int BitArray::FindMaxOne() const { // Find the max field with a one. @@ -1570,7 +1574,7 @@ namespace emp { return (int) (max_field * FIELD_BITS + offset); } - /// Return index of first one in sequence (or -1 if no ones); change this position to zero. + // Return index of first one in sequence (or -1 if no ones); change this position to zero. template int BitArray::PopOne() { const int out_bit = FindOne(); @@ -1578,7 +1582,7 @@ namespace emp { return out_bit; } - /// Return a vector indicating the posistions of all ones in the BitArray. + // Return a vector indicating the positions of all ones in the BitArray. template emp::vector BitArray::GetOnes() const { // @CAO -- There are better ways to do this with bit tricks. @@ -1590,7 +1594,7 @@ namespace emp { return ones; } - /// Find the length of the longest continuous series of ones. + // Find the length of the longest continuous series of ones. template size_t BitArray::LongestSegmentOnes() const { size_t length = 0; @@ -1605,14 +1609,14 @@ namespace emp { // ------------------------- Print/String Functions ------------------------- // - /// Convert this BitArray to a string (using default direction) + // Convert this BitArray to a string (using default direction) template std::string BitArray::ToString() const { if constexpr (ZERO_LEFT) return ToArrayString(); else return ToBinaryString(); } - /// Convert this BitArray to an array string [0 index on left] + // Convert this BitArray to an array string [0 index on left] template std::string BitArray::ToArrayString() const { std::string out_string; @@ -1621,7 +1625,7 @@ namespace emp { return out_string; } - /// Convert this BitArray to a numerical string [0 index on right] + // Convert this BitArray to a numerical string [0 index on right] template std::string BitArray::ToBinaryString() const { std::string out_string; @@ -1630,7 +1634,7 @@ namespace emp { return out_string; } - /// Convert this BitArray to a series of IDs + // Convert this BitArray to a series of IDs template std::string BitArray::ToIDString(const std::string & spacer) const { std::stringstream ss; @@ -1638,7 +1642,7 @@ namespace emp { return ss.str(); } - /// Convert this BitArray to a series of IDs with ranges condensed. + // Convert this BitArray to a series of IDs with ranges condensed. template std::string BitArray::ToRangeString(const std::string & spacer, const std::string & ranger) const @@ -1648,7 +1652,7 @@ namespace emp { return ss.str(); } - /// Print a space between each field (or other provided spacer) + // Print a space between each field (or other provided spacer) template void BitArray::PrintFields(std::ostream & out, const std::string & spacer) const { for (size_t i = NUM_BITS-1; i < NUM_BITS; i--) { @@ -1657,7 +1661,7 @@ namespace emp { } } - /// Print a space between each field (or other provided spacer) + // Print a space between each field (or other provided spacer) template void BitArray::PrintDebug(std::ostream & out) const { for (size_t field = 0; field < NUM_FIELDS; field++) { @@ -1673,7 +1677,7 @@ namespace emp { out << "^" << std::endl; } - /// Print the locations of all one bits, using the provided spacer (default is a single space) + // Print the locations of all one bits, using the provided spacer (default is a single space) template void BitArray::PrintOneIDs(std::ostream & out, const std::string & spacer) const { bool started = false; @@ -1686,7 +1690,7 @@ namespace emp { } } - /// Print the ones in a range format. E.g., 2-5,7,10-15 + // Print the ones in a range format. E.g., 2-5,7,10-15 template void BitArray::PrintAsRange(std::ostream & out, const std::string & spacer, @@ -1710,7 +1714,7 @@ namespace emp { // ------------------------- Whole BitArray manipulation functions ------------------------- - /// Perform a Boolean NOT on this BitArray, store result here, and return this object. + // Perform a Boolean NOT on this BitArray, store result here, and return this object. template BitArray & BitArray::NOT_SELF() { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = ~bits[i]; @@ -1718,21 +1722,21 @@ namespace emp { return *this; } - /// Perform a Boolean AND with a second BitArray, store result here, and return this object. + // Perform a Boolean AND with a second BitArray, store result here, and return this object. template BitArray & BitArray::AND_SELF(const this_t & array2) { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = bits[i] & array2.bits[i]; return *this; } - /// Perform a Boolean OR with a second BitArray, store result here, and return this object. + // Perform a Boolean OR with a second BitArray, store result here, and return this object. template BitArray & BitArray::OR_SELF(const this_t & array2) { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = bits[i] | array2.bits[i]; return *this; } - /// Perform a Boolean NAND with a second BitArray, store result here, and return this object. + // Perform a Boolean NAND with a second BitArray, store result here, and return this object. template BitArray & BitArray::NAND_SELF(const this_t & array2) { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = ~(bits[i] & array2.bits[i]); @@ -1740,7 +1744,7 @@ namespace emp { return *this; } - /// Perform a Boolean NOR with a second BitArray, store result here, and return this object. + // Perform a Boolean NOR with a second BitArray, store result here, and return this object. template BitArray & BitArray::NOR_SELF(const this_t & array2) { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = ~(bits[i] | array2.bits[i]); @@ -1748,14 +1752,14 @@ namespace emp { return *this; } - /// Perform a Boolean XOR with a second BitArray, store result here, and return this object. + // Perform a Boolean XOR with a second BitArray, store result here, and return this object. template BitArray & BitArray::XOR_SELF(const this_t & array2) { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = bits[i] ^ array2.bits[i]; return *this; } - /// Perform a Boolean EQU with a second BitArray, store result here, and return this object. + // Perform a Boolean EQU with a second BitArray, store result here, and return this object. template BitArray & BitArray::EQU_SELF(const this_t & array2) { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = ~(bits[i] ^ array2.bits[i]); @@ -1763,8 +1767,8 @@ namespace emp { return *this; } - /// Positive shifts go right and negative shifts go left (0 does nothing); - /// return result. + // Positive shifts go right and negative shifts go left (0 does nothing); + // return result. template BitArray BitArray::SHIFT(const int shift_size) const { this_t out_array(*this); @@ -1773,8 +1777,8 @@ namespace emp { return out_array; } - /// Positive shifts go right and negative shifts go left (0 does nothing); - /// store result here, and return this object. + // Positive shifts go right and negative shifts go left (0 does nothing); + // store result here, and return this object. template BitArray & BitArray::SHIFT_SELF(const int shift_size) { if (shift_size > 0) ShiftRight((field_t) shift_size); @@ -1782,7 +1786,7 @@ namespace emp { return *this; } - /// Reverse the order of bits in the BitArray + // Reverse the order of bits in the BitArray template BitArray & BitArray::REVERSE_SELF() { @@ -1808,7 +1812,7 @@ namespace emp { } - /// Reverse order of bits in the BitArray. + // Reverse order of bits in the BitArray. template BitArray BitArray::REVERSE() const { this_t out_array(*this); @@ -1816,8 +1820,8 @@ namespace emp { } - /// Positive rotates go left and negative rotates go left (0 does nothing); - /// return result. + // Positive rotates go left and negative rotates go left (0 does nothing); + // return result. template BitArray BitArray::ROTATE(const int rotate_size) const { this_t out_array(*this); @@ -1826,8 +1830,8 @@ namespace emp { return out_array; } - /// Positive rotates go right and negative rotates go left (0 does nothing); - /// store result here, and return this object. + // Positive rotates go right and negative rotates go left (0 does nothing); + // store result here, and return this object. template BitArray & BitArray::ROTATE_SELF(const int rotate_size) { if (rotate_size > 0) RotateRight((field_t) rotate_size); @@ -1835,7 +1839,7 @@ namespace emp { return *this; } - /// Helper: call ROTATE with negative number instead + // Helper: call ROTATE with negative number instead template template BitArray & BitArray::ROTL_SELF() { @@ -1847,7 +1851,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // mask necessary to suprress shift count overflow warnings + // mask necessary to suppress shift count overflow warnings c &= FIELD_LOG2_MASK; n = (n<>( (-(c+FIELD_BITS-NUM_BITS)) & FIELD_LOG2_MASK )); @@ -1916,7 +1920,7 @@ namespace emp { } - /// Helper for calling ROTATE with positive number + // Helper for calling ROTATE with positive number template template BitArray & BitArray::ROTR_SELF() { @@ -1929,7 +1933,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // mask necessary to suprress shift count overflow warnings + // mask necessary to suppress shift count overflow warnings c &= FIELD_LOG2_MASK; n = (n>>c) | (n<<( (NUM_BITS-c) & FIELD_LOG2_MASK )); @@ -1985,18 +1989,18 @@ namespace emp { } - /// Addition of two BitArrays. - /// Wraps if it overflows. - /// Returns result. + // Addition of two BitArrays. + // Wraps if it overflows. + // Returns result. template BitArray BitArray::ADD(const BitArray & array2) const{ this_t out_array(*this); return out_array.ADD_SELF(array2); } - /// Addition of two BitArrays. - /// Wraps if it overflows. - /// Returns this object. + // Addition of two BitArrays. + // Wraps if it overflows. + // Returns this object. template BitArray & BitArray::ADD_SELF(const this_t & array2) { bool carry = false; @@ -2022,18 +2026,18 @@ namespace emp { return *this; } - /// Subtraction of two BitArrays. - /// Wraps around if it underflows. - /// Returns result. + // Subtraction of two BitArrays. + // Wraps around if it underflows. + // Returns result. template BitArray BitArray::SUB(const this_t & array2) const{ this_t out_array(*this); return out_array.SUB_SELF(array2); } - /// Subtraction of two BitArrays. - /// Wraps if it underflows. - /// Returns this object. + // Subtraction of two BitArrays. + // Wraps if it underflows. + // Returns this object. template BitArray & BitArray::SUB_SELF(const this_t & array2){ @@ -2057,6 +2061,7 @@ namespace emp { return *this; } + #endif // DOXYGEN_SHOULD_SKIP_THIS // ------------------------- Extra Functions ------------------------- @@ -2078,7 +2083,8 @@ namespace emp { } -/// For hashing BitArrays +#ifndef DOXYGEN_SHOULD_SKIP_THIS +// For hashing BitArrays namespace std { template @@ -2090,5 +2096,5 @@ namespace std } }; } - +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_BITS_BITARRAY_HPP_INCLUDE diff --git a/include/emp/bits/BitMatrix.hpp b/include/emp/bits/BitMatrix.hpp index 53c5b49323..97a73ba00d 100644 --- a/include/emp/bits/BitMatrix.hpp +++ b/include/emp/bits/BitMatrix.hpp @@ -21,10 +21,10 @@ namespace emp { - /// @brief A simple class to manage a COLS x ROWS matrix of bits. + /// A simple class to manage a COLS x ROWS matrix of bits. /// /// Bits are translated to a bitset with 0 in the upper left and moving through bits from - /// left to right and top to bottom. For example, the indecies in a 3x3 bit matrix would be + /// left to right and top to bottom. For example, the indices in a 3x3 bit matrix would be /// organized as such: /// /// 0 1 2 @@ -37,10 +37,13 @@ namespace emp { BitSet bits; ///< Actual bits in matrix. public: + + #ifndef DOXYGEN_SHOULD_SKIP_THIS template constexpr BitSet Mask() const { return BitSet(); } + #endif // DOXYGEN_SHOULD_SKIP_THIS /// Keep only a single column of values, reducing all others to zeros. template @@ -67,7 +70,6 @@ namespace emp { return mask; } -// public: BitMatrix() { ; } BitMatrix(const BitSet & in_bits) : bits(in_bits) { ; } BitMatrix(const BitMatrix & in_matrix) : bits(in_matrix.bits) { ; } @@ -112,15 +114,14 @@ namespace emp { void ClearCol(size_t col) { bits &= ~(MaskCol<0>() << col); } void ClearRow(size_t row) { bits &= ~(MaskRow<0>() << (row * COLS)); } - // Count the number of set bits in the matrix. + /// Count the number of set bits in the matrix. size_t CountOnes() const { return bits.count(); } - // Find the position of the first non-zero bit. - // size_t FindOne() const { return (~bits & (bits - 1)).count(); } - + /// Find the position of the first non-zero bit. + /// size_t FindOne() const { return (~bits & (bits - 1)).count(); } int FindOne() const { return bits.FindOne(); } - // Shift the whole matrix in the specified direction. + /// Shift the whole matrix in the specified direction. BitMatrix LeftShift() const { return ((bits & ~MaskCol<0>()) >> 1); } BitMatrix RightShift() const { return ((bits << 1) & ~MaskCol<0>()); } BitMatrix UpShift() const { return bits >> COLS; } @@ -130,10 +131,10 @@ namespace emp { BitMatrix URShift() const { return ((bits >> (COLS-1)) & ~MaskCol<0>()); } BitMatrix DRShift() const { return ((bits << (COLS+1)) & ~MaskCol<0>()); } - // Find all points within one step of the ones on this bit matrix. + /// Find all points within one step of the ones on this bit matrix. BitMatrix GetReach() const { return *this | LeftShift() | RightShift() | UpShift() | DownShift(); } - // Find all points reachable from the start position. + /// Find all points reachable from the start position. BitMatrix GetRegion(size_t start_pos) const { // Make sure we have a legal region, or else return an empty matrix. if (start_pos < 0 || start_pos >= GetSize() || bits[start_pos] == 0) return BitMatrix(); @@ -150,10 +151,10 @@ namespace emp { } BitMatrix GetRegion(size_t col, size_t row) const { return GetRegion(ToID(col,row)); } - // Does this bit matrix represent a connected set of ones? + /// Does this bit matrix represent a connected set of ones? bool IsConnected() const { return GetRegion((size_t)FindOne()) == *this; } - // Does this bit matrix have any 2x2 square of ones in it? + /// Does this bit matrix have any 2x2 square of ones in it? bool Has2x2() const { return (*this & UpShift() & LeftShift() & ULShift()).Any(); } void Print(std::ostream & os = std::cout) const { diff --git a/include/emp/bits/BitVector.hpp b/include/emp/bits/BitVector.hpp index 787f533019..fc3d76bb16 100644 --- a/include/emp/bits/BitVector.hpp +++ b/include/emp/bits/BitVector.hpp @@ -19,7 +19,7 @@ * @todo For large BitVectors we can use a factory to preserve/adjust bit info. That should be * just as efficient than a reserve, but without the need to store extra in-class info. * @todo Implement append(), resize(), push_bit(), insert(), remove() - * @todo Think about how itertors should work for BitVector. It should probably go bit-by-bit, + * @todo Think about how iterators should work for BitVector. It should probably go bit-by-bit, * but there are very few circumstances where that would be useful. Going through the * positions of all ones would be more useful, but perhaps less intuitive. * @@ -48,9 +48,9 @@ namespace emp { - /// @brief A drop-in replacement for std::vector, but with extra bitwise logic features. + /// A drop-in replacement for std::vector, but with extra bitwise logic features. /// - /// This class stores an arbirary number of bits in a set of "fields" (typically 32 bits or 64 + /// This class stores an arbitrary number of bits in a set of "fields" (typically 32 bits or 64 /// bits per field, depending on which should be faster.) Individual bits can be extracted, /// -or- bitwise logic (including more complex bit magic) can be used on the groups of bits. @@ -85,7 +85,7 @@ namespace emp { /// A mask to cut off all of the final bits. [[nodiscard]] field_t EndMask() const { return MaskLow(NumEndBits()); } - /// How many feilds do we need for the current set of bits? + /// How many fields do we need for the current set of bits? [[nodiscard]] size_t NumFields() const { return num_bits ? (1 + ((num_bits - 1) / FIELD_BITS)) : 0; } /// What is the ID of the last occupied field? @@ -227,7 +227,7 @@ namespace emp { /// How many distinct values could be held in this BitVector? [[nodiscard]] double GetNumStates() const { return emp::Pow2(num_bits); } - /// Retrive the bit value from the specified index. + /// Retrieve the bit value from the specified index. [[nodiscard]] bool Get(size_t index) const; /// A safe version of Get() for indexing out of range. Useful for representing collections. @@ -344,7 +344,7 @@ namespace emp { // ========= Access Groups of bits ========= // - /// Retrive the byte at the specified byte index. + /// Retrieve the byte at the specified byte index. [[nodiscard]] uint8_t GetByte(size_t index) const; /// Get a read-only view into the internal array used by BitVector. @@ -483,7 +483,7 @@ namespace emp { [[nodiscard]] int FindOne() const; /// Deprecated: Return the position of the first one; return -1 if no ones in vector. - [[deprecated("Renamed to more acurate FindOne()")]] + [[deprecated("Renamed to more accurate FindOne()")]] [[nodiscard]] int FindBit() const { return FindOne(); } /// Return the position of the first one after start_pos; return -1 if no ones in vector. @@ -494,7 +494,7 @@ namespace emp { [[nodiscard]] int FindOne(const size_t start_pos) const; /// Deprecated version of FindOne(). - [[deprecated("Renamed to more acurate FindOne(start_pos)")]] + [[deprecated("Renamed to more accurate FindOne(start_pos)")]] [[nodiscard]] int FindBit(const size_t start_pos) const; /// Find the most-significant set-bit. @@ -504,7 +504,7 @@ namespace emp { int PopOne(); /// Deprecated version of PopOne(). - [[deprecated("Renamed to more acurate PopOne()")]] + [[deprecated("Renamed to more accurate PopOne()")]] int PopBit() { return PopOne(); } /// Return positions of all ones. @@ -693,7 +693,7 @@ namespace emp { /// Compound operator for shift right... BitVector & operator>>=(const size_t shift_size) { return SHIFT_SELF((int)shift_size); } - // ========= Standard Library Compatability ========= // + // ========= Standard Library Compatibility ========= // // A set of functions to allow drop-in replacement with std::bitset. [[nodiscard]] size_t size() const { return num_bits; } @@ -728,6 +728,8 @@ namespace emp { for (size_t i = 0; i < NUM_FIELDS; i++) bits[i] = in[i]; } + #ifndef DOXYGEN_SHOULD_SKIP_THIS + // Move bits from one position in the genome to another; leave old positions unchanged. // @CAO: Can speed up by focusing only on the moved fields (i.e., don't shift unused bits). void BitVector::RawCopy(const size_t from_start, const size_t from_stop, const size_t to) { @@ -749,6 +751,8 @@ namespace emp { OR_SELF(move_bits); // Merge bitstrings together. } + #endif // DOXYGEN_SHOULD_SKIP_THIS + template BitVector & BitVector::ApplyRange(const FUN_T & fun, size_t start, size_t stop) { if (start == stop) return *this; // Empty range. @@ -757,7 +761,7 @@ namespace emp { emp_assert(stop <= num_bits, stop, num_bits); // Stop cannot be past the end of the bits const size_t start_pos = FieldPos(start); // Identify the start position WITHIN a bit field. const size_t stop_pos = FieldPos(stop); // Identify the stop position WITHIN a bit field. - size_t start_field = FieldID(start); // Ideftify WHICH bit field we're starting in. + size_t start_field = FieldID(start); // Identify WHICH bit field we're starting in. const size_t stop_field = FieldID(stop-1); // Identify the last field where we actually make a change. // If the start field and stop field are the same, mask off the middle. @@ -877,7 +881,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // Mask necessary to suprress shift count overflow warnings. + // Mask necessary to suppress shift count overflow warnings. c &= FIELD_LOG2_MASK; n = (n<>( (-(c+FIELD_BITS-num_bits)) & FIELD_LOG2_MASK )); } @@ -887,7 +891,7 @@ namespace emp { ShiftRight(num_bits - shift_size); OR_SELF(dup); } - else { // For big BitVectors, manual rotating is fater + else { // For big BitVectors, manual rotating is faster // Note: we already modded shift_size by num_bits, so no need to mod by FIELD_SIZE const int field_shift = ( shift_size + EndGap() ) / FIELD_BITS; @@ -953,7 +957,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // mask necessary to suprress shift count overflow warnings + // mask necessary to suppress shift count overflow warnings c &= FIELD_LOG2_MASK; n = (n>>c) | (n<<( (num_bits-c) & FIELD_LOG2_MASK )); @@ -964,7 +968,7 @@ namespace emp { ShiftLeft(num_bits - shift_size); OR_SELF(dup); } else { - // for big BitVectors, manual rotating is fater + // for big BitVectors, manual rotating is faster const field_t field_shift = (shift_size / FIELD_BITS) % NUM_FIELDS; const int bit_shift = shift_size % FIELD_BITS; @@ -1256,7 +1260,7 @@ namespace emp { // -------------------- Implementations of common accessors ------------------- - /// Retrive the bit value from the specified index. + /// Retrieve the bit value from the specified index. bool BitVector::Get(size_t index) const { emp_assert(index < num_bits, index, num_bits); const size_t field_id = FieldID(index); @@ -1547,7 +1551,7 @@ namespace emp { // ------------------------- Access Groups of bits ------------------------- - /// Retrive the byte at the specified byte index. + /// Retrieve the byte at the specified byte index. uint8_t BitVector::GetByte(size_t index) const { emp_assert(index < NumBytes(), index, NumBytes()); const size_t field_id = Byte2Field(index); @@ -2056,7 +2060,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // mask necessary to suprress shift count overflow warnings + // mask necessary to suppress shift count overflow warnings c &= FIELD_LOG2_MASK; n = (n<>( (-(c+FIELD_BITS-num_bits)) & FIELD_LOG2_MASK )); @@ -2139,7 +2143,7 @@ namespace emp { field_t & n = bits[0]; size_t c = shift_size; - // mask necessary to suprress shift count overflow warnings + // mask necessary to suppress shift count overflow warnings c &= FIELD_LOG2_MASK; n = (n>>c) | (n<<( (num_bits-c) & FIELD_LOG2_MASK )); diff --git a/include/emp/compiler/lexer_utils.hpp b/include/emp/compiler/lexer_utils.hpp index 24e80e4274..1c88401cc7 100644 --- a/include/emp/compiler/lexer_utils.hpp +++ b/include/emp/compiler/lexer_utils.hpp @@ -24,6 +24,10 @@ namespace emp { + /** \addtogroup + * @{ + */ + /// Converting DFA to DFA -- no change needed. static inline const DFA & to_DFA(const DFA & dfa) { return dfa; } @@ -53,7 +57,7 @@ namespace emp { std::set next_state = nfa.GetNext(sym, cur_state); if (next_state.size() == 0 && !keep_invalid) continue; // Discard invalid transitions. - // Remove NFA states with ONLY free transisions (they will all have been taken already) + // Remove NFA states with ONLY free transitions (they will all have been taken already) // @CAO do more elegantly! emp::vector remove_set; for (auto x : next_state) if (nfa.IsEmpty(x)) remove_set.push_back(x); @@ -92,7 +96,7 @@ namespace emp { } - /// Merge multiple automata into one NFA (base case, single converstion) + /// Merge multiple automata into one NFA (base case, single conversion) template static NFA MergeNFA(T1 && in) { return to_NFA(std::forward(in)); @@ -144,6 +148,9 @@ namespace emp { return ""; } + + // Close Doxygen group + /** @}*/ } #endif // #ifndef EMP_COMPILER_LEXER_UTILS_HPP_INCLUDE diff --git a/include/emp/config/config_web_interface.hpp b/include/emp/config/config_web_interface.hpp index 7fcdaf5459..7a462e85aa 100644 --- a/include/emp/config/config_web_interface.hpp +++ b/include/emp/config/config_web_interface.hpp @@ -32,11 +32,13 @@ namespace emp { std::set exclude; std::map group_divs; std::map input_map; + #ifndef DOXYGEN_SHOULD_SKIP_THIS std::function on_change_fun = [](const std::string & val){;}; std::function format_label_fun = [](std::string name){ emp::vector sliced = slice(name, '_'); return to_titlecase(join(sliced, " ")); }; + #endif // DOXYGEN_SHOULD_SKIP_THIS public: ConfigWebUI(Config & c, const std::string & div_name = "settings_div") : config(c), settings_div(div_name) {;} diff --git a/include/emp/control/Signal.hpp b/include/emp/control/Signal.hpp index 27a04188af..12d8f6ad90 100644 --- a/include/emp/control/Signal.hpp +++ b/include/emp/control/Signal.hpp @@ -76,12 +76,13 @@ namespace emp { operator bool() { return key_id > 0; } }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Forward declarations. class SignalBase; // ...for pointers to signals. class SignalManager; // ...for setting up as friend. // Mechanisms for Signals to report to a manager. - #ifndef DOXYGEN_SHOULD_SKIP_THIS + namespace internal { struct SignalManager_Base { virtual void NotifyConstruct(SignalBase * sig_ptr) = 0; @@ -360,6 +361,7 @@ namespace emp { }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS template inline void SignalBase::BaseTrigger(ARGS... args) { // Make sure this base class is really of the correct derrived type (but do so in an @@ -374,7 +376,7 @@ namespace emp { emp_assert(dynamic_cast< Signal * >(this)); return ((Signal *) this)->AddAction(in_fun); } - + #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_CONTROL_SIGNAL_HPP_INCLUDE diff --git a/include/emp/data/DataNode.hpp b/include/emp/data/DataNode.hpp index 7e150fbb42..918fd72773 100644 --- a/include/emp/data/DataNode.hpp +++ b/include/emp/data/DataNode.hpp @@ -158,8 +158,15 @@ namespace emp { /// == data::Current == /// This module lets you track the current (i.e. most recently added) value + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Current to the template arguments on your DataNode. Do not use the + /// CurrentModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class CurrentModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: VAL_TYPE cur_val; ///< Most recent value passed to this node. @@ -186,8 +193,15 @@ namespace emp { /// == data::Info == /// This module adds information such as a name, description, and keyword for this node. + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Info to the template arguments on your DataNode. Do not use the + /// InfoModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class InfoModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: std::string name; ///< Name of this data category. std::string desc; ///< Description of this type of data. @@ -229,8 +243,15 @@ namespace emp { /// == data::Log == /// This module lets you log all of the values that have been added since the last re-set + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Log to the template arguments on your DataNode. Do not use the + /// LogModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class LogModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: emp::vector val_set; ///< All values saved since last reset. @@ -294,8 +315,15 @@ namespace emp { /// This module keeps track of historical values in addition to those added since the last re-set. /// Every time Reset() is called, all values that have been added since the previous time Reset() /// are stored in a vector in the archive. + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Archive to the template arguments on your DataNode. Do not use the + /// ArchiveModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class ArchiveModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: emp::vector> archive; ///< Data archived from before most recent reset. @@ -341,8 +369,15 @@ namespace emp { /// == data::Range == /// This module allows this DataNode to store information (min, max, mean, count, and total) about /// the distribution of the values that have been added since the last call to Reset(). + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Range to the template arguments on your DataNode. Do not use the + /// RangeModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class RangeModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: double total; ///< Total of all data since last reset. double min; ///< Smallest value passed in since last reset. @@ -395,8 +430,15 @@ namespace emp { /// This module makes the DataNode store a history of distributional information measured by /// data::Range between calls to Reset(). Series of historical values are stored in vectors /// (except mean, which is calculated from total and count). + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Histogram to the template arguments on your DataNode. Do not use the + /// FullRangeModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class FullRangeModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: emp::vector total_vals; ///< Totals from previous resets. emp::vector num_vals; ///< Value counts from previous resets. @@ -467,9 +509,15 @@ namespace emp { /// /// Note 2: Kurtosis is calculated using Snedecor and Cochran (1967)'s formula. A perfect normal /// distribution has a kurtosis of 0. - + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Stats to the template arguments on your DataNode. Do not use the + /// StatsModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class StatsModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: // Running variance, skew, and kurtosis calculations based off of this class: // https://www.johndcook.com/blog/skewness_kurtosis/ @@ -546,8 +594,16 @@ namespace emp { /// == data::Histogram == /// Make the DataNode track a histogram of values observed since the last reset. + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Histogram to the template arguments on your DataNode. Do not use the + /// HistogramModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class HistogramModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS + protected: VAL_TYPE offset; ///< Min value in first bin; others are offset by this much. VAL_TYPE width; ///< How wide is the overall histogram? @@ -586,7 +642,7 @@ namespace emp { /// upper bound on the histogram int GetOverflow() const {return overflow;} - /// Return the count of numbers added to this histogram that were belowed the + /// Return the count of numbers added to this histogram that were below the /// allowed lower bound int GetUnderflow() const {return underflow;} @@ -631,7 +687,7 @@ namespace emp { parent_t::AddDatum(val); } - /// Reset the DataNode (empties the historgram) + /// Reset the DataNode (empties the histogram) void Reset() { for (size_t & x : counts) x = 0.0; parent_t::Reset(); @@ -650,8 +706,15 @@ namespace emp { /// new values or sets of values that it will then track. These functions are called every time /// the PullData method is called on this node, and the values they return are measured as /// specified by the other modules in this node. + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class DataNodeModule : public DataNodeModule { + #else + /// To use this class, add data::Pull to the template arguments on your DataNode. Do not use the + /// PullModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. + class PullModule { + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: #ifndef DOXYGEN_SHOULD_SKIP_THIS emp::FunctionSet pull_funs; ///< Functions to pull data. @@ -662,7 +725,6 @@ namespace emp { using base_t = DataNodeModule; using base_t::in_vals; - #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ void PullData_impl() { in_vals = pull_funs.Run(); @@ -671,7 +733,8 @@ namespace emp { in_vals.insert(in_vals.end(), x.begin(), x.end()); } } - + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + public: DataNodeModule() : pull_funs(), pull_set_funs() { ; } @@ -684,6 +747,8 @@ namespace emp { } }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS + template class DataNode_Interface; /// Outermost interface to all DataNode modules. @@ -693,7 +758,7 @@ namespace emp { using parent_t = DataNodeModule; }; - /// A template that will determing requisites, sort, make unique the data mods provided. + /// A template that will determine requisites, sort, make unique the data mods provided. /// The final, sorted ValPack of the requisites plus originals is in 'sorted'. template struct FormatDataMods { @@ -701,6 +766,7 @@ namespace emp { using full = typename ModPack::template append; ///< Requisites + originals using sorted = pack::RUsort; ///< Unique and in order }; + #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ template class DataNode : public DataNode_Interface< VAL_TYPE, typename FormatDataMods::sorted > { diff --git a/include/emp/datastructs/BloomFilter.hpp b/include/emp/datastructs/BloomFilter.hpp index 288fd035a7..b4c59407d7 100644 --- a/include/emp/datastructs/BloomFilter.hpp +++ b/include/emp/datastructs/BloomFilter.hpp @@ -16,7 +16,7 @@ #ifndef EMP_DATASTRUCTS_BLOOMFILTER_HPP_INCLUDE #define EMP_DATASTRUCTS_BLOOMFILTER_HPP_INCLUDE -/********************************************************************* +/* * Open Bloom Filter * * * * Author: Arash Partow - 2000 * @@ -54,6 +54,7 @@ static const unsigned char bit_mask[bits_per_char] = { 0x80 //10000000 }; +#ifndef DOXYGEN_SHOULD_SKIP_THIS /// This class keeps track of the parameters for a Bloom filter class BloomParameters { @@ -172,6 +173,8 @@ class BloomParameters }; +#endif // DOXYGEN_SHOULD_SKIP_THIS + /// This class implements a Bloom filter, which is a /// memory-efficient data structure for identifying /// values that have been seen before (with a tunable diff --git a/include/emp/datastructs/DynamicString.hpp b/include/emp/datastructs/DynamicString.hpp index 23afd8f187..29b9b56326 100644 --- a/include/emp/datastructs/DynamicString.hpp +++ b/include/emp/datastructs/DynamicString.hpp @@ -32,7 +32,7 @@ namespace emp { DynamicString() { ; } DynamicString(const DynamicString &) = default; - /// How many string components (funcations or continuous substrings) are in this DynamicString? + /// How many string components (functions or continuous substrings) are in this DynamicString? size_t GetSize() const { return fun_set.size(); } /// Index in to a specific component (not a specific character, since size is variable) @@ -84,6 +84,7 @@ namespace emp { } +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { /// Make sure that DynamicString works with with std::ostream. std::ostream & operator<<( std::ostream & os, const emp::DynamicString & strings ) @@ -94,5 +95,6 @@ namespace std { return os; } } +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_DATASTRUCTS_DYNAMICSTRING_HPP_INCLUDE diff --git a/include/emp/datastructs/Graph.hpp b/include/emp/datastructs/Graph.hpp index 4e460afaf3..d0ccd9b5ef 100644 --- a/include/emp/datastructs/Graph.hpp +++ b/include/emp/datastructs/Graph.hpp @@ -5,7 +5,7 @@ */ /** * @file - * @brief A simple, fast class for managing verticies (nodes) and edges. + * @brief A simple, fast class for managing vertices (nodes) and edges. * @note Status: BETA */ @@ -23,6 +23,7 @@ namespace emp { /// A graph class that maintains a set of vertices (nodes) and edges (connecting pairs of nodes) class Graph { public: + #ifndef DOXYGEN_SHOULD_SKIP_THIS /// Information about nodes within a graph. class Node { private: @@ -75,6 +76,7 @@ namespace emp { } }; + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: emp::vector nodes; ///< Set of vertices in this graph. @@ -189,7 +191,7 @@ namespace emp { return nodes[from].HasEdge(to) && nodes[to].HasEdge(from); } - /// Add a pair of edges between two vertieces (in both directions) + /// Add a pair of edges between two vertices (in both directions) void AddEdgePair(size_t from, size_t to) { emp_assert(from < nodes.size() && to < nodes.size()); nodes[from].AddEdge(to); diff --git a/include/emp/datastructs/SmallVector.hpp b/include/emp/datastructs/SmallVector.hpp index a9c27a9e9f..84a6929faf 100644 --- a/include/emp/datastructs/SmallVector.hpp +++ b/include/emp/datastructs/SmallVector.hpp @@ -37,6 +37,7 @@ namespace emp { // helpers for AlignedCharArrayUnion +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace detail { template class AlignerImpl { @@ -57,6 +58,7 @@ template union SizerImpl { template union SizerImpl { char arr[sizeof(T)]; }; } // end namespace detail +#endif // DOXYGEN_SHOULD_SKIP_THIS /// A suitably aligned and sized character array member which can hold elements /// of any type. @@ -126,11 +128,13 @@ class SmallVectorBase { } }; +#ifndef DOXYGEN_SHOULD_SKIP_THIS /// Figure out the offset of the first element. template struct SmallVectorAlignmentAndSize { emp::AlignedCharArrayUnion Base; emp::AlignedCharArrayUnion FirstEl; }; +#endif // DOXYGEN_SHOULD_SKIP_THIS /// This is the part of SmallVectorTemplateBase which does not depend on whether /// the type T is a POD. The extra dummy template argument is used by ArrayRef @@ -283,6 +287,7 @@ class SmallVectorTemplateBase : public SmallVectorTemplateCommon { } }; +#ifndef DOXYGEN_SHOULD_SKIP_THIS // Define this out-of-line to dissuade the C++ compiler from inlining it. template void SmallVectorTemplateBase::grow(size_t MinSize) { @@ -308,6 +313,7 @@ void SmallVectorTemplateBase::grow(size_t MinSize) { this->BeginX = NewElts; this->Capacity = NewCapacity; } +#endif // DOXYGEN_SHOULD_SKIP_THIS /// SmallVectorTemplateBase - This is where we put /// method implementations that are designed to work with POD-like T's. @@ -364,7 +370,7 @@ class SmallVectorTemplateBase : public SmallVectorTemplateCommon { void pop_back() { this->set_size(this->size() - 1); } }; -// #ifndef DOXYGEN_SHOULD_SKIP_THIS +#ifndef DOXYGEN_SHOULD_SKIP_THIS /// This class consists of common code factored out of the SmallVector class to /// reduce code duplication based on the SmallVector 'N' template parameter. @@ -720,8 +726,6 @@ class SmallVectorImpl : public SmallVectorTemplateBase { } }; -// #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ - template void SmallVectorImpl::swap(SmallVectorImpl &RHS) { if (this == &RHS) return; @@ -883,6 +887,8 @@ struct SmallVectorStorage { /// well-defined. template struct alignas(alignof(T)) SmallVectorStorage {}; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + /// This is a 'vector' (really, a variable-sized array), optimized /// for the case when the array is small. It contains some number of elements /// in-place, which allows it to avoid heap allocation when the actual number of @@ -961,6 +967,7 @@ inline size_t capacity_in_bytes(const SmallVector &X) { } // end namespace emp +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { /// Implement std::swap in terms of SmallVector swap. @@ -978,5 +985,6 @@ namespace std { } } // end namespace std +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_DATASTRUCTS_SMALLVECTOR_HPP_INCLUDE diff --git a/include/emp/functional/AnyFunction.hpp b/include/emp/functional/AnyFunction.hpp index 4e679bee1e..ac88022637 100644 --- a/include/emp/functional/AnyFunction.hpp +++ b/include/emp/functional/AnyFunction.hpp @@ -164,7 +164,7 @@ namespace emp { } }; - + #ifndef DOXYGEN_SHOULD_SKIP_THIS ///////////////////////////////////// // Member function implementaions. @@ -198,6 +198,7 @@ namespace emp { template bool BaseFunction::ConvertOK() { return dynamic_cast *>(this); } + #endif // DOXYGEN_SHOULD_SKIP_THIS } diff --git a/include/emp/functional/GenericFunction.hpp b/include/emp/functional/GenericFunction.hpp index 3725c03238..2433ab58ce 100644 --- a/include/emp/functional/GenericFunction.hpp +++ b/include/emp/functional/GenericFunction.hpp @@ -84,6 +84,7 @@ namespace emp { const fun_t & GetFunction() const { return fun; } }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS ///////////////////////////////////// // Member function implementaions. @@ -117,7 +118,7 @@ namespace emp { template bool GenericFunction::ConvertOK() { return dynamic_cast *>(this); } - + #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_FUNCTIONAL_GENERICFUNCTION_HPP_INCLUDE diff --git a/include/emp/geometry/Point2D.hpp b/include/emp/geometry/Point2D.hpp index e9a33f1888..bc30faf6b9 100644 --- a/include/emp/geometry/Point2D.hpp +++ b/include/emp/geometry/Point2D.hpp @@ -109,6 +109,7 @@ namespace emp { } +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { // Overload ostream to work with points. template std::ostream & operator<<(std::ostream & os, @@ -116,5 +117,6 @@ namespace std { return os << "(" << point.GetX() << "," << point.GetY() << ")"; } } +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_GEOMETRY_POINT2D_HPP_INCLUDE diff --git a/include/emp/hardware/AvidaGP.hpp b/include/emp/hardware/AvidaGP.hpp index f0c298d62f..f432d77b2a 100644 --- a/include/emp/hardware/AvidaGP.hpp +++ b/include/emp/hardware/AvidaGP.hpp @@ -484,6 +484,7 @@ namespace emp { of.close(); } + #ifndef DOXYGEN_SHOULD_SKIP_THIS template void AvidaCPU_Base::PrintSymbols(std::ostream & os) const { // Example output: t(12)u()b(A5C)m(8) @@ -500,6 +501,7 @@ namespace emp { } os << '\n'; } + #endif // DOXYGEN_SHOULD_SKIP_THIS template size_t AvidaCPU_Base::PredictNextInst() const { @@ -533,6 +535,7 @@ namespace emp { return inst_ptr; } + #ifndef DOXYGEN_SHOULD_SKIP_THIS template void AvidaCPU_Base::PrintState(std::ostream & os) const { size_t next_inst = PredictNextInst(); @@ -564,6 +567,7 @@ namespace emp { // emp::vector reg_stack; // emp::vector call_stack; } + #endif // DOXYGEN_SHOULD_SKIP_THIS class AvidaGP : public AvidaCPU_Base { public: @@ -583,6 +587,7 @@ namespace emp { }; } +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { /// operator<< to work with ostream (must be in std to work) @@ -591,5 +596,6 @@ namespace std { return out; } } +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_HARDWARE_AVIDAGP_HPP_INCLUDE diff --git a/include/emp/hardware/BitSorter.hpp b/include/emp/hardware/BitSorter.hpp index 100ea32dc7..a3f991bd1d 100644 --- a/include/emp/hardware/BitSorter.hpp +++ b/include/emp/hardware/BitSorter.hpp @@ -21,7 +21,7 @@ namespace emp { class BitSorter { public: - using bits_t = uint32_t; ///< Type used to represent pairs if posisions as bit masks. + using bits_t = uint32_t; ///< Type used to represent pairs if positions as bit masks. protected: emp::vector compare_set; ///< Comparators, in order (pairs of 1's in bitstring) @@ -184,6 +184,7 @@ namespace emp { } +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { /// operator<< to work with ostream (must be in std to work) @@ -192,5 +193,6 @@ namespace std { return out; } } +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_HARDWARE_BITSORTER_HPP_INCLUDE diff --git a/include/emp/hardware/EventDrivenGP.hpp b/include/emp/hardware/EventDrivenGP.hpp index 8a0f1bbbff..78ff940918 100644 --- a/include/emp/hardware/EventDrivenGP.hpp +++ b/include/emp/hardware/EventDrivenGP.hpp @@ -819,7 +819,9 @@ namespace emp { size_t exec_core_id; //< core ID of the currently executing core. bool is_executing; //< True when mid-execution of all cores. (On every CPU cycle: execute all cores). MATCHBIN_T matchBin; + #ifndef DOXYGEN_SHOULD_SKIP_THIS trait_printer_t fun_trait_print = [](std::ostream& os, TRAIT_T){os << "UNCONFIGURED TRAIT PRINT FUNCTION\n";}; + #endif // DOXYGEN_SHOULD_SKIP_THIS // TODO: disallow configuration of hardware while executing. (and any other functions that could sent things into a bad state) diff --git a/include/emp/math/Random.hpp b/include/emp/math/Random.hpp index 140d596dee..e138e6c7a4 100644 --- a/include/emp/math/Random.hpp +++ b/include/emp/math/Random.hpp @@ -25,7 +25,9 @@ #include "Range.hpp" namespace emp { + #ifndef DOXYGEN_SHOULD_SKIP_THIS using namespace emp; + #endif // DOXYGEN_SHOULD_SKIP_THIS /// Middle Square Weyl Sequence: A versatile and non-patterned pseudo-random-number /// generator. @@ -407,7 +409,7 @@ namespace emp { /// Generate a random variable drawn from a Poisson distribution. inline uint32_t GetRandPoisson(const double n, const double p) { emp_assert(p >= 0.0 && p <= 1.0, p); - // Optimizes for speed and calculability using symetry of the distribution + // Optimizes for speed and calculability using symmetry of the distribution if (p > .5) return (uint32_t) n - GetRandPoisson(n * (1 - p)); else return GetRandPoisson(n * p); } @@ -442,7 +444,7 @@ namespace emp { } inline uint32_t GetRandGeometric(double p){ - emp_assert(p >= 0 && p <= 1, "Pobabilities must be between 0 and 1"); + emp_assert(p >= 0 && p <= 1, "Probabilities must be between 0 and 1"); // TODO: When we have warnings, add one for passing a really small number to // this function. Alternatively, make this function not ludicrously slow with small numbers. // Looks like return floor(ln(GetDouble())/ln(1-p)) might be sufficient? diff --git a/include/emp/meta/TypeID.hpp b/include/emp/meta/TypeID.hpp index 0225b26d70..c7e4827141 100644 --- a/include/emp/meta/TypeID.hpp +++ b/include/emp/meta/TypeID.hpp @@ -464,7 +464,7 @@ namespace emp { } } - +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { /// Hash function to allow TypeID to be used with maps and sets (must be in std). template <> @@ -480,5 +480,6 @@ namespace std { return out; } } +#endif // DOXYGEN_SHOULD_SKIP_THIS #endif // #ifndef EMP_META_TYPEID_HPP_INCLUDE diff --git a/include/emp/meta/type_traits.hpp b/include/emp/meta/type_traits.hpp index 1ae214dcd2..66501cbe4e 100644 --- a/include/emp/meta/type_traits.hpp +++ b/include/emp/meta/type_traits.hpp @@ -81,10 +81,12 @@ namespace emp { template struct HasFromString().FromString(""))>> : std::true_type{}; + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Determine if a type has a FromDouble() member function. template struct HasFromDouble : std::false_type { }; template struct HasFromDouble().FromDouble(0.0))>> : std::true_type{}; + #endif // DOXYGEN_SHOULD_SKIP_THIS /// Determine if a type passed in is an std::function type (vs a lambda or a raw function) template struct is_std_function : std::false_type { }; diff --git a/include/emp/prefab/CommentBox.hpp b/include/emp/prefab/CommentBox.hpp index bdc1111e05..477ee899f6 100644 --- a/include/emp/prefab/CommentBox.hpp +++ b/include/emp/prefab/CommentBox.hpp @@ -10,7 +10,7 @@ * TODO: When prefab tools for adding mobile only and desktop only * content are created, remove AddMobileContent(), desktop_content * and mobile_content divs, and ConfigPanel as a friend class. - * AddConent() should stream into all_content div. + * AddContent() should stream into all_content div. */ #ifndef EMP_PREFAB_COMMENTBOX_HPP_INCLUDE @@ -27,7 +27,9 @@ namespace prefab { * Optionally, it can contain text and other web elements. */ class CommentBox: public web::Div { + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend ConfigPanel; + #endif DOXYGEN_SHOULD_SKIP_THIS private: // ID for the comment box Div std::string box_base = this->GetID(); diff --git a/include/emp/prefab/ConfigPanel.hpp b/include/emp/prefab/ConfigPanel.hpp index b9c8cfa556..31284bbf06 100644 --- a/include/emp/prefab/ConfigPanel.hpp +++ b/include/emp/prefab/ConfigPanel.hpp @@ -77,7 +77,7 @@ namespace prefab { * panel to your web app. Users can interact with the config panel * by updating values. * - * The ConfigPanel is constructed using subcomponents. Groups of + * The ConfigPanel is constructed using sub-components. Groups of * settings are placed in Cards, and individual settings are represented * by ValueControls. */ @@ -111,7 +111,7 @@ namespace prefab { } inline static std::set numeric_types = {"int", "double", "float", "uint32_t", "uint64_t", "size_t"}; - // Helper function to get prety names from config values + // Helper function to get pretty names from config values inline static std::function format_label = []( const std::string & name ) { @@ -314,7 +314,7 @@ namespace prefab { * Arranges config panel based configuration pass to constructor * @param config the config object used to create this panel * @param open should the card for the panel start open? - * @param id_prefix string appended to id for each setting (unusued) + * @param id_prefix string appended to id for each setting (unused) * @deprecated No longer necessary for config panel to function. * This function was a work around to fix a bug. */ diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index 8e2693acf9..6cb0e03037 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -5,7 +5,7 @@ */ /** * @file - * @brief UI subcomponent for ConfigPanel and ReadoutPanel. + * @brief UI sub-component for ConfigPanel and ReadoutPanel. */ #ifndef EMP_PREFAB_VALUEBOX_HPP_INCLUDE @@ -237,6 +237,7 @@ namespace emp::prefab { )>; // Determine the default range by finding the next highest order of magnitude (base 10) + #ifndef DOXYGEN_SHOULD_SKIP_THIS inline static range_setter_t applyDefaultRange = []( const std::string & value, const std::string & type, @@ -260,6 +261,7 @@ namespace emp::prefab { in.Step(step); } }; + #endif // DOXYGEN_SHOULD_SKIP_THIS public: /** diff --git a/include/emp/web/CanvasShape.hpp b/include/emp/web/CanvasShape.hpp index 36ac884233..1585acb1c3 100644 --- a/include/emp/web/CanvasShape.hpp +++ b/include/emp/web/CanvasShape.hpp @@ -7,7 +7,7 @@ * @file * @brief Define simple shapes to draw on a canvas. * - * Canvas shapes can be definied in detail, describing how they modify a canvas. + * Canvas shapes can be defined in detail, describing how they modify a canvas. * * Other, more specific actions defined here are: * CanvasCircle @@ -28,7 +28,7 @@ namespace emp { namespace web { - /// Define an arbitrary shape to draw on a canvas (base clase) + /// Define an arbitrary shape to draw on a canvas (base class) class CanvasShape : public CanvasAction { protected: Point p; ///< Anchor point for this shape. @@ -93,7 +93,7 @@ namespace web { /// Track a rectangle shape to be drawn on a canvas. class CanvasRect : public CanvasShape { - double w; ///< Rectangle widgth. + double w; ///< Rectangle width. double h; ///< Rectangle height. public: CanvasRect(Point _p, double _w, double _h, @@ -116,7 +116,7 @@ namespace web { /// Clear a rectangular area in a canvas. class CanvasClearRect : public CanvasShape { - double w; ///< Rectangle widgth. + double w; ///< Rectangle width. double h; ///< Rectangle height. public: CanvasClearRect(Point _p, double _w, double _h) @@ -133,7 +133,7 @@ namespace web { /// An arbitrary-sized polygon to be drawn on a canvas. class CanvasPolygon : public CanvasShape { private: - emp::vector points; ///< Series of points defining the perimiter of the Polygon. + emp::vector points; ///< Series of points defining the perimeter of the Polygon. public: CanvasPolygon(const std::string & fc="", const std::string & lc="") : CanvasShape(0, 0, fc, lc) { ; } diff --git a/include/emp/web/DocuExtras.hpp b/include/emp/web/DocuExtras.hpp index 09187c87cd..83aed5bb1b 100644 --- a/include/emp/web/DocuExtras.hpp +++ b/include/emp/web/DocuExtras.hpp @@ -28,9 +28,9 @@ namespace web { protected: class DocuExtrasInfo : public internal::WidgetInfo { - + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend DocuExtras; - + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: DocuExtrasInfo(const std::string & in_id) @@ -62,7 +62,7 @@ namespace web { }; // end of InputInfo definition - // Get a properly cast version of indo. + // Get a properly cast version of info. DocuExtrasInfo * Info() { return (DocuExtrasInfo *) info; } const DocuExtrasInfo * Info() const { return (DocuExtrasInfo *) info; } diff --git a/include/emp/web/Table.hpp b/include/emp/web/Table.hpp index 5571c7cd2c..e41e33dd00 100644 --- a/include/emp/web/Table.hpp +++ b/include/emp/web/Table.hpp @@ -12,7 +12,7 @@ * object. * * A Table is composed of a series of rows, each with the same number of columns. - * TableDataInfo may be muliple cells wide/tall, masking other cells. + * TableDataInfo may be multiple cells wide/tall, masking other cells. * * * @todo Tables should more directly manage internal slates rather than just adding divs and @@ -37,6 +37,7 @@ namespace emp { namespace web { + #ifndef DOXYGEN_SHOULD_SKIP_THIS class TableWidget; class Table; class TableCell; @@ -45,7 +46,6 @@ namespace web { class TableRowGroup; class TableColGroup; - #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace internal { struct TableRowInfo; @@ -60,7 +60,7 @@ namespace web { emp::vector children; ///< Widgets contained in this cell. - /// Debug function to determine if this datum is structually consistent. + /// Debug function to determine if this datum is structurally consistent. bool OK(std::stringstream & ss, bool verbose=false, const std::string & prefix="") { bool ok = true; if (verbose) ss << prefix << "Scanning: emp::TableDataInfo" << std::endl; @@ -88,7 +88,7 @@ namespace web { return *this; } - /// Debug function to determine if this row is structually consistent. + /// Debug function to determine if this row is structurally consistent. bool OK(std::stringstream & ss, bool verbose=false, const std::string & prefix="") { bool ok = true; if (verbose) { ss << prefix << "Scanning: emp::TableRowInfo" << std::endl; } @@ -107,8 +107,10 @@ namespace web { }; class TableInfo : public internal::WidgetInfo { + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend TableWidget; friend Table; friend TableCell; friend TableRow; friend TableCol; friend TableRowGroup; friend TableColGroup; + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: size_t row_count; /// How big is this table? size_t col_count; @@ -236,18 +238,18 @@ namespace web { // Tables need to facilitate recursive registrations - void RegisterChildren(internal::DivInfo * regestrar) override { + void RegisterChildren(internal::DivInfo * registrar) override { for (size_t r = 0; r < row_count; r++) { for (size_t c = 0; c < col_count; c++) { - for (Widget & child : rows[r].data[c].children) regestrar->Register(child); + for (Widget & child : rows[r].data[c].children) registrar->Register(child); } } } - void UnregisterChildren(internal::DivInfo * regestrar) override { + void UnregisterChildren(internal::DivInfo * registrar) override { for (size_t r = 0; r < row_count; r++) { for (size_t c = 0; c < col_count; c++) { - for (Widget & child : rows[r].data[c].children) regestrar->Unregister(child); + for (Widget & child : rows[r].data[c].children) registrar->Unregister(child); } } } @@ -515,7 +517,9 @@ namespace web { #endif // DOXYGEN_SHOULD_SKIP_THIS class TableWidget : public internal::WidgetFacet { + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend class internal::TableInfo; + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: size_t cur_row; // Which row/col is currently active? size_t cur_col; @@ -588,14 +592,14 @@ namespace web { void ClearCells() { Info()->ClearTableCells(); } void ClearCell(size_t r, size_t c) { Info()->ClearCell(r, c); } - TableCell GetCell(size_t r, size_t c) const; ///< Focus on a specifc cell in the table. - TableRow GetRow(size_t r) const; ///< Focus on a specifc row in the table. - TableCol GetCol(size_t c) const; ///< Focus on a specifc column in the table. - TableRowGroup GetRowGroup(size_t r) const; ///< Focus on a specifc group of rows in the table. - TableColGroup GetColGroup(size_t c) const; ///< Focus on a specifc group of columns in the table. + TableCell GetCell(size_t r, size_t c) const; ///< Focus on a specific cell in the table. + TableRow GetRow(size_t r) const; ///< Focus on a specific row in the table. + TableCol GetCol(size_t c) const; ///< Focus on a specific column in the table. + TableRowGroup GetRowGroup(size_t r) const; ///< Focus on a specific group of rows in the table. + TableColGroup GetColGroup(size_t c) const; ///< Focus on a specific group of columns in the table. Table GetTable() const; ///< Focus on a the entire table. - /// Get the TExt widget assoited with the currently active cell. + /// Get the Text widget associated with the currently active cell. web::Text GetTextWidget() { return Info()->GetTextWidget(); } /// Add text to a specified cell in the table. diff --git a/include/emp/web/Text.hpp b/include/emp/web/Text.hpp index 8fb01da961..fefdc3356c 100644 --- a/include/emp/web/Text.hpp +++ b/include/emp/web/Text.hpp @@ -26,11 +26,15 @@ namespace web { /// A Text widget handles putting text on a web page that can be controlled and modified. class Text : public internal::WidgetFacet { + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend class TextInfo; + #endif DOXYGEN_SHOULD_SKIP_THIS protected: class TextInfo : public internal::WidgetInfo { + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend Text; + #endif DOXYGEN_SHOULD_SKIP_THIS protected: DynamicString strings; ///< All string (and functions returning strings) in Text widget. bool append_ok; ///< Can this Text widget be extended? @@ -45,10 +49,15 @@ namespace web { bool AppendOK() const override { return append_ok; } void PreventAppend() override { append_ok = false; } + /// Add new text to this string. Widget Append(const std::string & in_text) override; + /// Add a function that produces text to this widget. Every time the widget is re-drawn, the + /// function will be re-run to get the latest version of the text. When a Live() function + /// wraps a variable it simply makes sure that this version of Append is called so that the + /// value of the variable is kept live. Widget Append(const std::function & in_fun) override; - // All derived widgets must suply a mechanism for providing associated HTML code. + // All derived widgets must supply a mechanism for providing associated HTML code. virtual void GetHTML(std::stringstream & HTML) override { HTML.str(""); // Clear the current text. HTML << "" // Initial span tag to keep id. @@ -61,7 +70,7 @@ namespace web { }; // End of TextInfo - // Get a properly cast version of indo. + // Get a properly cast version of info. TextInfo * Info() { return (TextInfo *) info; } const TextInfo * Info() const { return (TextInfo *) info; } @@ -84,7 +93,9 @@ namespace web { Text & Clear() { Info()->strings.Clear(); return *this; } }; - /// Add new text to this string. + #ifndef DOXYGEN_SHOULD_SKIP_THIS + + // Add new text to this string. Widget Text::TextInfo::Append(const std::string & text) { if (!append_ok) return ForwardAppend(text); // If text widget cannot append, forward to parent. strings.Append(text); // Record the new string being added. @@ -92,10 +103,10 @@ namespace web { return web::Text(this); } - /// Add a function that produces text to this widget. Every time the widget is re-drawn, the - /// function will be re-run to get the latest version of the text. When a Live() function - /// wraps a variable it simply makes sure that this version of Append is called so that the - /// value of the variable is kept live. + // Add a function that produces text to this widget. Every time the widget is re-drawn, the + // function will be re-run to get the latest version of the text. When a Live() function + // wraps a variable it simply makes sure that this version of Append is called so that the + // value of the variable is kept live. Widget Text::TextInfo::Append(const std::function & fun) { if (!append_ok) return ForwardAppend(fun); // If text widget cannot append, forward to parent. strings.Append(fun); // Record the new function being added. @@ -103,6 +114,7 @@ namespace web { return web::Text(this); } + #endif // DOXYGEN_SHOULD_SKIP_THIS } } diff --git a/include/emp/web/TextFeed.hpp b/include/emp/web/TextFeed.hpp index f48e013efb..e410f5b91a 100644 --- a/include/emp/web/TextFeed.hpp +++ b/include/emp/web/TextFeed.hpp @@ -25,9 +25,11 @@ namespace web { /// A TextFeed widget handles putting text on a web page that can be controlled and modified. class TextFeed : public internal::WidgetFacet { + #ifndef DOXYGEN_SHOULD_SKIP_THIS friend class TextFeedInfo; + #endif // DOXYGEN_SHOULD_SKIP_THIS protected: - // #ifndef DOXYGEN_SHOULD_SKIP_THIS + #ifndef DOXYGEN_SHOULD_SKIP_THIS class TextFeedInfo : public internal::WidgetInfo { friend TextFeed; protected: @@ -57,9 +59,10 @@ namespace web { bool AppendOK() const override { return append_ok; } void PreventAppend() override { append_ok = false; } + /// Add new text to this string. Widget Append(const std::string & in_text) override; - // All derived widgets must suply a mechanism for providing associated HTML code. + // All derived widgets must supply a mechanism for providing associated HTML code. virtual void GetHTML(std::stringstream & HTML) override { HTML.str(""); // Clear the current text. HTML << ""; // Initial span tag to keep id. @@ -73,7 +76,7 @@ namespace web { public: virtual std::string GetType() override { return "web::TextFeedInfo"; } }; // End of TextFeedInfo - // #endif // DOXYGEN_SHOULD_SKIP_THIS + #endif // DOXYGEN_SHOULD_SKIP_THIS // Get a properly cast version of info. TextFeedInfo * Info() { return (TextFeedInfo *) info; } @@ -105,7 +108,8 @@ namespace web { TextFeed & PopBack() { Info()->strings.pop_back(); return *this; } }; - /// Add new text to this string. + #ifndef DOXYGEN_SHOULD_SKIP_THIS + // Add new text to this string. Widget TextFeed::TextFeedInfo::Append(const std::string & text) { // If text widget cannot append, forward to parent. if (!append_ok) return ForwardAppend(text); @@ -140,7 +144,7 @@ namespace web { return web::TextFeed(this); } - + #endif // DOXYGEN_SHOULD_SKIP_THIS } // namespace web } // namespace emp From f0b6a6233d5aeed407927eb9b05e67e23b178a3a Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 15:50:34 -0400 Subject: [PATCH 17/80] Fix broken header docstrings --- demos/MAP-Elites-Arm/source/ArmWorld.hpp | 6 ++---- demos/SelectionAnalyze/SelectionData.hpp | 6 ++---- examples/config/config_setup.hpp | 6 ++---- examples/config/test-macro.hpp | 6 ++---- tests/config/assets/config_setup.hpp | 6 ++---- tests/web/assets/Config.hpp | 6 ++---- 6 files changed, 12 insertions(+), 24 deletions(-) diff --git a/demos/MAP-Elites-Arm/source/ArmWorld.hpp b/demos/MAP-Elites-Arm/source/ArmWorld.hpp index e8fd7f6110..f8bf963674 100644 --- a/demos/MAP-Elites-Arm/source/ArmWorld.hpp +++ b/demos/MAP-Elites-Arm/source/ArmWorld.hpp @@ -1,11 +1,9 @@ -/* +/** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2023 + * @date 2018 */ /** - */ - * @brief Defines the specialized world for the MAP-Elites app. */ diff --git a/demos/SelectionAnalyze/SelectionData.hpp b/demos/SelectionAnalyze/SelectionData.hpp index 16ad333a53..402d7e96bf 100644 --- a/demos/SelectionAnalyze/SelectionData.hpp +++ b/demos/SelectionAnalyze/SelectionData.hpp @@ -1,11 +1,9 @@ -/* +/** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2023 + * @date 2019 */ /** - */ - * @brief This class maintains all of the fitness data for a population of organisms. */ diff --git a/examples/config/config_setup.hpp b/examples/config/config_setup.hpp index 1eb30bb7a5..eb161534b7 100644 --- a/examples/config/config_setup.hpp +++ b/examples/config/config_setup.hpp @@ -1,11 +1,9 @@ -/* +/** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2023 + * @date 2016 */ /** - */ - * @brief This file provides an example of how to build a configuration class. * * To create a new config from scratch, the format is: diff --git a/examples/config/test-macro.hpp b/examples/config/test-macro.hpp index be3fe5b925..9e269b336d 100644 --- a/examples/config/test-macro.hpp +++ b/examples/config/test-macro.hpp @@ -1,11 +1,9 @@ -/* +/** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2023 + * @date 2021 */ /** - */ - * @brief This is an auto-generated file that defines a set of configuration options. * To create a new config from scratch, the format is: * EMP_BUILD_CONFIG( CLASS_NAME, OPTIONS... ) diff --git a/tests/config/assets/config_setup.hpp b/tests/config/assets/config_setup.hpp index 3875eb8ef3..8a6e96f29c 100644 --- a/tests/config/assets/config_setup.hpp +++ b/tests/config/assets/config_setup.hpp @@ -1,11 +1,9 @@ -/* +/** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2023 + * @date 2016 */ /** - */ - * @brief This file provides an example of how to build a configuration class. * * To create a new config from scratch, the format is: diff --git a/tests/web/assets/Config.hpp b/tests/web/assets/Config.hpp index dd413ec0ea..7ae4a58586 100644 --- a/tests/web/assets/Config.hpp +++ b/tests/web/assets/Config.hpp @@ -1,11 +1,9 @@ -/* +/** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2023 + * @date 2021 */ /** - */ - * */ From 163b3cbf7c4fff28d362f809378086f843cc8757 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 15:52:50 -0400 Subject: [PATCH 18/80] Fix trailing whitespace --- Doxyfile | 2 +- doc/dev/adding-documentation.md | 2 +- doc/library/base/base.md | 2 +- include/emp/compiler/lexer_utils.hpp | 2 +- include/emp/control/Signal.hpp | 2 +- include/emp/data/DataInterface.hpp | 2 +- include/emp/data/DataNode.hpp | 58 ++++++++++++++-------------- include/emp/tools/attrs.hpp | 2 +- 8 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Doxyfile b/Doxyfile index 7b9507c5f0..05856f414a 100644 --- a/Doxyfile +++ b/Doxyfile @@ -2293,7 +2293,7 @@ SEARCH_INCLUDES = YES # RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = +INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the diff --git a/doc/dev/adding-documentation.md b/doc/dev/adding-documentation.md index 28a00e186f..df07ba4ec7 100644 --- a/doc/dev/adding-documentation.md +++ b/doc/dev/adding-documentation.md @@ -98,7 +98,7 @@ like the following: ```{eval-rst} .. doxygenfile:: potato.h :project: Empirical - :no-link: + :no-link: ``` ``` diff --git a/doc/library/base/base.md b/doc/library/base/base.md index 840bf37cef..6ea101aa5f 100644 --- a/doc/library/base/base.md +++ b/doc/library/base/base.md @@ -87,7 +87,7 @@ emp_assert_warning(a==5, a); // This will get printed because no assertion // error will be triggered -std::cout << "Still running!" << std::endl; +std::cout << "Still running!" << std::endl; ``` diff --git a/include/emp/compiler/lexer_utils.hpp b/include/emp/compiler/lexer_utils.hpp index 1c88401cc7..059d003029 100644 --- a/include/emp/compiler/lexer_utils.hpp +++ b/include/emp/compiler/lexer_utils.hpp @@ -24,7 +24,7 @@ namespace emp { - /** \addtogroup + /** \addtogroup * @{ */ diff --git a/include/emp/control/Signal.hpp b/include/emp/control/Signal.hpp index 12d8f6ad90..8df500a7eb 100644 --- a/include/emp/control/Signal.hpp +++ b/include/emp/control/Signal.hpp @@ -82,7 +82,7 @@ namespace emp { class SignalManager; // ...for setting up as friend. // Mechanisms for Signals to report to a manager. - + namespace internal { struct SignalManager_Base { virtual void NotifyConstruct(SignalBase * sig_ptr) = 0; diff --git a/include/emp/data/DataInterface.hpp b/include/emp/data/DataInterface.hpp index a767c949ea..9daf7089b6 100644 --- a/include/emp/data/DataInterface.hpp +++ b/include/emp/data/DataInterface.hpp @@ -24,7 +24,7 @@ namespace emp { /// Returns the number values added to this node since the last reset. virtual size_t GetCount() const = 0; - + /// Returns the number of times this node has been reset. virtual size_t GetResetCount() const = 0; diff --git a/include/emp/data/DataNode.hpp b/include/emp/data/DataNode.hpp index 918fd72773..b3849d0617 100644 --- a/include/emp/data/DataNode.hpp +++ b/include/emp/data/DataNode.hpp @@ -162,9 +162,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Current to the template arguments on your DataNode. Do not use the - /// CurrentModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Current to the template arguments on your DataNode. Do not use the + /// CurrentModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class CurrentModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -197,9 +197,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Info to the template arguments on your DataNode. Do not use the - /// InfoModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Info to the template arguments on your DataNode. Do not use the + /// InfoModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class InfoModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -247,9 +247,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Log to the template arguments on your DataNode. Do not use the - /// LogModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Log to the template arguments on your DataNode. Do not use the + /// LogModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class LogModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -319,9 +319,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Archive to the template arguments on your DataNode. Do not use the - /// ArchiveModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Archive to the template arguments on your DataNode. Do not use the + /// ArchiveModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class ArchiveModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -373,9 +373,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Range to the template arguments on your DataNode. Do not use the - /// RangeModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Range to the template arguments on your DataNode. Do not use the + /// RangeModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class RangeModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -434,9 +434,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Histogram to the template arguments on your DataNode. Do not use the - /// FullRangeModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Histogram to the template arguments on your DataNode. Do not use the + /// FullRangeModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class FullRangeModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -513,9 +513,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Stats to the template arguments on your DataNode. Do not use the - /// StatsModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Stats to the template arguments on your DataNode. Do not use the + /// StatsModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class StatsModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -598,9 +598,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Histogram to the template arguments on your DataNode. Do not use the - /// HistogramModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Histogram to the template arguments on your DataNode. Do not use the + /// HistogramModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class HistogramModule { #endif // DOXYGEN_SHOULD_SKIP_THIS @@ -710,9 +710,9 @@ namespace emp { template class DataNodeModule : public DataNodeModule { #else - /// To use this class, add data::Pull to the template arguments on your DataNode. Do not use the - /// PullModule class directly - it is a simplification for documentation purposes and does not - /// actually exist. + /// To use this class, add data::Pull to the template arguments on your DataNode. Do not use the + /// PullModule class directly - it is a simplification for documentation purposes and does not + /// actually exist. class PullModule { #endif // DOXYGEN_SHOULD_SKIP_THIS protected: @@ -725,7 +725,7 @@ namespace emp { using base_t = DataNodeModule; using base_t::in_vals; - + void PullData_impl() { in_vals = pull_funs.Run(); const emp::vector< emp::vector > & pull_sets = pull_set_funs.Run(); @@ -734,7 +734,7 @@ namespace emp { } } #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ - + public: DataNodeModule() : pull_funs(), pull_set_funs() { ; } diff --git a/include/emp/tools/attrs.hpp b/include/emp/tools/attrs.hpp index 6d023d433f..207bbf318a 100644 --- a/include/emp/tools/attrs.hpp +++ b/include/emp/tools/attrs.hpp @@ -938,7 +938,7 @@ namespace emp { /// Creates a new attribute pack which has all the attributes of this /// pack and another pack. Values will be taken from other other pack /// preferentially. - + template constexpr auto Merge(U&&... packs) // This hint is required by some older compilers From 5220354f39cb85e957a82f6dd4157a3c1fd21281 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 15:57:45 -0400 Subject: [PATCH 19/80] Fix dates --- demos/MAP-Elites-Arm/source/ArmWorld.hpp | 2 +- demos/SelectionAnalyze/SelectionData.hpp | 2 +- examples/config/config_setup.hpp | 2 +- examples/config/test-macro.hpp | 2 +- tests/config/assets/config_setup.hpp | 2 +- tests/web/assets/Config.hpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/demos/MAP-Elites-Arm/source/ArmWorld.hpp b/demos/MAP-Elites-Arm/source/ArmWorld.hpp index f8bf963674..ef7a0437f9 100644 --- a/demos/MAP-Elites-Arm/source/ArmWorld.hpp +++ b/demos/MAP-Elites-Arm/source/ArmWorld.hpp @@ -1,7 +1,7 @@ /** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2018 + * date: 2018 */ /** * @brief Defines the specialized world for the MAP-Elites app. diff --git a/demos/SelectionAnalyze/SelectionData.hpp b/demos/SelectionAnalyze/SelectionData.hpp index 402d7e96bf..0e3ee29530 100644 --- a/demos/SelectionAnalyze/SelectionData.hpp +++ b/demos/SelectionAnalyze/SelectionData.hpp @@ -1,7 +1,7 @@ /** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2019 + * date: 2019 */ /** * @brief This class maintains all of the fitness data for a population of organisms. diff --git a/examples/config/config_setup.hpp b/examples/config/config_setup.hpp index eb161534b7..c0dc0e10b2 100644 --- a/examples/config/config_setup.hpp +++ b/examples/config/config_setup.hpp @@ -1,7 +1,7 @@ /** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * date: 2016 */ /** * @brief This file provides an example of how to build a configuration class. diff --git a/examples/config/test-macro.hpp b/examples/config/test-macro.hpp index 9e269b336d..d719f0749c 100644 --- a/examples/config/test-macro.hpp +++ b/examples/config/test-macro.hpp @@ -1,7 +1,7 @@ /** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2021 */ /** * @brief This is an auto-generated file that defines a set of configuration options. diff --git a/tests/config/assets/config_setup.hpp b/tests/config/assets/config_setup.hpp index 8a6e96f29c..3a8d075482 100644 --- a/tests/config/assets/config_setup.hpp +++ b/tests/config/assets/config_setup.hpp @@ -1,7 +1,7 @@ /** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2016 + * date: 2016 */ /** * @brief This file provides an example of how to build a configuration class. diff --git a/tests/web/assets/Config.hpp b/tests/web/assets/Config.hpp index 7ae4a58586..a3fd5255dd 100644 --- a/tests/web/assets/Config.hpp +++ b/tests/web/assets/Config.hpp @@ -1,7 +1,7 @@ /** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 + * date: 2021 */ /** * From d947efcb5e519fb43af08e1ac608c799d66c1372 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:26:56 -0400 Subject: [PATCH 20/80] Remove extra stars --- demos/EasyChair/ProcessReviews.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/demos/EasyChair/ProcessReviews.cpp b/demos/EasyChair/ProcessReviews.cpp index 6c6e1c1bad..5ef17a292a 100644 --- a/demos/EasyChair/ProcessReviews.cpp +++ b/demos/EasyChair/ProcessReviews.cpp @@ -1,10 +1,9 @@ -/* +/** * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** - * @file */ #include From 872c00d29418a07c1bb91faa7c1d315fc280dd51 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:36:05 -0400 Subject: [PATCH 21/80] Fix license notices --- ci/impl/generate_license_notices.sh | 3 ++- demos/EasyChair/ProcessReviews.cpp | 4 +++- demos/MAP-Elites-Arm/source/ArmWorld.hpp | 4 ++-- demos/NK/source/NKWorld.hpp | 4 ++-- demos/SelectionAnalyze/SelectionData.hpp | 4 ++-- demos/Slideshow.hpp | 4 ++-- demos/SpatialCoop2017/source/SimplePDWorld.hpp | 4 ++-- demos/utils/graphs/web/web_UI.hpp | 4 ++-- examples/ProjectTemplate/source/web/project_name-web.cpp | 2 +- examples/config/config_setup.hpp | 6 +++--- examples/config/test-macro.hpp | 6 +++--- examples/prefab/assets/SampleConfig.hpp | 4 ++-- tests/bits/BitMatrix.cpp | 2 +- tests/config/assets/config_setup.hpp | 6 +++--- tests/datastructs/SmallVector.cpp | 2 +- tests/functional/memo_function.cpp | 2 +- tests/web/assets/Config.hpp | 4 ++-- 17 files changed, 34 insertions(+), 31 deletions(-) diff --git a/ci/impl/generate_license_notices.sh b/ci/impl/generate_license_notices.sh index dab1f4cd80..16e4cdcf54 100755 --- a/ci/impl/generate_license_notices.sh +++ b/ci/impl/generate_license_notices.sh @@ -33,7 +33,8 @@ for filename in $(find . -name '*.cpp' -type f ! -path "./third-party/*") $(find # sed -i '6s/^$/ */' "${filename}" sed -i '6s|^.*$|/**|' "${filename}" sed -i '7s|^.*$| * @file|' "${filename}" - + sed -i "/^ \* @brief /b; 8s/^.*\$/ * @brief TODO./" "${filename}" + # close boilerplate file docstring # must accomodate possible additional content in docstring # so, search backwards from first blank line to place close */ diff --git a/demos/EasyChair/ProcessReviews.cpp b/demos/EasyChair/ProcessReviews.cpp index 5ef17a292a..47aad2e74b 100644 --- a/demos/EasyChair/ProcessReviews.cpp +++ b/demos/EasyChair/ProcessReviews.cpp @@ -1,9 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** + * @file + * @brief TODO. */ #include diff --git a/demos/MAP-Elites-Arm/source/ArmWorld.hpp b/demos/MAP-Elites-Arm/source/ArmWorld.hpp index ef7a0437f9..54696c340a 100644 --- a/demos/MAP-Elites-Arm/source/ArmWorld.hpp +++ b/demos/MAP-Elites-Arm/source/ArmWorld.hpp @@ -1,10 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2018 */ /** - * @brief Defines the specialized world for the MAP-Elites app. + * @file */ #ifndef DEMOS_MAP_ELITES_ARM_SOURCE_ARMWORLD_HPP_INCLUDE diff --git a/demos/NK/source/NKWorld.hpp b/demos/NK/source/NKWorld.hpp index bb99fee215..eb3802ced9 100644 --- a/demos/NK/source/NKWorld.hpp +++ b/demos/NK/source/NKWorld.hpp @@ -4,8 +4,8 @@ * date: 2023 */ /** - */ - + * @file + * @brief TODO. * */ diff --git a/demos/SelectionAnalyze/SelectionData.hpp b/demos/SelectionAnalyze/SelectionData.hpp index 0e3ee29530..120f0b213d 100644 --- a/demos/SelectionAnalyze/SelectionData.hpp +++ b/demos/SelectionAnalyze/SelectionData.hpp @@ -1,10 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2019 */ /** - * @brief This class maintains all of the fitness data for a population of organisms. + * @file */ #ifndef DEMOS_SELECTIONANALYZE_SELECTIONDATA_HPP_INCLUDE diff --git a/demos/Slideshow.hpp b/demos/Slideshow.hpp index 055c0257c6..0ab0f3a8b5 100644 --- a/demos/Slideshow.hpp +++ b/demos/Slideshow.hpp @@ -4,8 +4,8 @@ * date: 2023 */ /** - */ - + * @file + * @brief TODO. * */ diff --git a/demos/SpatialCoop2017/source/SimplePDWorld.hpp b/demos/SpatialCoop2017/source/SimplePDWorld.hpp index 1e024f566c..4f35de005d 100644 --- a/demos/SpatialCoop2017/source/SimplePDWorld.hpp +++ b/demos/SpatialCoop2017/source/SimplePDWorld.hpp @@ -4,8 +4,8 @@ * date: 2023 */ /** - */ - + * @file + * @brief TODO. */ #ifndef DEMOS_SPATIALCOOP2017_SOURCE_SIMPLEPDWORLD_HPP_INCLUDE diff --git a/demos/utils/graphs/web/web_UI.hpp b/demos/utils/graphs/web/web_UI.hpp index 757c671e94..305e90b240 100644 --- a/demos/utils/graphs/web/web_UI.hpp +++ b/demos/utils/graphs/web/web_UI.hpp @@ -4,8 +4,8 @@ * date: 2023 */ /** - */ - + * @file + * @brief TODO. * */ diff --git a/examples/ProjectTemplate/source/web/project_name-web.cpp b/examples/ProjectTemplate/source/web/project_name-web.cpp index 3f2fcf4704..ecacd71221 100644 --- a/examples/ProjectTemplate/source/web/project_name-web.cpp +++ b/examples/ProjectTemplate/source/web/project_name-web.cpp @@ -5,7 +5,7 @@ */ /** * @file - * + * @brief TODO. * WARNING: the Cookiecutter Empirical Project, which you can find at * https://github.com/devosoft/cookiecutter-empirical-project, should be * preferred over ProjectTemplate diff --git a/examples/config/config_setup.hpp b/examples/config/config_setup.hpp index c0dc0e10b2..16a1e5ffa9 100644 --- a/examples/config/config_setup.hpp +++ b/examples/config/config_setup.hpp @@ -1,11 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** - * @brief This file provides an example of how to build a configuration class. - * + * @file + * @brief TODO. * To create a new config from scratch, the format is: * EMP_BUILD_CONFIG( CLASS_NAME, OPTIONS... ) * diff --git a/examples/config/test-macro.hpp b/examples/config/test-macro.hpp index d719f0749c..554c3b2251 100644 --- a/examples/config/test-macro.hpp +++ b/examples/config/test-macro.hpp @@ -1,11 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** - * @brief This is an auto-generated file that defines a set of configuration options. - * To create a new config from scratch, the format is: + * @file + * @brief TODO. * EMP_BUILD_CONFIG( CLASS_NAME, OPTIONS... ) * * To extend an existing config, simply use: diff --git a/examples/prefab/assets/SampleConfig.hpp b/examples/prefab/assets/SampleConfig.hpp index 1e804e7989..7789620c81 100644 --- a/examples/prefab/assets/SampleConfig.hpp +++ b/examples/prefab/assets/SampleConfig.hpp @@ -4,8 +4,8 @@ * date: 2023 */ /** - */ - + * @file + * @brief TODO. * @note Adapted from Emily's memic_model project * https://github.com/emilydolson/memic_model */ diff --git a/tests/bits/BitMatrix.cpp b/tests/bits/BitMatrix.cpp index 4094b78b35..4da1506719 100644 --- a/tests/bits/BitMatrix.cpp +++ b/tests/bits/BitMatrix.cpp @@ -5,7 +5,7 @@ */ /** * @file - * + * @brief TODO. */ #include diff --git a/tests/config/assets/config_setup.hpp b/tests/config/assets/config_setup.hpp index 3a8d075482..4c4380972d 100644 --- a/tests/config/assets/config_setup.hpp +++ b/tests/config/assets/config_setup.hpp @@ -1,11 +1,11 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2016 */ /** - * @brief This file provides an example of how to build a configuration class. - * + * @file + * @brief TODO. * To create a new config from scratch, the format is: * EMP_BUILD_CONFIG( CLASS_NAME, OPTIONS... ) * diff --git a/tests/datastructs/SmallVector.cpp b/tests/datastructs/SmallVector.cpp index 53265a2887..6b434747c0 100644 --- a/tests/datastructs/SmallVector.cpp +++ b/tests/datastructs/SmallVector.cpp @@ -5,7 +5,7 @@ */ /** * @file - * + * @brief TODO. * Adapted in part from the LLVM Project, under the Apache License v2.0 with * LLVM Exceptions. See https://llvm.org/LICENSE.txt for license information. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception diff --git a/tests/functional/memo_function.cpp b/tests/functional/memo_function.cpp index d6659f4798..e3e0f52e3e 100644 --- a/tests/functional/memo_function.cpp +++ b/tests/functional/memo_function.cpp @@ -5,7 +5,7 @@ */ /** * @file - * @note doing any sort of copying of memo_functions seems to give my terminal a stack overflow error (using mingw on windows 10) + * @brief TODO. * @MAM not sure who left this comment about stack overflow on mingw... */ diff --git a/tests/web/assets/Config.hpp b/tests/web/assets/Config.hpp index a3fd5255dd..b53752d986 100644 --- a/tests/web/assets/Config.hpp +++ b/tests/web/assets/Config.hpp @@ -1,10 +1,10 @@ -/** +/* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2021 */ /** - * + * @file */ #ifndef TESTS_WEB_ASSETS_CONFIG_HPP_INCLUDE From f27d0777b11dc557ab89ecc35173df119a4fde7c Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:40:39 -0400 Subject: [PATCH 22/80] Fix alphabetize --- include/emp/base/_emscripten_assert_trigger.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/emp/base/_emscripten_assert_trigger.hpp b/include/emp/base/_emscripten_assert_trigger.hpp index cac774cd39..7df559188d 100644 --- a/include/emp/base/_emscripten_assert_trigger.hpp +++ b/include/emp/base/_emscripten_assert_trigger.hpp @@ -67,4 +67,4 @@ namespace emp { } // namespace emp #endif // #ifndef EMP_BASE__EMSCRIPTEN_ASSERT_TRIGGER_HPP_INCLUDE -#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ \ No newline at end of file +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ From 259b536c48cb7220b7837670c3bed4851e51ba06 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:43:01 -0400 Subject: [PATCH 23/80] Alphabetize imports --- doc/conf.py | 2 +- doc/make_md.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index 84ae412a22..30f5ca6c32 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -18,10 +18,10 @@ # relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. # +import glob import os import sphinx_rtd_theme import subprocess -import glob import sys import textwrap diff --git a/doc/make_md.py b/doc/make_md.py index 558684a627..88ad253d70 100644 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -1,5 +1,5 @@ -import os import glob +import os def format_directive(filename): From f3971a3b7bc813d907510e3e776216fddde1b1a3 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:47:03 -0400 Subject: [PATCH 24/80] Fix endifs --- include/emp/base/_emscripten_assert_trigger.hpp | 3 ++- include/emp/bits/BitArray.hpp | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/emp/base/_emscripten_assert_trigger.hpp b/include/emp/base/_emscripten_assert_trigger.hpp index 7df559188d..757e82347c 100644 --- a/include/emp/base/_emscripten_assert_trigger.hpp +++ b/include/emp/base/_emscripten_assert_trigger.hpp @@ -66,5 +66,6 @@ namespace emp { } // namespace emp -#endif // #ifndef EMP_BASE__EMSCRIPTEN_ASSERT_TRIGGER_HPP_INCLUDE #endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + +#endif // #ifndef EMP_BASE__EMSCRIPTEN_ASSERT_TRIGGER_HPP_INCLUDE diff --git a/include/emp/bits/BitArray.hpp b/include/emp/bits/BitArray.hpp index d1759b4303..52a833e7a0 100644 --- a/include/emp/bits/BitArray.hpp +++ b/include/emp/bits/BitArray.hpp @@ -2096,5 +2096,7 @@ namespace std } }; } + #endif // DOXYGEN_SHOULD_SKIP_THIS + #endif // #ifndef EMP_BITS_BITARRAY_HPP_INCLUDE From ac414c03edf23a39e47841f2f1ac23a6a6fd172f Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:49:05 -0400 Subject: [PATCH 25/80] Fix trailing newlines --- doc/filter_namespace | 2 +- doc/library/compiler/compiler.md | 2 +- doc/library/datastructs/datastructs.md | 2 +- doc/library/debug/debug.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/filter_namespace b/doc/filter_namespace index d4c528fd7a..2d06d40ed0 100755 --- a/doc/filter_namespace +++ b/doc/filter_namespace @@ -25,4 +25,4 @@ with open(sys.argv[1]) as infile: line = line.replace("emp::", "") line = line.replace("web::", "") line = line.replace("prefab::", "") - print(line) \ No newline at end of file + print(line) diff --git a/doc/library/compiler/compiler.md b/doc/library/compiler/compiler.md index 935ae6f615..cecdbcf611 100644 --- a/doc/library/compiler/compiler.md +++ b/doc/library/compiler/compiler.md @@ -9,4 +9,4 @@ :glob: api/* -``` \ No newline at end of file +``` diff --git a/doc/library/datastructs/datastructs.md b/doc/library/datastructs/datastructs.md index ccdf664412..910a7f9743 100644 --- a/doc/library/datastructs/datastructs.md +++ b/doc/library/datastructs/datastructs.md @@ -9,4 +9,4 @@ :glob: api/* -``` \ No newline at end of file +``` diff --git a/doc/library/debug/debug.md b/doc/library/debug/debug.md index 86f1310c6a..ef445593e0 100644 --- a/doc/library/debug/debug.md +++ b/doc/library/debug/debug.md @@ -9,4 +9,4 @@ :glob: api/* -``` \ No newline at end of file +``` From 5f1d352bcb51463ec7342fe6a252c8ee64d6950c Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:50:37 -0400 Subject: [PATCH 26/80] Fix trailing whitespace --- ci/impl/generate_license_notices.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/impl/generate_license_notices.sh b/ci/impl/generate_license_notices.sh index 16e4cdcf54..2264eca653 100755 --- a/ci/impl/generate_license_notices.sh +++ b/ci/impl/generate_license_notices.sh @@ -34,7 +34,7 @@ for filename in $(find . -name '*.cpp' -type f ! -path "./third-party/*") $(find sed -i '6s|^.*$|/**|' "${filename}" sed -i '7s|^.*$| * @file|' "${filename}" sed -i "/^ \* @brief /b; 8s/^.*\$/ * @brief TODO./" "${filename}" - + # close boilerplate file docstring # must accomodate possible additional content in docstring # so, search backwards from first blank line to place close */ From 704ca81209b7e2c465495101644d15269fd539bd Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 17:56:29 -0400 Subject: [PATCH 27/80] Remove api root --- doc/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/index.md b/doc/index.md index 1a5d241925..4cbe6c3852 100644 --- a/doc/index.md +++ b/doc/index.md @@ -28,7 +28,6 @@ Contents: BuiltWithEmpiricalGallery/index QuickStartGuides/index library/index -library/api_root ``` From f4ee26ac8648cd75df06addc79fb6dd0c6c38415 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 18:29:07 -0400 Subject: [PATCH 28/80] Hide template metaprogramming --- doc/make_md.py | 8 ++++---- include/emp/meta/type_traits.hpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/make_md.py b/doc/make_md.py index 88ad253d70..76024879e0 100644 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -37,12 +37,12 @@ def format_heading(level, text): os.makedirs(new_dir) toc_file_name = f"library/{just_dir}/{last_dir}.md" if not os.path.exists(toc_file_name): - toc_text = format_heading(1, last_dir) + toc_text = format_heading(1, last_dir.capitalize()) + toc_text with open(toc_file_name, "w") as target: target.write(toc_text) - # elif toc_text not in open(toc_file_name).read(): - # with open(toc_file_name, "a") as target: - # target.write("\n" + toc_text) + elif "" not in open(toc_file_name).read(): + with open(toc_file_name, "a") as target: + target.write("\n" + toc_text) text = format_heading(1, f"{just_file}") text += format_directive("emp/" + h) diff --git a/include/emp/meta/type_traits.hpp b/include/emp/meta/type_traits.hpp index 66501cbe4e..44da6d39b4 100644 --- a/include/emp/meta/type_traits.hpp +++ b/include/emp/meta/type_traits.hpp @@ -76,12 +76,12 @@ namespace emp { template struct HasToDouble().ToDouble())>> : std::true_type{}; + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Determine if a type has a FromString() member function. template struct HasFromString : std::false_type { }; template struct HasFromString().FromString(""))>> : std::true_type{}; - #ifndef DOXYGEN_SHOULD_SKIP_THIS // Determine if a type has a FromDouble() member function. template struct HasFromDouble : std::false_type { }; template From 262dc8a51966839d0bc47e4ab4e9d7e2faa98d48 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 18:32:49 -0400 Subject: [PATCH 29/80] Avoid duplicate tocs --- doc/make_md.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/make_md.py b/doc/make_md.py index 76024879e0..0671084089 100644 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -32,7 +32,7 @@ def format_heading(level, text): continue new_dir = "library/" + just_dir + "/api" print(new_dir) - toc_text = format_heading(2, "API") + "```{eval-rst}\n.. toctree::\n :glob:\n\n api/*\n```\n" + toc_text = "\n\n" + format_heading(2, "API") + "```{eval-rst}\n.. toctree::\n :glob:\n\n api/*\n```\n" if not os.path.exists(new_dir): os.makedirs(new_dir) toc_file_name = f"library/{just_dir}/{last_dir}.md" From c60f3b4d35f488365a19ff46919372cf051aacde Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 19:07:46 -0400 Subject: [PATCH 30/80] Try removing docker docs build --- .github/workflows/CI.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e2eee81a06..8e197412eb 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -104,15 +104,15 @@ jobs: - uses: actions/checkout@v2 with: submodules: 'recursive' - - uses: mmore500/actions-setup-docker@94429ebc8d9edb4e8c8afb2667bce1e89435f74f - - run: docker build -t devosoft/empirical . - - run: docker ps -a - - run: sudo docker run --name empirical devosoft/empirical /bin/bash -c "set -o pipefail && cd /opt/Empirical/doc && make html coverage | ./headtail.sh && python3 /opt/Empirical/doc/parse_documentation_coverage.py /opt/Empirical/doc/_build/doc-coverage.json >> /opt/Empirical/doc-coverage.json" - - run: sudo docker cp empirical:/opt/Empirical/doc-coverage.json . + - uses: mattnotmitt/doxygen-action@v1.9.5 + - run: doxygen + - run: cd doc && pip install -r requirements.txt + - run: cd doc && make html coverage + - run: cd doc && ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json" - uses: sylvanld/action-storage@v1 - if: github.ref == 'refs/heads/master' + # if: github.ref == 'refs/heads/master' with: - src: doc-coverage.json + src: doc/doc-coverage.json dst: stats/doc-coverage.json deploy-dockerhub: name: Deploy to DockerHub From 3a85d92afe8c11d0c257ddb6db44f9b8bc4b6851 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 19:09:21 -0400 Subject: [PATCH 31/80] action runs doxygen --- .github/workflows/CI.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8e197412eb..72a8b34890 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -105,7 +105,6 @@ jobs: with: submodules: 'recursive' - uses: mattnotmitt/doxygen-action@v1.9.5 - - run: doxygen - run: cd doc && pip install -r requirements.txt - run: cd doc && make html coverage - run: cd doc && ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json" From 37d4e24e4241e3af0919226dac7a12eef12f3065 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 19:17:13 -0400 Subject: [PATCH 32/80] try updating checkout --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 72a8b34890..1cba510748 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -101,13 +101,13 @@ jobs: name: Test Documentation Build runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: 'recursive' - uses: mattnotmitt/doxygen-action@v1.9.5 - run: cd doc && pip install -r requirements.txt - run: cd doc && make html coverage - - run: cd doc && ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json" + - run: cd doc && ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json - uses: sylvanld/action-storage@v1 # if: github.ref == 'refs/heads/master' with: From a9bd187f9f409f86828c9651239059ff6cc84580 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 23:41:52 -0400 Subject: [PATCH 33/80] Make shebang more general --- doc/filter_namespace | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/filter_namespace b/doc/filter_namespace index 2d06d40ed0..c807bb6e33 100755 --- a/doc/filter_namespace +++ b/doc/filter_namespace @@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python import sys From cfb68ee3ca1920a07d98a63b02e7476d34f4c5eb Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Fri, 30 Jun 2023 23:46:48 -0400 Subject: [PATCH 34/80] debug docs build --- .github/workflows/CI.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1cba510748..db0d8f8eb2 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -106,6 +106,9 @@ jobs: submodules: 'recursive' - uses: mattnotmitt/doxygen-action@v1.9.5 - run: cd doc && pip install -r requirements.txt + - run: cd doc && python make_md.py + - run: pwd + - run: ls - run: cd doc && make html coverage - run: cd doc && ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json - uses: sylvanld/action-storage@v1 From d003260633a62a35d4c948ebdab06b6abbdbba3a Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 1 Jul 2023 00:05:47 -0400 Subject: [PATCH 35/80] Try removing autodoc --- doc/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index 30f5ca6c32..56f4a9bc5e 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -34,7 +34,6 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ - 'sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.mathjax', 'sphinx.ext.todo', From b8a9efd09e3f197cae4464e92111d9319c82ddd2 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 1 Jul 2023 00:19:00 -0400 Subject: [PATCH 36/80] Use different doxygen action --- .github/workflows/CI.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index db0d8f8eb2..bebd7ffece 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -104,13 +104,12 @@ jobs: - uses: actions/checkout@v3 with: submodules: 'recursive' - - uses: mattnotmitt/doxygen-action@v1.9.5 + - uses: ssciwr/doxygen-install@v1 + - run: doxygen - run: cd doc && pip install -r requirements.txt - run: cd doc && python make_md.py - - run: pwd - - run: ls - run: cd doc && make html coverage - - run: cd doc && ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json + - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json - uses: sylvanld/action-storage@v1 # if: github.ref == 'refs/heads/master' with: From fed295312265dc4ca7356f64c8a785af3c13985b Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 1 Jul 2023 00:30:00 -0400 Subject: [PATCH 37/80] Fix coverage filepath --- .github/workflows/CI.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index bebd7ffece..1c24379172 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -108,12 +108,11 @@ jobs: - run: doxygen - run: cd doc && pip install -r requirements.txt - run: cd doc && python make_md.py - - run: cd doc && make html coverage - - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py doc-coverage.json >> doc-coverage.json + - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> _build/doc-coverage.json - uses: sylvanld/action-storage@v1 # if: github.ref == 'refs/heads/master' with: - src: doc/doc-coverage.json + src: doc/_build/doc-coverage.json dst: stats/doc-coverage.json deploy-dockerhub: name: Deploy to DockerHub From bcc75cabba3ae65a6697b4a0b963618544cf8669 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 1 Jul 2023 00:39:43 -0400 Subject: [PATCH 38/80] Fix coverage file contents --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1c24379172..111bb50dd4 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -108,11 +108,11 @@ jobs: - run: doxygen - run: cd doc && pip install -r requirements.txt - run: cd doc && python make_md.py - - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> _build/doc-coverage.json + - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json - uses: sylvanld/action-storage@v1 # if: github.ref == 'refs/heads/master' with: - src: doc/_build/doc-coverage.json + src: doc/doc-coverage.json dst: stats/doc-coverage.json deploy-dockerhub: name: Deploy to DockerHub From 080e7dc0792ed79278944dd1b41958ebf1e7d18d Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sat, 1 Jul 2023 15:16:58 -0400 Subject: [PATCH 39/80] Merge in systematics changes from MABE_devel --- include/emp/Evolve/Systematics.hpp | 1721 +++++++++++--------- include/emp/Evolve/SystematicsAnalysis.hpp | 25 +- include/emp/Evolve/World.hpp | 20 +- tests/Evolve/Systematics.cpp | 937 +++++++---- 4 files changed, 1583 insertions(+), 1120 deletions(-) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 471428f2cd..f13cc3c649 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1,10 +1,9 @@ -/* - * This file is part of Empirical, https://github.com/devosoft/Empirical - * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2017-2018 -*/ /** - * @file + * @note This file is part of Empirical, https://github.com/devosoft/Empirical + * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * @date 2017-2018 + * + * @file Systematics.hpp * @brief Track genotypes, species, clades, or lineages of organisms in a world. * * @@ -13,8 +12,8 @@ * @todo We should provide an option to back up systematics data to a file so that it doesn't all * need to be kept in memory, especially if we're only doing post-analysis. * @todo This inheritance system makes adding new systematics-related data tracking kind of a pain. - * Over time, this will probably become a maintainability problem. We can probably make the - * whole inheritance thing go away through judicious use of signals. + * Over time, this will probably become a maintainability problem. We could make the inheritance + * go away and just use signals, but then the World could not maintain systematics managers. * @todo This does not currently handle situations where organisms change locations during their * lifetimes gracefully. */ @@ -22,11 +21,14 @@ #ifndef EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE #define EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE - +#include +#include #include #include #include #include +#include +#include #include #include "../base/Ptr.hpp" @@ -36,6 +38,7 @@ #include "../data/DataNode.hpp" #include "../datastructs/map_utils.hpp" #include "../datastructs/set_utils.hpp" +#include "../io/File.hpp" #include "../math/info_theory.hpp" #include "../math/stats.hpp" #include "../tools/string_utils.hpp" @@ -68,34 +71,41 @@ namespace emp { fitness.Add(fit); } - const double GetFitness() const { + double GetFitness() const { return fitness.GetMean(); } }; + /// Track information related to the mutational landscape + /// Maps a string representing a type of mutation to a count representing + /// the number of that type of mutation that occurred to bring about this taxon. template - struct mut_landscape_info { /// Track information related to the mutational landscape - /// Maps a string representing a type of mutation to a count representing - /// the number of that type of mutation that occurred to bring about this taxon. + struct mut_landscape_info { using phen_t = PHEN_TYPE; using has_phen_t = std::true_type; using has_mutations_t = std::true_type; using has_fitness_t = std::true_type; // using has_phenotype_t = true; - std::unordered_map mut_counts; + std::unordered_map mut_counts = {}; /// The number of mutations of each type that occurred to make this taxon DataNode fitness; /// This taxon's fitness (for assessing deleterious mutational steps) PHEN_TYPE phenotype; /// This taxon's phenotype (for assessing phenotypic change) + /// @returns this taxon's phenotype const PHEN_TYPE & GetPhenotype() const { return phenotype; } - const double GetFitness() const { + /// @returns this taxon's fitness + double GetFitness() const { return fitness.GetMean(); } - void RecordMutation(std::unordered_map muts) { + /// Adds mutations to the list of mutations that occurred to make this taxon + /// @param muts can contain as many strings (types of mutation) as desired, each accompanied + /// by a number indicating how many of that mutation occurred + /// Example: {"point_mutation":2, "insertion":1} + void RecordMutation(std::unordered_map & muts) { for (auto mut : muts) { if (Has(mut_counts, mut.first)) { mut_counts[mut.first] += mut.second; @@ -105,10 +115,14 @@ namespace emp { } } + /// Record the fitness of this taxon + /// @param fit the fitness void RecordFitness(double fit) { fitness.Add(fit); } + /// Record the phenotype of this taxon + /// @param phen the phenotype void RecordPhenotype(PHEN_TYPE phen) { phenotype = phen; } @@ -182,17 +196,25 @@ namespace emp { /// Get the number of taxanomic steps since the ancestral organism was injected into the World. size_t GetDepth() const { return depth; } + /// Get data struct associated with this taxon data_t & GetData() {return data;} + /// Get data struct associated with this taxon const data_t & GetData() const {return data;} + /// Get pointers to this taxon's offspring std::set > GetOffspring() {return offspring;} + /// Set this taxon's data struct to the given value void SetData(data_t d) {data = d;} + /// @returns this taxon's origination time double GetOriginationTime() const {return origination_time;} + /// Set this taxon's origination time void SetOriginationTime(double time) {origination_time = time;} + /// @returns this taxon's destruction time double GetDestructionTime() const {return destruction_time;} + /// Sets this taxon's destruction time void SetDestructionTime(double time) {destruction_time = time;} /// Add a new organism to this Taxon. @@ -228,6 +250,7 @@ namespace emp { return num_orgs; } + /// Remove specified taxon from this taxon's offspring list void RemoveFromOffspring(Ptr offspring_tax) { offspring.erase(offspring_tax); } @@ -254,8 +277,8 @@ namespace emp { /// A base class for Systematics, maintaining information common to all systematics managers - /// and providing virtual functions. - + /// and providing virtual functions. You probably don't want to instantiate this. It just + /// exists so that you can make containers of Systematics managers of different types. template class SystematicsBase { protected: @@ -269,7 +292,7 @@ namespace emp { // Stats about active taxa... (totals are across orgs, not taxa) size_t org_count; ///< How many organisms are currently active? size_t total_depth; ///< Sum of taxa depths for calculating average. - size_t num_roots; ///< How many distint injected ancestors are currently in population? + size_t num_roots; ///< How many distinct injected ancestors are currently in population? int max_depth; ///< Depth of deepest taxon. -1 means needs to be recalculated size_t next_id; ///< What ID value should the next new taxon have? @@ -318,6 +341,9 @@ namespace emp { /// What is the average phylogenetic depth of organisms in the population? double GetAveDepth() const { return ((double) total_depth) / (double) org_count; } + /// @returns current update/time step + size_t GetUpdate() const {return curr_update;} + /// Are we tracking organisms evolving in synchronous generations? void SetTrackSynchronous(bool new_val) {track_synchronous = new_val; } @@ -336,14 +362,19 @@ namespace emp { /// Are we storing the location of taxa? void SetStorePosition(bool new_val) { store_position = new_val; } - // Returns a reference so that capturing it in a lambda to call on update - // is less confusing. It's possible we should change it to be consistent - // with GetFitnessDataNode, though. + /// Sets the current update/time step + void SetUpdate(size_t ud) {curr_update = ud;} + + /// Add a data node to this systematics manager + /// @param name the name of the data node (so it can be found later) data_ptr_t AddDataNode(const std::string & name) { emp_assert(!data_nodes.HasNode(name)); return &(data_nodes.New(name)); } + /// Add a data node to this systematics manager + /// @param name the name of the data node (so it can be found later) + /// @param pull_set_fun a function to run when the data node is requested to pull data (returns vector of values) data_ptr_t AddDataNode(std::function()> pull_set_fun, const std::string & name) { emp_assert(!data_nodes.HasNode(name)); auto node = AddDataNode(name); @@ -351,6 +382,9 @@ namespace emp { return node; } + /// Add a data node to this systematics manager + /// @param name the name of the data node (so it can be found later) + /// @param pull_set_fun a function to run when the data node is requested to pull data (returns single value) data_ptr_t AddDataNode(std::function pull_fun, const std::string & name) { emp_assert(!data_nodes.HasNode(name)); auto node = AddDataNode(name); @@ -358,7 +392,7 @@ namespace emp { return node; } - + /// @returns a pointer to the data node with the specified name data_ptr_t GetDataNode(const std::string & name) { return &(data_nodes.Get(name)); } @@ -385,25 +419,29 @@ namespace emp { virtual int SackinIndex() const = 0; virtual double CollessLikeIndex() const = 0; virtual int GetMRCADepth() const = 0; - virtual void AddOrg(ORG && org, WorldPosition pos, int update) = 0; - virtual void AddOrg(ORG & org, WorldPosition pos, int update) = 0; - virtual bool RemoveOrg(WorldPosition pos, int time=-1) = 0; - virtual void RemoveOrgAfterRepro(WorldPosition pos, int time=-1) = 0; - // virtual bool RemoveNextOrg(WorldPosition pos, int time=-1) = 0; + virtual void AddOrg(ORG && org, WorldPosition pos) = 0; + virtual void AddOrg(ORG & org, WorldPosition pos) = 0; + virtual void AddOrg(ORG && org, WorldPosition pos, WorldPosition parent) = 0; + virtual void AddOrg(ORG & org, WorldPosition pos, WorldPosition parent) = 0; + virtual bool RemoveOrg(WorldPosition pos) = 0; + virtual void RemoveOrgAfterRepro(WorldPosition pos) = 0; virtual void PrintStatus(std::ostream & os) const = 0; virtual double CalcDiversity() const = 0; virtual void Update() = 0; - virtual void SetNextParent(int pos) = 0; - virtual void SetNextParent(WorldPosition & pos) = 0; + virtual void SetNextParent(WorldPosition pos) = 0; + virtual void SwapPositions(WorldPosition p1, WorldPosition p2) = 0; }; + // Forward-declare CollessStruct for use in calculating Colless metric + struct CollessStruct; + /// @brief A tool to track phylogenetic relationships among organisms. /// The systematics class tracks the relationships among all organisms based on the INFO_TYPE /// provided. If an offspring has the same value for INFO_TYPE as its parent, it is grouped into /// the same taxon. Otherwise a new Taxon is created and the old one is used as its parent in - /// the phylogeny. If the provided INFO_TYPE is the organsism's genome, a traditional phylogeny + /// the phylogeny. If the provided INFO_TYPE is the organism's genome, a traditional phylogeny /// is formed, with genotypes. If the organism's behavior/task set is used, then organisms are - /// grouped by phenotypes. If the organsims's position is used, the evolutionary path through + /// grouped by phenotypes. If the organism's position is used, the evolutionary path through /// space is tracked. Any other aspect of organisms can be tracked this way as well. template class Systematics : public SystematicsBase { @@ -416,9 +454,9 @@ namespace emp { using hash_t = typename Ptr::hash_t; using fun_calc_info_t = std::function; - fun_calc_info_t calc_info_fun; - Ptr next_parent; - Ptr most_recent; + fun_calc_info_t calc_info_fun; ///< Function that takes an organism and returns the unit being tracked by systematics + Ptr next_parent; ///< The taxon that has been marked as parent for next new org + Ptr most_recent; ///< The most-recently added taxon using parent_t::store_active; using parent_t::store_ancestors; @@ -441,28 +479,20 @@ namespace emp { using parent_t::GetNumOutside; using parent_t::GetTreeSize; using parent_t::GetNumTaxa; - // using parent_t::OnNew; - // using parent_t::OnPrune; using parent_t::GetPhylogeneticDiversity; - // using parent_t::GetTaxonDistinctiveness; - // using parent_t::GetEvolutionaryDistinctiveness; using parent_t::GetMeanPairwiseDistance; using parent_t::GetSumPairwiseDistance; using parent_t::GetVariancePairwiseDistance; using parent_t::GetPairwiseDistances; - // using parent_t::GetDistanceToRoot; - // using parent_t::GetBranchesToRoot; - // using parent_t::GetMRCA; using parent_t::GetMRCADepth; using parent_t::AddOrg; using parent_t::RemoveOrg; using parent_t::RemoveOrgAfterRepro; - // using parent_t::RemoveNextOrg; - // using parent_t::Parent; using parent_t::PrintStatus; - // using parent_t::PrintLineage; using parent_t::CalcDiversity; using parent_t::Update; + using parent_t::GetUpdate; + using parent_t::SetUpdate; using parent_t::SetNextParent; using parent_t::GetDataNode; @@ -476,11 +506,12 @@ namespace emp { using parent_t::AddMutationCountDataNode; using parent_t::GetMaxDepth; + /// Struct for keeping track of what information to print out in snapshot files struct SnapshotInfo { using snapshot_fun_t = std::function; - snapshot_fun_t fun; - std::string key; - std::string desc; + snapshot_fun_t fun; ///< Function for converting taxon to string containing desired data + std::string key; ///< Column name for data calculated with this function + std::string desc; ///< Description of data in this function SnapshotInfo(const snapshot_fun_t & _fun, const std::string & _key, const std::string & _desc="") : fun(_fun), @@ -489,32 +520,40 @@ namespace emp { { ; } }; - emp::vector user_snapshot_funs; + emp::vector user_snapshot_funs; ///< Collection of all desired snapshot file columns std::unordered_set< Ptr, hash_t > active_taxa; ///< A set of all living taxa. std::unordered_set< Ptr, hash_t > ancestor_taxa; ///< A set of all dead, ancestral taxa. std::unordered_set< Ptr, hash_t > outside_taxa; ///< A set of all dead taxa w/o descendants. - Ptr to_be_removed = nullptr; - int removal_time = -1; - int removal_pos = -1; + Ptr to_be_removed = nullptr; ///< Taxon to remove org from after next call to AddOrg + emp::WorldPosition removal_pos = {0, 0}; ///< Position of taxon to next be removed - emp::vector > taxon_locations; - emp::vector > next_taxon_locations; + emp::vector > > taxon_locations; ///< Positions in this vector indicate taxon positions in world - Signal, ORG & org)> on_new_sig; ///< Trigger when any organism is pruned from tree + Signal, ORG & org)> on_new_sig; ///< Trigger when a new taxon is created + Signal)> on_extinct_sig; ///< Trigger when a taxon goes extinct Signal)> on_prune_sig; ///< Trigger when any organism is pruned from tree mutable Ptr mrca; ///< Most recent common ancestor in the population. - /// Called wheneven a taxon has no organisms AND no descendants. + /// Called whenever a taxon has no organisms AND no descendants. void Prune(Ptr taxon); /// Called when an offspring taxa has been deleted. void RemoveOffspring(Ptr offspring, Ptr taxon); /// Called when there are no more living members of a taxon. There may be descendants. - void MarkExtinct(Ptr taxon, int time=-1); + void MarkExtinct(Ptr taxon); + + #ifndef DOXYGEN_SHOULD_SKIP_THIS + /// Helper function for RemoveBefore + /// @returns true if a a taxon can safely be + /// removed by RemoveBefore + bool CanRemove(Ptr t, int ud); + // Helper for Colless function calculation + CollessStruct RecursiveCollessStep(Ptr curr) const; + #endif // DOXYGEN_SHOULD_SKIP_THIS @@ -545,30 +584,97 @@ namespace emp { outside_taxa.clear(); } + // ===== Functions for modifying phylogeny/systematics manager internal state ==== - void Update() { - ++curr_update; - if (track_synchronous) { + /// Switch to next update/time step + /// Useful for keeping track of taxon survival times + /// and population positions in synchronous generation worlds. + void Update(); - // Clear pending removal - if (to_be_removed != nullptr) { - RemoveOrg(to_be_removed, removal_time); - taxon_locations[removal_pos] = nullptr; - to_be_removed = nullptr; - removal_pos = -1; - } - - std::swap(taxon_locations, next_taxon_locations); - next_taxon_locations.resize(0); + ///@{ + /// Add information about a new organism, including its stored info and parent's taxon; + /// If you would like the systematics manager to track taxon age, you can also supply + /// the update at which the taxon is being added. + /// return a pointer for the associated taxon. + /// @returns a pointer for the associated taxon. + /// @param org a reference to the organism being added + /// @param pos the position of the organism being added + /// @param parent a pointer to the org's parent + void AddOrg(ORG && org, WorldPosition pos); + void AddOrg(ORG && org, WorldPosition pos, WorldPosition parent); + Ptr AddOrg(ORG && org, WorldPosition pos, Ptr parent); + Ptr AddOrg(ORG && org, Ptr parent=nullptr); + + void AddOrg(ORG & org, WorldPosition pos); + void AddOrg(ORG & org, WorldPosition pos, WorldPosition parent); + Ptr AddOrg(ORG & org, WorldPosition pos, Ptr parent); + Ptr AddOrg(ORG & org, Ptr parent=nullptr); + ///@} + + ///@{ + /// Remove an instance of an organism; track when it's gone. + /// @param pos the world position of the individual being removed + /// @param taxon a pointer to the taxon of the individual being removed + bool RemoveOrg(WorldPosition pos); + bool RemoveOrg(Ptr taxon); + ///@} + + ///@{ + /// Mark an instance of a taxon to be removed; track when it's gone. + /// This is a work-around to deal with steady state/non-synchronous + /// populations in which an organism might die as its offspring is born + /// (e.g. in a spatial world where the offspring replaces the parent). + /// If the bookkeeping is not handled correctly, we could accidentally + /// mark the taxon as extinct when it is actually continuing. + /// By using this method, the taxon won't be removed until after the + /// next org is added or the next time an org is marked for removal. + /// @param pos the world position of the individual being removed + /// @param taxon a pointer to the taxon of the individual being removed + void RemoveOrgAfterRepro(WorldPosition pos); + void RemoveOrgAfterRepro(Ptr taxon); + ///@} + + + ///@{ + /// Tell systematics manager that the parent of the next taxon added + /// will be the one specified by this function (either at the specified + /// position or the one pointed to by the given pointer) + /// Works with version of AddOrg that only takes org, position, and + /// update. + /// Will be set to null after being assigned as the parent of a taxon + void SetNextParent(WorldPosition pos) { + emp_assert(pos.IsActive() || !pos.IsValid()); + if (!pos.IsValid()) { + next_parent = nullptr; + } else { + next_parent = taxon_locations[pos.GetPopID()][pos.GetIndex()]; } } + void SetNextParent(Ptr p) { + next_parent = p; + } + ///@} + + /// Set function used to calculate taxons from organisms void SetCalcInfoFun(fun_calc_info_t f) {calc_info_fun = f;} - // Currently using raw pointers because of a weird bug in emp::Ptr. Should switch when fixed. + /// Remove all taxa that 1) went extinct before the specified update/time step, + /// and 2) only have ancestors that went extinct before the specified update/time step. + /// Warning: this function invalidates most measurements you could make about tree topology. + /// It is useful in select situations where you need to store ancestors for some period of time, + /// but cannot computationally afford to store all ancestors for your entire run. + void RemoveBefore(int ud); + + // ===== Functions for querying phylogeny/systematics manager internal state ==== + + // Currently using raw pointer because of a weird bug in emp::Ptr. Should switch when fixed. std::unordered_set< Ptr, hash_t > * GetActivePtr() { return &active_taxa; } + /// @returns set of active (extant/living) taxa0 const std::unordered_set< Ptr, hash_t > & GetActive() const { return active_taxa; } + /// @returns set of ancestor taxa (extinct, but have active descendants) const std::unordered_set< Ptr, hash_t > & GetAncestors() const { return ancestor_taxa; } + /// @returns set of outside taxa (extinct, with no active descendants) const std::unordered_set< Ptr, hash_t > & GetOutside() const { return outside_taxa; } /// How many taxa are still active in the population? @@ -586,59 +692,60 @@ namespace emp { /// How many taxa are stored in total? size_t GetNumTaxa() const { return GetTreeSize() + GetNumOutside(); } - int GetMaxDepth() { - if (max_depth != -1) { - return max_depth; - } + /// @returns the phylogenetic depth (lineage length) of the taxon with + /// the longest lineage out of all active taxa + int GetMaxDepth(); - for (auto tax : active_taxa) { - int depth = tax->GetDepth(); - if (depth > max_depth) { - max_depth = depth; - } - } - return max_depth; + /// @returns the taxon that will be used as the parent + /// of the next taxon created via the version of AddOrg + /// that does not accept a parent + Ptr GetNextParent() { + return next_parent; } - void SetNextParent(WorldPosition & pos) { - emp_assert(pos.IsActive() || !pos.IsValid()); - if (!pos.IsValid()) { - next_parent = nullptr; - } else { - next_parent = taxon_locations[pos.GetIndex()]; - } + /// @returns the most recently created taxon + Ptr GetMostRecent() { + return most_recent; } - void SetNextParent(int pos) { - emp_assert(pos < (int)taxon_locations.size(), "Invalid parent", pos, taxon_locations.size()); - if (pos == -1) { - next_parent = nullptr; - } else { - emp_assert(pos >= 0, "Invalid parent", pos); - emp_assert(taxon_locations[pos], pos); - next_parent = taxon_locations[pos]; - } - } + /// @returns a pointer to the parent of a given taxon + Ptr Parent(Ptr taxon) const; - void SetNextParent(Ptr p) { - next_parent = p; + /// @returns true if there is a taxon at specified location + bool IsTaxonAt(WorldPosition id) { + emp_assert(id.GetPopID() < taxon_locations.size(), "Invalid population id", id, taxon_locations.size()); + emp_assert(id.GetIndex() < taxon_locations[id.GetPopID()].size(), "Invalid taxon location", id, taxon_locations[id.GetPopID()].size()); + return taxon_locations[id.GetPopID()][id.GetIndex()] != nullptr; } - Ptr GetNextParent() { - return next_parent; + /// @returns pointer to taxon at specified location + Ptr GetTaxonAt(WorldPosition id) { + emp_assert(id.GetPopID() < taxon_locations.size(), "Invalid population id", id, taxon_locations.size()); + emp_assert(id.GetIndex() < taxon_locations[id.GetPopID()].size(), "Invalid taxon location", id, taxon_locations[id.GetPopID()].size()); + return taxon_locations[id.GetPopID()][id.GetIndex()]; } - Ptr GetMostRecent() { - return most_recent; - } + // ===== Functions for adding actions to systematics manager signals ==== - SignalKey OnNew(std::function, ORG & org)> & fun) { return on_new_sig.AddAction(fun); } + /// Provide a function for Systematics to call each time a new taxon is created. + /// Trigger: New taxon is made + /// Argument: Pointer to taxon, reference to org taxon was created from + SignalKey OnNew(std::function t, ORG & org)> & fun) { return on_new_sig.AddAction(fun); } + + /// Provide a function for Systematics to call each time a taxon goes extinct. + /// Trigger: Taxon is going extinct + /// Argument: Pointer to taxon + SignalKey OnExtinct(std::function t)> & fun) { return on_extinct_sig.AddAction(fun); } - /// Privide a function for Systematics to call each time a taxon is about to be pruned. + /// Provide a function for Systematics to call each time a taxon is about to be pruned (removed from ancestors). /// Trigger: Taxon is about to be killed /// Argument: Pointer to taxon SignalKey OnPrune(std::function)> & fun) { return on_prune_sig.AddAction(fun); } + // ===== Functions for adding data nodes to systematics manager ==== + + /// Add data node that records evolutionary distinctiveness when requested to pull. + /// Used by AddPhylodiversityFile in World_output.hpp virtual data_ptr_t AddEvolutionaryDistinctivenessDataNode(const std::string & name = "evolutionary_distinctiveness") { auto node = AddDataNode(name); @@ -653,6 +760,8 @@ namespace emp { return node; } + /// Add data node that records pairwise distance when requested to pull. + /// Used by AddPhylodiversityFile in World_output.hpp virtual data_ptr_t AddPairwiseDistanceDataNode(const std::string & name = "pairwise_distance") { auto node = AddDataNode(name); node->AddPullSet([this](){ @@ -661,6 +770,8 @@ namespace emp { return node; } + /// Add data node that records phylogenetic distinctiveness when requested to pull. + /// Used by AddPhylodiversityFile in World_output.hpp virtual data_ptr_t AddPhylogeneticDiversityDataNode(const std::string & name = "phylogenetic_diversity") { auto node = AddDataNode(name); node->AddPull([this](){ @@ -669,133 +780,102 @@ namespace emp { return node; } - + /// Add data node that records counts of deleterious steps along + /// lineages in this systematics manager when requested to pull. + /// Used by AddLineageMutationFile in World_output.hpp virtual data_ptr_t AddDeleteriousStepDataNode(const std::string & name = "deleterious_steps") { - return AddDeleteriousStepDataNodeImpl(1, name); - } - - data_ptr_t AddDeleteriousStepDataNodeImpl(bool decoy, const std::string & name = "deleterious_steps") { - emp_assert(false, "Calculating deleterious steps requires suitable DATA_STRUCT"); - return AddDataNode(name); - } - - template - data_ptr_t - AddDeleteriousStepDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "deleterious_steps") { auto node = AddDataNode(name); - node->AddPullSet([this](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountDeleteriousSteps(tax)); - } - return result; - }); + if constexpr (!DATA_STRUCT::has_fitness_t::value) { + emp_assert(false && + "Error: Trying to track deleterious steps in Systematics manager that doesn't track fitness" && + "Please use a DATA_STRUCT type that supports fitness tracking."); + } else { + node->AddPullSet([this](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountDeleteriousSteps(tax)); + } + return result; + }); + } return node; } + /// Add data node that phenotypic volatility (changes in phenotype) along + /// lineages in this systematics manager when requested to pull. + /// Used by AddLineageMutationFile in World_output.hpp virtual data_ptr_t AddVolatilityDataNode(const std::string & name = "volatility") { - return AddVolatilityDataNodeImpl(1, name); - } - - data_ptr_t AddVolatilityDataNodeImpl(bool decoy, const std::string & name = "volatility") { - emp_assert(false, "Calculating taxon volatility requires suitable DATA_STRUCT"); - return AddDataNode(name); - } - - template - data_ptr_t - AddVolatilityDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "volatility") { auto node = AddDataNode(name); - node->AddPullSet([this](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountPhenotypeChanges(tax)); - } - return result; - }); + if constexpr (!DATA_STRUCT::has_phen_t::value) { + emp_assert(false && + "Error: Trying to track phenotypic volatility in Systematics manager that doesn't track fitness" && + "Please use a DATA_STRUCT type that supports phenotype tracking."); + } else { + node->AddPullSet([this](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountPhenotypeChanges(tax)); + } + return result; + }); + } return node; } + /// Add data node that records counts of unique taxa along + /// lineages in this systematics manager when requested to pull. + /// Used by AddLineageMutationFile in World_output.hpp virtual data_ptr_t AddUniqueTaxaDataNode(const std::string & name = "unique_taxa") { - return AddUniqueTaxaDataNodeImpl(1, name); - } + auto node = AddDataNode(name); - data_ptr_t AddUniqueTaxaDataNodeImpl(bool decoy, const std::string & name = "unique_taxa") { - emp_assert(false, "Calculating unique taxa requires suitable DATA_STRUCT"); - return AddDataNode(name); - } + if constexpr (!DATA_STRUCT::has_phen_t::value) { + emp_assert(false && + "Error: Trying to track phenotypic volatility in Systematics manager that doesn't track fitness" && + "Please use a DATA_STRUCT type that supports phenotype tracking."); + } else { - template - data_ptr_t - AddUniqueTaxaDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "unique_taxa") { - auto node = AddDataNode(name); - node->AddPullSet([this](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountUniquePhenotypes(tax)); - } - return result; - }); + node->AddPullSet([this](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountUniquePhenotypes(tax)); + } + return result; + }); + } return node; } + /// Add data node that records counts of mutations of the specified type along + /// lineages in this systematics manager when requested to pull. + /// Used by AddLineageMutationFile in World_output.hpp virtual data_ptr_t AddMutationCountDataNode(const std::string & name = "mutation_count", const std::string & mutation = "substitution") { - return AddMutationCountDataNodeImpl(1, name, mutation); - } - - data_ptr_t AddMutationCountDataNodeImpl(bool decoy, const std::string & name = "mutation_count", const std::string & mutation = "substitution") { - emp_assert(false, "Calculating mutation count requires suitable DATA_STRUCT"); - return AddDataNode(name); - } - - template - data_ptr_t - AddMutationCountDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "mutation_count", const std::string & mutation = "substitution") { auto node = AddDataNode(name); - node->AddPullSet([this,mutation](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountMuts(tax, mutation)); - } - return result; - }); + if constexpr (!DATA_STRUCT::has_mutations_t::value) { + emp_assert(false && + "Error: Trying to track phenotypic volatility in Systematics manager that doesn't track mutations" && + "Please use a DATA_STRUCT type that supports mutation tracking."); + } else { + node->AddPullSet([this,mutation](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountMuts(tax, mutation)); + } + return result; + }); + } return node; } - /// Add a new snapshot function. - /// When a snapshot of the systematics is taken, in addition to the default - /// set of functions, all user-added snapshot functions are run. Functions - /// take a reference to a taxon as input and return the string to be dumped - /// in the file at the given key. - void AddSnapshotFun(const std::function & fun, - const std::string & key, const std::string & desc="") { - user_snapshot_funs.emplace_back(fun, key, desc); - } - - bool IsTaxonAt(int id) { - emp_assert(id < (int) taxon_locations.size(), "Invalid taxon location", id, taxon_locations.size()); - return taxon_locations[id]; - } - - Ptr GetTaxonAt(int id) { - emp_assert(id < (int) taxon_locations.size(), "Invalid taxon location", id, taxon_locations.size()); - emp_assert(taxon_locations[id], "No taxon at specified location"); - return taxon_locations[id]; - } - Ptr GetNextTaxonAt(int id) { - emp_assert(id < (int)next_taxon_locations.size(), "Invalid taxon location"); - emp_assert(next_taxon_locations[id], "No taxon at specified location"); - return next_taxon_locations[id]; - } + // ===== Functions for calculating phylogeny topology metrics ==== /** From (Faith 1992, reviewed in Winters et al., 2013), phylogenetic diversity is * the sum of edges in the minimal spanning tree connected the taxa you're @@ -812,92 +892,48 @@ namespace emp { int GetPhylogeneticDiversity() const { // As shown on page 5 of Faith 1992, when all branch lengths are equal the phylogenetic // diversity is the number of internal nodes plus the number of extant taxa - 1. + //int phylodiversity = ancestor_taxa.size() + active_taxa.size() -1; + return ancestor_taxa.size() + active_taxa.size() - 1; } - /** This is a metric of how distinct @param tax is from the rest of the population. + + /// @returns phylogenetic diversity if used without any arguments . + /// If you want to receive normalized data, you need to include the number of generations + /// your tree has (multiples of 10 from 10 to 100 are allowed) + /// you also need to specify a file with which to normalize your data. + /// If value is outside of the values in the file, 100th percentile will be returned + int GetPhylogeneticDiversityNormalize(int generation = 0, std::string filename = "") const; + + + /** This is a metric of how distinct \c tax is from the rest of the population. * - * (From Vane-Wright et al., 1991; reviewed in Winter et al., 2013) - */ + * (From Vane-Wright et al., 1991; reviewed in Winter et al., 2013) */ double GetTaxonDistinctiveness(Ptr tax) const {return 1.0/GetDistanceToRoot(tax);} /** This metric (from Isaac, 2007; reviewed in Winter et al., 2013) measures how - * distinct @param tax is from the rest of the population, weighted for the amount of + * distinct \c tax is from the rest of the population, weighted for the amount of * unique evolutionary history that it represents. * - * To quantify length of evolutionary history, this method needs @param time: the current + * To quantify length of evolutionary history, this method needs \c time: the current * time, in whatever units time is being measured in when taxa are added to the systematics - * manager. Note that passing a time in the past will produce inacurate results (since we + * manager. Note that passing a time in the past will produce inaccurate results (since we * don't know what the state of the tree was at that time). * - * Assumes the tree is all connected. Will return -1 if this assumption isn't met. - */ - double GetEvolutionaryDistinctiveness(Ptr tax, double time) const { - - double depth = 0; // Length (in time units) of section we're currently exploring - double total = 0; // Count up scores for each section of tree - double divisor = tax->GetTotalOffspring() + 1; // Number of extant taxa this will split into (1 for current taxa, plus its offspring) - - // We're stopping when we hit MRCA, so we need to make sure it's been calculated. - GetMRCA(); - if (tax == mrca) { - return 0; - } - - // std::cout << "Initializing divisor to " << divisor << " Offspring: " << tax->GetTotalOffspring() << std::endl; - // std::cout << "MRCA ID: " << mrca->GetID() << " Tax ID: " << tax->GetID() << " time: " << time << " Orig: " << tax->GetOriginationTime() << std::endl; - - Ptr test_taxon = tax->GetParent(); - - emp_assert(time != -1 && "Invalid time - are you passing time to rg?", time); - emp_assert(time >= tax->GetOriginationTime() - && "GetEvolutionaryDistinctiveness received a time that is earlier than the taxon's origination time.", tax->GetOriginationTime(), time); - - while (test_taxon) { - - // emp_assert(test_taxon->GetOriginationTime() != -1 && - // "Invalid time - are you passing time to rg?", time); - - depth += time - test_taxon->GetOriginationTime(); - // std::cout << "Tax: " << test_taxon->GetID() << " depth: " << depth << " time: " << time << " Orig: " << test_taxon->GetOriginationTime() << " divisor: " << divisor << std::endl; - time = test_taxon->GetOriginationTime(); - if (test_taxon == mrca || !test_taxon) { - // Stop when everything has converged or when we hit the root. - // std::cout << (int)(test_taxon == mrca) << " depth: " << depth << " divisor: " << divisor << std::endl; - total += depth/divisor; - return total; - } else if (test_taxon->GetNumOrgs() > 0) { - // If this taxon is still alive we need to update the divisor - // std::cout << "Alive point" << " depth: " << depth << " divisor: " << divisor << std::endl; - total += depth/divisor; - depth = 0; - divisor = test_taxon->GetTotalOffspring() + 1; - } else if (test_taxon->GetNumOff() > 1) { - // This is a branch point. We need to add the things on the other branch to the divisor.. - // std::cout << "Branch point" << " depth: " << depth << " divisor: " << divisor << std::endl; - total += depth/divisor; - depth = 0; - divisor = test_taxon->GetTotalOffspring(); - } - - test_taxon = test_taxon->GetParent(); - } - - return -1; - } + * Assumes the tree is all connected. Will return -1 if this assumption isn't met.*/ + double GetEvolutionaryDistinctiveness(Ptr tax, double time) const; /** Calculates mean pairwise distance between extant taxa (Webb and Losos, 2000). * This measurement is also called Average Taxonomic Diversity (Warwick and Clark, 1998) * (for demonstration of equivalence see Tucker et al, 2016). This measurement tells * you about the amount of distinctness in the community as a whole. * - * @param branch_only only counts distance in terms of nodes that represent a branch - * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred). - * * This measurement assumes that the tree is fully connected. Will return -1 * if this is not the case. - * */ + * + * @param branch_only only counts distance in terms of nodes that represent a branch + * between two extant taxa (potentially useful for comparison to biological data, where + * non-branching nodes generally cannot be inferred). */ double GetMeanPairwiseDistance(bool branch_only=false) const { emp::vector dists = GetPairwiseDistances(branch_only); return (double)Sum(dists)/dists.size(); @@ -906,13 +942,12 @@ namespace emp { /** Calculates summed pairwise distance between extant taxa. Tucker et al 2017 points * out that this is a measure of phylogenetic richness. * - * @param branch_only only counts distance in terms of nodes that represent a branch - * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred). - * * This measurement assumes that the tree is fully connected. Will return -1 * if this is not the case. - * */ + * + * @param branch_only only counts distance in terms of nodes that represent a branch + * between two extant taxa (potentially useful for comparison to biological data, where + * non-branching nodes generally cannot be inferred) */ double GetSumPairwiseDistance(bool branch_only=false) const { emp::vector v = GetPairwiseDistances(branch_only); return Sum(v); @@ -921,174 +956,40 @@ namespace emp { /** Calculates variance of pairwise distance between extant taxa. Tucker et al 2017 points * out that this is a measure of phylogenetic regularity. * - * @param branch_only only counts distance in terms of nodes that represent a branch - * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred). - * * This measurement assumes that the tree is fully connected. Will return -1 * if this is not the case. - * */ + * + * @param branch_only only counts distance in terms of nodes that represent a branch + * between two extant taxa (potentially useful for comparison to biological data, where + * non-branching nodes generally cannot be inferred). */ double GetVariancePairwiseDistance(bool branch_only=false) const { emp::vector v = GetPairwiseDistances(branch_only); return Variance(v); } - /** Calculates a vector of all pairwise distances between extant taxa. - * - * @param branch_only only counts distance in terms of nodes that represent a branch - * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred). * * This method assumes that the tree is fully connected. Will return -1 * if this is not the case. - * */ - emp::vector GetPairwiseDistances(bool branch_only=false) const { - // The overarching approach here is to start with a bunch of pointers to all - // extant organisms (since that will include all leaves). Then we trace back up - // the tree, keeping track of distances. When things meet up, we calculate - // distances between the nodes on the sides that just met up. - - emp::vector dists; - - std::map< Ptr, emp::vector> > curr_pointers; - std::map< Ptr, emp::vector> > next_pointers; - - - for (Ptr tax : active_taxa) { - curr_pointers[tax] = emp::vector>({{0}}); - } - - // std::cout << "Starting curr_pointers size: " << curr_pointers.size() << std::endl; - - while (curr_pointers.size() > 0) { - for (auto & tax : curr_pointers) { - bool alive = tax.first->GetNumOrgs() > 0; - // std::cout << tax.first << " has " << to_string(tax.second) << "and is waiting for " << tax.first->GetNumOff() + int(alive) << std::endl; - if ( tax.second.size() < tax.first->GetNumOff() + int(alive)) { - if (Has(next_pointers, tax.first)) { - // In case an earlier iteration added this node to next_pointers - for (auto vec : tax.second) { - next_pointers[tax.first].push_back(vec); - } - } else { - next_pointers[tax.first] = curr_pointers[tax.first]; - } - continue; - } - emp_assert(tax.first->GetNumOff() + int(alive) == tax.second.size(), tax.first->GetNumOff(), alive, to_string(tax.second), tax.second.size()); - - // Okay, things should have just met up. Let's compute the distances - // between everything that just met. - - if (tax.second.size() > 1) { - - for (size_t i = 0; i < tax.second.size(); i++ ) { - for (size_t j = i+1; j < tax.second.size(); j++) { - for (int disti : tax.second[i]) { - for (int distj : tax.second[j]) { - // std::cout << "Adding " << disti << " and " << distj << std::endl; - dists.push_back(disti+distj); - } - } - } - } - } - // std::cout << "dists " << to_string(dists) << std::endl; - // Increment distances and stick them in new vector - emp::vector new_dist_vec; - for (auto & vec : tax.second) { - for (int el : vec) { - new_dist_vec.push_back(el+1); - } - } - - // std::cout << "new_dist_vec " << to_string(new_dist_vec) << std::endl; - - next_pointers.erase(tax.first); - - Ptr test_taxon = tax.first->GetParent(); - while (test_taxon && test_taxon->GetNumOff() == 1 && test_taxon->GetNumOrgs() == 0) { - if (!branch_only) { - for (size_t i = 0; i < new_dist_vec.size(); i++){ - new_dist_vec[i]++; - } - } - test_taxon = test_taxon->GetParent(); - } - - if (!test_taxon) { - continue; - } else if (!Has(next_pointers, test_taxon)) { - next_pointers[test_taxon] = emp::vector >({new_dist_vec}); - } else { - next_pointers[test_taxon].push_back(new_dist_vec); - } - } - curr_pointers = next_pointers; - next_pointers.clear(); - // std::cout << curr_pointers.size() << std::endl; - } - - if (dists.size() != (active_taxa.size()*(active_taxa.size()-1))/2) { - // The tree is not connected - // It's possible we should do something different here... - return dists; - } - - // std::cout << "Total: " << total << "Dists: " << dists.size() << std::endl; - - return dists; - - } - - - /** - * Returns a vector containing all taxa from @param time_point that were * - * */ - std::set> GetCanopyExtantRoots(int time_point = 0) const { - // NOTE: This could be made faster by doing something similar to the pairwise distance - // function - - std::set< Ptr> result; - // std::cout << "starting " << time_point << std::endl; - for (Ptr tax : active_taxa) { - // std::cout << tax->GetInfo() << std::endl; - while (tax) { - // std::cout << tax->GetInfo() << " " << tax->GetOriginationTime() << " " << tax->GetDestructionTime() << std::endl; - if (tax->GetOriginationTime() <= time_point && tax->GetDestructionTime() > time_point ) { - result.insert(tax); - // std::cout << "inserting " << tax->GetInfo() << std::endl; - break; - } - tax = tax->GetParent(); - } - } - - return result; + * @param branch_only only counts distance in terms of nodes that represent a branch + * between two extant taxa (potentially useful for comparison to biological data, where + * non-branching nodes generally cannot be inferred). * */ + emp::vector GetPairwiseDistances(bool branch_only=false) const; - } + /** + * Returns a vector containing all taxa that were extant at \c time_point and + * were at that time the most recent ancestors of taxa that are now extant + * Example: Say the only current extant taxon is C, its lineage goes A -> B -> C, + * and B and C were both alive at the specified time_point. This function would + * only return B. If, however, there were another currently extant taxon that were + * descended directly from A, then this function would return both A and B. */ + std::set> GetCanopyExtantRoots(int time_point = 0) const; /** Counts the total number of ancestors between @param tax and MRCA, if there is one. If - * there is no common ancestor, distance to the root of this tree is calculated instead. - */ - int GetDistanceToRoot(Ptr tax) const { - // Now, trace the line of descent, updating the candidate as we go. - GetMRCA(); - - int depth = 0; - Ptr test_taxon = tax->GetParent(); - while (test_taxon) { - depth++; - if (test_taxon == mrca || !test_taxon) { - return depth; - } - test_taxon = test_taxon->GetParent(); - } - return depth; - } + * there is no common ancestor, distance to the root of this tree is calculated instead.*/ + int GetDistanceToRoot(Ptr tax) const ; /** Counts the number of branching points leading to multiple extant taxa * between @param tax and the most-recent common ancestor (or the root of its subtree, @@ -1096,325 +997,131 @@ namespace emp { * of stats for phylogenies are designed for phylogenies reconstructed from extant taxa. * These phylogenies generally only contain branching points, rather than every ancestor * along the way to the current taxon.*/ - int GetBranchesToRoot(Ptr tax) const { - GetMRCA(); - - int depth = 0; - Ptr test_taxon = tax->GetParent(); - while (test_taxon) { - if (test_taxon == mrca || !test_taxon) { - return depth; - } else if (test_taxon->GetNumOff() > 1) { - depth++; - } - test_taxon = test_taxon->GetParent(); - } - return depth; - } + int GetBranchesToRoot(Ptr tax) const; /** Calculate Sackin Index of this tree (Sackin, 1972; reviewed in Shao, 1990). - * Measures tree balance - */ + * Measures tree balance*/ int SackinIndex() const { int sackin = 0; - for (auto taxon : active_taxa) { sackin += GetBranchesToRoot(taxon) + 1; // Sackin index counts root as branch } - return sackin; } + /** Calculate Colless Index of this tree (Colless, 1982; reviewed in Shao, 1990). + * Measures tree balance. The standard Colless index only works for bifurcating trees, + * so this will be a Colless-like Index, as suggested in + * "Sound Colless-like balance indices for multifurcating trees" (Mir, 2018, PLoS One)*/ + double CollessLikeIndex() const { + GetMRCA(); + return RecursiveCollessStep(mrca).total; + } - // Graph ToGraph() const { - - // std::map, int> ids; - // int next_id = 0; - - // for (Ptr tax : active_taxa) { - // ids[tax] = next_id; - // next_id++; - // } - - // for (Ptr tax : ancestor_taxa) { - // ids[tax] = next_id; - // next_id++; - // } - - // for (Ptr tax : outside_taxa) { - // ids[tax] = next_id; - // next_id++; - // } - - // Graph g(next_id); - - // for (Ptr tax : active_taxa) { - // if (tax->GetParent()) { - // g.AddEdge(ids[tax->GetParent()], ids[tax]); - // } - // } - - // for (Ptr tax : ancestor_taxa) { - // if (tax->GetParent()) { - // g.AddEdge(ids[tax->GetParent()], ids[tax]); - // } - // } - - // for (Ptr tax : outside_taxa) { - // if (tax->GetParent()) { - // g.AddEdge(ids[tax->GetParent()], ids[tax]); - // } - // } - - // return g; - // } - - // Graph ToMinimalGraph() const { - // std::map, int> ids; - // int next_id = 0; - - // for (Ptr tax : active_taxa) { - // if (tax->GetNumOff() == 1) { - // continue; - // } - // ids[tax] = next_id; - // next_id++; - // } - - // for (Ptr tax : ancestor_taxa) { - // if (tax->GetNumOff() == 1) { - // continue; - // } - // ids[tax] = next_id; - // next_id++; - // } - - // for (Ptr tax : outside_taxa) { - // if (tax->GetNumOff() == 1) { - // continue; - // } - // ids[tax] = next_id; - // next_id++; - // } - - // Graph g(next_id); - - // for (Ptr tax : active_taxa) { - // if (tax->GetNumOff() == 1) { - // continue; - // } - - // Ptr parent = tax->GetParent(); - // while (parent) { - // if (parent->GetNumOff() == 1) { - // parent = parent->GetParent(); - // } else { - // g.AddEdge(ids[parent], ids[tax]); - // } - // } - // } - - // for (Ptr tax : ancestor_taxa) { - // if (tax->GetNumOff() == 1) { - // continue; - // } - - // Ptr parent = tax->GetParent(); - // while (parent) { - // if (parent->GetNumOff() == 1) { - // parent = parent->GetParent(); - // } else { - // g.AddEdge(ids[parent], ids[tax]); - // } - // } - // } - - // for (Ptr tax : outside_taxa) { - // if (tax->GetNumOff() == 1) { - // continue; - // } - - // Ptr parent = tax->GetParent(); - // while (parent) { - // if (parent->GetNumOff() == 1) { - // parent = parent->GetParent(); - // } else { - // g.AddEdge(ids[parent], ids[tax]); - // } - // } - // } - - // return g; - // } - - struct CollessStruct { - double total = 0; - emp::vector ns; - }; - - CollessStruct RecursiveCollessStep(Ptr curr) const { - CollessStruct result; - - while (curr->GetNumOff() == 1) { - curr = *(curr->GetOffspring().begin()); - } + /// @returns a pointer to the Most-Recent Common Ancestor for the population. + Ptr GetMRCA() const; - if (curr->GetNumOff() == 0) { - result.ns.push_back(0); // Node itself is calculated at level above - return result; - } + /// @returns the depth of the Most-Recent Common Ancestor; return -1 for none. + int GetMRCADepth() const; - for (Ptr off : curr->GetOffspring()) { - // std::cout << "Recursing on ID: " << off->GetID() << " Offspring: " << off->GetTotalOffspring() << std::endl; + /// @returns a pointer to the Most-Recent Ancestor shared by two taxa. + Ptr GetSharedAncestor(Ptr t1, Ptr t2) const; - CollessStruct new_result = RecursiveCollessStep(off); - result.ns.push_back(Sum(new_result.ns) + log(off->GetOffspring().size() + exp(1))); - result.total += new_result.total; - } + /// @returns the genetic diversity of the population. + double CalcDiversity() const; - // std::cout << "Evaluating: " << curr->GetID() << std::endl; + /// @returns vector containing the lineages of the specified taxon + emp::vector> GetLineage(Ptr tax) const { + emp::vector> lineage; + lineage.push_back(tax); - double med = Median(result.ns); - double sum_diffs = 0; - // std::cout << "Median: " << med << std::endl; - for (double n : result.ns) { - // std::cout << n << std::endl; - sum_diffs += std::abs(n-med); + while (tax) { + tax = Parent(tax); + lineage.push_back(tax); } - // std::cout << "Sumdiffs: " << sum_diffs << " n: " << result.ns.size() << " average: " << sum_diffs/result.ns.size() << std::endl; - result.total += sum_diffs/result.ns.size(); - return result; + return lineage; } - /** Calculate Colless Index of this tree (Colless, 1982; reviewed in Shao, 1990). - * Measures tree balance. The standard Colless index only works for bifurcating trees, - * so this will be a Colless-like Index, as suggested in - * "Sound Colless-like balance indices for multifurcating trees" (Mir, 2018, PLoS One) - */ - double CollessLikeIndex() const { + /// @returns vector containing the lineages of the specified taxon + /// up to and including the MRCA, but not past the MRCA + emp::vector> GetLineageToMRCA(Ptr tax) const { GetMRCA(); + emp::vector> lineage; + lineage.push_back(tax); - return RecursiveCollessStep(mrca).total; + while (tax && tax != mrca) { + tax = Parent(tax); + lineage.push_back(tax); + } + return lineage; } + // ===== Output functions ==== - void RemoveBefore(int ud) { - - // @ELD: This would be such a nice way to do it - // but we can't because we need to notify offspring - // when their parents are un-tracked - // std::set> to_remove; - // for (Ptr tax : ancestor_taxa) { - // if (tax->GetDestructionTime() < ud) { - // to_remove.insert(tax); - // } - // } - - // for (Ptr tax : to_remove) { - // ancestor_taxa.erase(tax); - // tax.Delete(); - // } + /// Print details about the Systematics manager. + /// First prints setting, followed by all active, ancestor, and outside + /// taxa being stored. Format for taxa is + /// [ id | number of orgs in this taxon, number of offspring taxa of this taxon | parent taxon] + /// @param os output stream to print to + void PrintStatus(std::ostream & os=std::cout) const; - std::map, std::set>> to_remove; + /// Print a whole lineage. Format: "Lineage:", followed by each taxon in the lineage, each on new line + /// @param taxon a pointer to the taxon to print the lineage of + /// @param os output stream to print to + void PrintLineage(Ptr taxon, std::ostream & os=std::cout) const; - for (Ptr tax : active_taxa) { - Ptr curr = tax; - - while (curr && !CanRemove(curr->GetParent(), ud)) { - curr = curr->GetParent(); - } - - if (curr) { - Ptr next = curr->GetParent(); - while (next) { - to_remove[next].insert(curr); - curr = next; - next = next->GetParent(); - } - } - } - // std::cout << "About to remove " << to_remove.size() << " orgs" << std::endl; - for (std::pair, std::set>> el : to_remove) { - emp_assert(el.first->GetDestructionTime() < ud, el.first->GetDestructionTime(), ud); - if (el.first->GetNumOff() == el.second.size()) { - // Everything is account for - for (auto tax : el.second) { - tax->NullifyParent(); - } - ancestor_taxa.erase(el.first); - el.first.Delete(); - } - } - - } - - bool CanRemove(Ptr t, int ud) { - if (!t) { - return false; - } - while (t) { - if (t->GetNumOrgs() > 0 || t->GetDestructionTime() >= ud) { - return false; - } - t = t->GetParent(); - } - return true; + /// Add a new snapshot function. + /// When a snapshot of the systematics is taken, in addition to the default + /// set of functions, all user-added snapshot functions are run. Functions + /// take a reference to a taxon as input and return the string to be dumped + /// in the file at the given key. + void AddSnapshotFun(const std::function & fun, + const std::string & key, const std::string & desc="") { + user_snapshot_funs.emplace_back(fun, key, desc); } - /// Request a pointer to the Most-Recent Common Ancestor for the population. - Ptr GetMRCA() const; - - /// Request the depth of the Most-Recent Common Ancestor; return -1 for none. - int GetMRCADepth() const; - - /// Add information about a new organism, including its stored info and parent's taxon; - /// If you would like the systematics manager to track taxon age, you can also supply - /// the update at which the taxon is being added. - /// return a pointer for the associated taxon. - void AddOrg(ORG && org, WorldPosition pos, int update=-1); - Ptr AddOrg(ORG && org, WorldPosition pos, Ptr parent=nullptr, int update=-1); - Ptr AddOrg(ORG && org, Ptr parent=nullptr, int update=-1); - - void AddOrg(ORG & org, WorldPosition pos, int update=-1); - Ptr AddOrg(ORG & org, WorldPosition pos, Ptr parent=nullptr, int update=-1); - Ptr AddOrg(ORG & org, Ptr parent=nullptr, int update=-1); - - - /// Remove an instance of an organism; track when it's gone. - bool RemoveOrg(WorldPosition pos, int time=-1); - bool RemoveOrg(Ptr taxon, int time=-1); - - void RemoveOrgAfterRepro(WorldPosition pos, int time=-1); - void RemoveOrgAfterRepro(Ptr taxon, int time=-1); - - /// Remove org from next population (for use with synchronous generations) - // bool RemoveNextOrg(WorldPosition pos, int time=-1); - // bool RemoveNextOrg(Ptr taxon, int time=-1); - - /// Climb up a lineage... - Ptr Parent(Ptr taxon) const; - - /// Print details about the Systematics manager. - void PrintStatus(std::ostream & os=std::cout) const; - - /// Print whole lineage. - void PrintLineage(Ptr taxon, std::ostream & os=std::cout) const; - + /// Take a snapshot of current state of taxon phylogeny. + /// WARNING: Current, this function assumes one parent taxon per-taxon. + /// @param file_path the file to store the snapshot data in void Snapshot(const std::string & file_path) const; - /// Calculate the genetic diversity of the population. - double CalcDiversity() const; + void SwapPositions(WorldPosition p1, WorldPosition p2) { + emp::vector > & v1 = taxon_locations[p1.GetPopID()]; + emp::vector > & v2 = taxon_locations[p2.GetPopID()]; + std::swap(v1[p1.GetIndex()], v2[p2.GetIndex()]); + } }; - #ifndef DOXYGEN_SHOULD_SKIP_THIS // ============================================================= // === === // === Out-of-class member function definitions from above === // === === // ============================================================= + // ======= Functions for manipulating systematics manager internals + + template + void Systematics::Update() { + if (track_synchronous) { + + // Clear pending removal + if (to_be_removed != nullptr) { + RemoveOrg(to_be_removed); + taxon_locations[removal_pos.GetPopID()][removal_pos.GetIndex()] = nullptr; + to_be_removed = nullptr; + removal_pos = {0, 0}; + } + + // Assumes that synchronous worlds have two populations, with 0 + // being currently alive and 1 being the one being created + std::swap(taxon_locations[0], taxon_locations[1]); + taxon_locations[1].resize(0); + } + ++curr_update; + } + // Should be called wheneven a taxon has no organisms AND no descendants. template void Systematics::Prune(Ptr taxon) { @@ -1438,15 +1145,23 @@ namespace emp { // If the taxon is still active AND the is the current mrca AND now has only one offspring, // clear the MRCA for lazy re-evaluation later. - else if (taxon == mrca && taxon->GetNumOff() == 1) mrca = nullptr; + else if (taxon == mrca && taxon->GetNumOff() == 1) { + mrca = nullptr; + } } // Mark a taxon extinct if there are no more living members. There may be descendants. template - void Systematics::MarkExtinct(Ptr taxon, int time) { + void Systematics::MarkExtinct(Ptr taxon) { emp_assert(taxon); emp_assert(taxon->GetNumOrgs() == 0); + // Track destruction time + taxon->SetDestructionTime(curr_update); + + // Give other functions a chance to do stuff with taxon before extinction + on_extinct_sig.Trigger(taxon); + if (max_depth == (int)taxon->GetDepth()) { // We no longer know the max depth max_depth = -1; @@ -1466,105 +1181,92 @@ namespace emp { taxon.Delete(); return; } - // std::cout << "About to set destruction time " << time << std::endl; - // Only need to track destruction time if we're archiving taxa - taxon->SetDestructionTime(time); if (store_ancestors) { ancestor_taxa.insert(taxon); // Move taxon to ancestors... } + if (taxon == mrca && taxon->GetNumOff() <= 1) { + // If this taxon was mrca and has only one offspring, then the new + // mrca is somewhere farther down the chain. + // If this taxon was mrca and now has no offspring, something very + // strange has happened. + // Either way, we should mark mrca for lazy recalculation + mrca = nullptr; + } if (taxon->GetNumOff() == 0) Prune(taxon); // ...and prune from there if needed. } - - // Request a pointer to the Most-Recent Common Ancestor for the population. + // Add information about a new organism, including its stored info and parent's taxon; + // Can't return a pointer for the associated taxon because of obnoxious inheritance problems template - Ptr::taxon_t> Systematics::GetMRCA() const { - if (!mrca && num_roots == 1) { // Determine if we need to calculate the MRCA. - // First, find a candidate among the living taxa. Only taxa that have one offsrping - // can be on the line-of-descent to the MRCA, so anything else is a good start point. - // There must be at least one! Stop as soon as we find a candidate. - Ptr candidate(nullptr); - for (auto x : active_taxa) { - if (x->GetNumOff() != 1) { candidate = x; break; } - } - - // Now, trace the line of descent, updating the candidate as we go. - Ptr test_taxon = candidate->GetParent(); - while (test_taxon) { - emp_assert(test_taxon->GetNumOff() >= 1); - // If the test_taxon is dead, we only want to update candidate when we hit a new branch point - // If test_taxon is still alive, though, we always need to update it - if (test_taxon->GetNumOff() > 1 || test_taxon->GetNumOrgs() > 0) candidate = test_taxon; - test_taxon = test_taxon->GetParent(); - } - mrca = candidate; - } - return mrca; + // Ptr::taxon_t> + void Systematics::AddOrg(ORG & org, WorldPosition pos) { + emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); + // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); + AddOrg(org, pos, next_parent); + next_parent = nullptr; } - // Request the depth of the Most-Recent Common Ancestor; return -1 for none. + // Add information about a new organism, including its stored info and parent's taxon; + // Can't return a pointer for the associated taxon because of obnoxious inheritance problems template - int Systematics::GetMRCADepth() const { - GetMRCA(); - if (mrca) return (int) mrca->GetDepth(); - return -1; + // Ptr::taxon_t> + void Systematics::AddOrg(ORG && org, WorldPosition pos) { + emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); + // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); + AddOrg(org, pos, next_parent); + next_parent = nullptr; } - - // Add information about a new organism, including its stored info and parent's taxon; // Can't return a pointer for the associated taxon because of obnoxious inheritance problems template // Ptr::taxon_t> - void Systematics::AddOrg(ORG & org, WorldPosition pos, int update) { + void Systematics::AddOrg(ORG & org, WorldPosition pos, WorldPosition parent) { emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); - // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); - AddOrg(org, pos, next_parent, update); - next_parent = nullptr; + AddOrg(org, pos, taxon_locations[parent.GetPopID()][parent.GetIndex()]); } // Add information about a new organism, including its stored info and parent's taxon; // Can't return a pointer for the associated taxon because of obnoxious inheritance problems template // Ptr::taxon_t> - void Systematics::AddOrg(ORG && org, WorldPosition pos, int update) { + void Systematics::AddOrg(ORG && org, WorldPosition pos, WorldPosition parent) { emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); - // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); - AddOrg(org, pos, next_parent, update); - next_parent = nullptr; + AddOrg(org, pos, taxon_locations[parent.GetPopID()][parent.GetIndex()]); } // Version for if you aren't tracking positions template Ptr::taxon_t> - Systematics::AddOrg(ORG & org, Ptr parent, int update) { - return AddOrg(org, -1, parent, update); + Systematics::AddOrg(ORG & org, Ptr parent) { + emp_assert(!store_position && + "Trying to add org to position-tracking systematics manager without position. Either specify a valid position or turn of position tracking for systematic manager.", store_position); + return AddOrg(org, WorldPosition::invalid_id, parent); } // Version for if you aren't tracking positions template Ptr::taxon_t> - Systematics::AddOrg(ORG && org, Ptr parent, int update) { + Systematics::AddOrg(ORG && org, Ptr parent) { emp_assert(!store_position && "Trying to add org to position-tracking systematics manager without position. Either specify a valid position or turn of position tracking for systematic manager.", store_position); - return AddOrg(org, WorldPosition::invalid_id, parent, update); + return AddOrg(org, WorldPosition::invalid_id, parent); } // Add information about a new organism, including its stored info and parent's taxon; // return a pointer for the associated taxon. template Ptr::taxon_t> - Systematics::AddOrg(ORG && org, WorldPosition pos, Ptr parent, int update) { - return AddOrg(org, pos, parent, update); + Systematics::AddOrg(ORG && org, WorldPosition pos, Ptr parent) { + return AddOrg(org, pos, parent); } // Add information about a new organism, including its stored info and parent's taxon; - // return a pointer for the associated taxon. template Ptr::taxon_t> - Systematics::AddOrg(ORG & org, WorldPosition pos, Ptr parent, int update) { + Systematics::AddOrg(ORG & org, WorldPosition pos, Ptr parent) { org_count++; // Keep count of how many organisms are being tracked. ORG_INFO info = calc_info_fun(org); @@ -1582,33 +1284,29 @@ namespace emp { if (max_depth != -1 && (int)cur_taxon->GetDepth() > max_depth) { max_depth = cur_taxon->GetDepth(); } - on_new_sig.Trigger(cur_taxon, org); + if (store_active) active_taxa.insert(cur_taxon); // Store new taxon. - if (parent) parent->AddOffspring(cur_taxon); // Track tree info. + if (parent) parent->AddOffspring(cur_taxon); // Track tree info. - cur_taxon->SetOriginationTime(update); + cur_taxon->SetOriginationTime(curr_update); + on_new_sig.Trigger(cur_taxon, org); } // std::cout << "about to store poisition" << std::endl; - if (store_position && pos.GetIndex() >= 0) { - if (pos.GetPopID()) { - if (pos.GetIndex() >= next_taxon_locations.size()) { - next_taxon_locations.resize(pos.GetIndex()+1); - } - next_taxon_locations[pos.GetIndex()] = cur_taxon; - - } else { - if (pos.GetIndex() >= taxon_locations.size()) { - taxon_locations.resize(pos.GetIndex()+1); - } - taxon_locations[pos.GetIndex()] = cur_taxon; + if (store_position) { + if (pos.GetPopID() >= taxon_locations.size()) { + taxon_locations.resize(pos.GetPopID()+1); } + if (pos.GetIndex() >= taxon_locations[pos.GetPopID()].size()) { + taxon_locations[pos.GetPopID()].resize(pos.GetIndex()+1); + } + taxon_locations[pos.GetPopID()][pos.GetIndex()] = cur_taxon; } cur_taxon->AddOrg(); // Record the current organism in its taxon. total_depth += cur_taxon->GetDepth(); // Track the total depth (for averaging) if (to_be_removed) { - RemoveOrg(to_be_removed, removal_time); + RemoveOrg(to_be_removed); to_be_removed = nullptr; } @@ -1617,57 +1315,52 @@ namespace emp { } template - void Systematics::RemoveOrgAfterRepro(WorldPosition pos, int time) { + void Systematics::RemoveOrgAfterRepro(WorldPosition pos) { emp_assert(store_position, "Trying to remove org based on position from systematics manager that doesn't track it."); - if (pos.GetIndex() >= taxon_locations.size() || !taxon_locations[pos.GetIndex()]) { + if (pos.GetPopID() >= taxon_locations.size() || + pos.GetIndex() >= taxon_locations[pos.GetPopID()].size() || + !taxon_locations[pos.GetPopID()][pos.GetIndex()]) { // There's not actually a taxon here return; } - RemoveOrgAfterRepro(taxon_locations[pos.GetIndex()], time); - removal_pos = pos.GetIndex(); + RemoveOrgAfterRepro(taxon_locations[pos.GetPopID()][pos.GetIndex()]); + removal_pos = pos; } template - void Systematics::RemoveOrgAfterRepro(Ptr taxon, int time) { + void Systematics::RemoveOrgAfterRepro(Ptr taxon) { if (to_be_removed != nullptr) { - RemoveOrg(to_be_removed, removal_time); - taxon_locations[removal_pos] = nullptr; + RemoveOrg(to_be_removed); + taxon_locations[removal_pos.GetPopID()][removal_pos.GetIndex()] = nullptr; to_be_removed = nullptr; - removal_pos = -1; + removal_pos = {0, 0}; } to_be_removed = taxon; - // std::cout << "Setting remove time to " << time << std::endl; - removal_time = time; } - // Remove an instance of an organism; track when it's gone. + // Remove an instance of a taxon; track when it's gone. template - bool Systematics::RemoveOrg(WorldPosition pos, int time) { + bool Systematics::RemoveOrg(WorldPosition pos) { emp_assert(store_position, "Trying to remove org based on position from systematics manager that doesn't track it."); + emp_assert(pos.GetPopID() < taxon_locations.size(), "Invalid population requested for removal", pos.GetPopID(), taxon_locations.size()); + emp_assert(pos.GetIndex() < taxon_locations[pos.GetPopID()].size(), "Invalid position requested for removal", pos.GetIndex(), taxon_locations[pos.GetPopID()].size()); - if (pos.GetPopID() == 0) { - emp_assert(pos.GetIndex() < taxon_locations.size(), "Invalid position requested for removal", pos.GetIndex(), taxon_locations.size()); - bool active = false; - if (taxon_locations[pos.GetIndex()]) { - //TODO: Figure out how this can ever not be true - active = RemoveOrg(taxon_locations[pos.GetIndex()], time); - } - taxon_locations[pos.GetIndex()] = nullptr; - return active; - } else { - emp_assert(pos.GetIndex() < next_taxon_locations.size(), "Invalid position requested for removal", pos.GetIndex(), taxon_locations.size()); - bool active = RemoveOrg(next_taxon_locations[pos.GetIndex()], time); - next_taxon_locations[pos.GetIndex()] = nullptr; - return active; + bool active = false; + if (taxon_locations[pos.GetPopID()][pos.GetIndex()]) { + //TODO: Figure out how this can ever not be true + active = RemoveOrg(taxon_locations[pos.GetPopID()][pos.GetIndex()]); } + taxon_locations[pos.GetPopID()][pos.GetIndex()] = nullptr; + return active; } - // Remove an instance of an organism; track when it's gone. + // Remove an instance of a taxon; track when it's gone. + // @param taxon the taxon of which one instance is being removed template - bool Systematics::RemoveOrg(Ptr taxon, int time) { + bool Systematics::RemoveOrg(Ptr taxon) { emp_assert(taxon); // Update stats @@ -1676,12 +1369,58 @@ namespace emp { // emp_assert(Has(active_taxa, taxon)); const bool active = taxon->RemoveOrg(); - if (!active) MarkExtinct(taxon, time); + if (!active) MarkExtinct(taxon); return active; } - // Climb up a lineage... + // Remove all taxa that 1) went extinct before the specified update/time step, + // and 2) only have ancestors that went extinct before the specified update/time step. + // Warning: this function invalidates most measurements you could make about tree topology. + // It is useful in select situations where you need to store ancestors for some period of time, + // but cannot computationally afford to store all ancestors for your entire run. + template + void Systematics::RemoveBefore(int ud) { + + std::set> to_remove; + for (Ptr tax : ancestor_taxa) { + if (tax->GetDestructionTime() < ud && CanRemove(tax, ud)) { + to_remove.insert(tax); + } + } + + for (Ptr tax : to_remove) { + for (Ptr off : tax->GetOffspring()) { + off->NullifyParent(); + } + ancestor_taxa.erase(tax); + tax.Delete(); + } + + } + + #ifndef DOXYGEN_SHOULD_SKIP_THIS + /// Helper function for RemoveBefore + /// @returns true if a a taxon can safely be + /// removed by RemoveBefore + template + bool Systematics::CanRemove(Ptr t, int ud) { + if (!t) { + return false; + } + while (t) { + if (t->GetNumOrgs() > 0 || t->GetDestructionTime() >= ud) { + return false; + } + t = t->GetParent(); + } + return true; + } + #endif // #DOXYGEN_SHOULD_SKIP_THIS + + // ======= Functions for getting information from the systematics manager + + // @returns a pointer to the parent of a given taxon template Ptr::taxon_t> Systematics::Parent(Ptr taxon) const { emp_assert(taxon); @@ -1690,6 +1429,10 @@ namespace emp { } // Print details about the Systematics manager. + // First prints setting, followed by all active, ancestor, and outside + // taxa being stored. Format for taxa is + // [ id | number of orgs in this taxon, number of offspring taxa of this taxon | parent taxon] + // @param os output stream to print to template void Systematics::PrintStatus(std::ostream & os) const { os << "Systematics Status:\n"; @@ -1722,7 +1465,6 @@ namespace emp { os << std::endl; } - // Print whole lineage. template void Systematics::PrintLineage(Ptr taxon, std::ostream & os) const { os << "Lineage:\n"; @@ -1732,8 +1474,6 @@ namespace emp { } } - /// Take a snapshot of current state of taxon phylogeny. - /// WARNING: Current, this function assumes one parent taxon per-taxon. template void Systematics::Snapshot(const std::string & file_path) const { emp::DataFile file(file_path); @@ -1748,7 +1488,7 @@ namespace emp { // - ancestor_list: ancestor list for taxon std::function get_ancestor_list = [&cur_taxon]() -> std::string { - if (cur_taxon->GetParent() == nullptr) { return "[NONE]"; } + if (cur_taxon->GetParent() == nullptr) { return "[\"NONE\"]"; } return "[" + to_string(cur_taxon->GetParent()->GetID()) + "]"; }; file.AddFun(get_ancestor_list, "ancestor_list", "Ancestor list for this taxon."); @@ -1831,13 +1571,372 @@ namespace emp { } - // Calculate the genetic diversity of the population. + // ======= Measurements about the systematics manager + + // @returns the genetic diversity of the population. template double Systematics::CalcDiversity() const { return emp::Entropy(active_taxa, [](Ptr x){ return x->GetNumOrgs(); }, (double) org_count); } - #endif // DOXYGEN_SHOULD_SKIP_THIS + // @returns a pointer to the Most-Recent Common Ancestor for the population or null pointer if there isn't one + template + Ptr::taxon_t> Systematics::GetMRCA() const { + if (!mrca && num_roots == 1) { // Determine if we need to calculate the MRCA. + // First, find a candidate among the living taxa. Only taxa that have one offsrping + // can be on the line-of-descent to the MRCA, so anything else is a good start point. + // There must be at least one! Stop as soon as we find a candidate. + Ptr candidate(nullptr); + for (auto x : active_taxa) { + if (x->GetNumOff() != 1) { candidate = x; break; } + } + + // Now, trace the line of descent, updating the candidate as we go. + Ptr test_taxon = candidate->GetParent(); + while (test_taxon) { + emp_assert(test_taxon->GetNumOff() >= 1); + // If the test_taxon is dead, we only want to update candidate when we hit a new branch point + // If test_taxon is still alive, though, we always need to update it + if (test_taxon->GetNumOff() > 1 || test_taxon->GetNumOrgs() > 0) candidate = test_taxon; + test_taxon = test_taxon->GetParent(); + } + mrca = candidate; + } + return mrca; + } + + // @returns the depth of the Most-Recent Common Ancestor or -1 for none. + template + int Systematics::GetMRCADepth() const { + GetMRCA(); + if (mrca) return (int) mrca->GetDepth(); + return -1; + } + + template + Ptr::taxon_t> Systematics::GetSharedAncestor(Ptr t1, Ptr t2) const { + // Same taxon + if (t1 == t2) { + return t1; + } + + // If not same, we have to actually do work + emp::vector > lineage1 = GetLineageToMRCA(t1); + emp::vector > lineage2 = GetLineageToMRCA(t2); + + size_t l1 = lineage1.size() - 1; + size_t l2 = lineage2.size() - 1; + + emp_assert(lineage1[l1] == lineage2[l2], + "Both lineages should start with MRCA"); + + while (lineage1[l1] == lineage2[l2]) { + l1--; + l2--; + } + + return lineage1[l1+1]; + } + + #ifndef DOXYGEN_SHOULD_SKIP_THIS + // Helper for Colless function calculation + struct CollessStruct { + double total = 0; + emp::vector ns; + }; + + // Helper for Colless function calculation + template + CollessStruct Systematics::RecursiveCollessStep(Ptr curr) const { + CollessStruct result; + + while (curr->GetNumOff() == 1) { + curr = *(curr->GetOffspring().begin()); + } + + if (curr->GetNumOff() == 0) { + result.ns.push_back(0); // Node itself is calculated at level above + return result; + } + + for (Ptr off : curr->GetOffspring()) { + // std::cout << "Recursing on ID: " << off->GetID() << " Offspring: " << off->GetTotalOffspring() << std::endl; + + CollessStruct new_result = RecursiveCollessStep(off); + result.ns.push_back(Sum(new_result.ns) + log(off->GetOffspring().size() + exp(1))); + result.total += new_result.total; + } + + // std::cout << "Evaluating: " << curr->GetID() << std::endl; + + double med = Median(result.ns); + double sum_diffs = 0; + // std::cout << "Median: " << med << std::endl; + for (double n : result.ns) { + // std::cout << n << std::endl; + sum_diffs += std::abs(n-med); + } + // std::cout << "Sumdiffs: " << sum_diffs << " n: " << result.ns.size() << " average: " << sum_diffs/result.ns.size() << std::endl; + result.total += sum_diffs/result.ns.size(); + return result; + } + #endif // #DOXYGEN_SHOULD_SKIP_THIS + + template + emp::vector Systematics::GetPairwiseDistances(bool branch_only) const { + // The overarching approach here is to start with a bunch of pointers to all + // extant organisms (since that will include all leaves). Then we trace back up + // the tree, keeping track of distances. When things meet up, we calculate + // distances between the nodes on the sides that just met up. + + emp::vector dists; + + std::map< Ptr, emp::vector> > curr_pointers; + std::map< Ptr, emp::vector> > next_pointers; + + + for (Ptr tax : active_taxa) { + curr_pointers[tax] = emp::vector>({{0}}); + } + + // std::cout << "Starting curr_pointers size: " << curr_pointers.size() << std::endl; + + while (curr_pointers.size() > 0) { + for (auto & tax : curr_pointers) { + bool alive = tax.first->GetNumOrgs() > 0; + // std::cout << tax.first << " has " << to_string(tax.second) << "and is waiting for " << tax.first->GetNumOff() + int(alive) << std::endl; + if ( tax.second.size() < tax.first->GetNumOff() + int(alive)) { + if (Has(next_pointers, tax.first)) { + // In case an earlier iteration added this node to next_pointers + for (auto vec : tax.second) { + next_pointers[tax.first].push_back(vec); + } + } else { + next_pointers[tax.first] = curr_pointers[tax.first]; + } + continue; + } + emp_assert(tax.first->GetNumOff() + int(alive) == tax.second.size(), tax.first->GetNumOff(), alive, to_string(tax.second), tax.second.size()); + + // Okay, things should have just met up. Let's compute the distances + // between everything that just met. + + if (tax.second.size() > 1) { + + for (size_t i = 0; i < tax.second.size(); i++ ) { + for (size_t j = i+1; j < tax.second.size(); j++) { + for (int disti : tax.second[i]) { + for (int distj : tax.second[j]) { + // std::cout << "Adding " << disti << " and " << distj << std::endl; + dists.push_back(disti+distj); + } + } + } + } + } + // std::cout << "dists " << to_string(dists) << std::endl; + // Increment distances and stick them in new vector + emp::vector new_dist_vec; + for (auto & vec : tax.second) { + for (int el : vec) { + new_dist_vec.push_back(el+1); + } + } + + // std::cout << "new_dist_vec " << to_string(new_dist_vec) << std::endl; + + next_pointers.erase(tax.first); + + Ptr test_taxon = tax.first->GetParent(); + while (test_taxon && test_taxon->GetNumOff() == 1 && test_taxon->GetNumOrgs() == 0) { + if (!branch_only) { + for (size_t i = 0; i < new_dist_vec.size(); i++){ + new_dist_vec[i]++; + } + } + test_taxon = test_taxon->GetParent(); + } + + if (!test_taxon) { + continue; + } else if (!Has(next_pointers, test_taxon)) { + next_pointers[test_taxon] = emp::vector >({new_dist_vec}); + } else { + next_pointers[test_taxon].push_back(new_dist_vec); + } + } + curr_pointers = next_pointers; + next_pointers.clear(); + // std::cout << curr_pointers.size() << std::endl; + } + + if (dists.size() != (active_taxa.size()*(active_taxa.size()-1))/2) { + // The tree is not connected + // It's possible we should do something different here... + return dists; + } + + // std::cout << "Total: " << total << "Dists: " << dists.size() << std::endl; + + return dists; + + } + + template + double Systematics::GetEvolutionaryDistinctiveness(Ptr tax, double time) const { + + double depth = 0; // Length (in time units) of section we're currently exploring + double total = 0; // Count up scores for each section of tree + double divisor = tax->GetTotalOffspring() + 1; // Number of extant taxa this will split into (1 for current taxa, plus its offspring) + + // We're stopping when we hit MRCA, so we need to make sure it's been calculated. + GetMRCA(); + if (tax == mrca) { + return 0; + } + + // std::cout << "Initializing divisor to " << divisor << " Offspring: " << tax->GetTotalOffspring() << std::endl; + // std::cout << "MRCA ID: " << mrca->GetID() << " Tax ID: " << tax->GetID() << " time: " << time << " Orig: " << tax->GetOriginationTime() << std::endl; + + Ptr test_taxon = tax->GetParent(); + + emp_assert(time != -1 && "Invalid time - are you passing time to rg?", time); + emp_assert(time >= tax->GetOriginationTime() + && "GetEvolutionaryDistinctiveness received a time that is earlier than the taxon's origination time.", tax->GetOriginationTime(), time); + + while (test_taxon) { + + // emp_assert(test_taxon->GetOriginationTime() != -1 && + // "Invalid time - are you passing time to rg?", time); + + depth += time - test_taxon->GetOriginationTime(); + // std::cout << "Tax: " << test_taxon->GetID() << " depth: " << depth << " time: " << time << " Orig: " << test_taxon->GetOriginationTime() << " divisor: " << divisor << std::endl; + time = test_taxon->GetOriginationTime(); + if (test_taxon == mrca || !test_taxon) { + // Stop when everything has converged or when we hit the root. + // std::cout << (int)(test_taxon == mrca) << " depth: " << depth << " divisor: " << divisor << std::endl; + total += depth/divisor; + return total; + } else if (test_taxon->GetNumOrgs() > 0) { + // If this taxon is still alive we need to update the divisor + // std::cout << "Alive point" << " depth: " << depth << " divisor: " << divisor << std::endl; + total += depth/divisor; + depth = 0; + divisor = test_taxon->GetTotalOffspring() + 1; + } else if (test_taxon->GetNumOff() > 1) { + // This is a branch point. We need to add the things on the other branch to the divisor.. + // std::cout << "Branch point" << " depth: " << depth << " divisor: " << divisor << std::endl; + total += depth/divisor; + depth = 0; + divisor = test_taxon->GetTotalOffspring(); + } + + test_taxon = test_taxon->GetParent(); + } + + return -1; + } + + template + int Systematics::GetBranchesToRoot(Ptr tax) const { + GetMRCA(); + + int depth = 0; + Ptr test_taxon = tax->GetParent(); + while (test_taxon) { + if (test_taxon == mrca || !test_taxon) { + return depth; + } else if (test_taxon->GetNumOff() > 1) { + depth++; + } + test_taxon = test_taxon->GetParent(); + } + return depth; + } + + template + int Systematics::GetDistanceToRoot(Ptr tax) const { + // Now, trace the line of descent, updating the candidate as we go. + GetMRCA(); + + int depth = 0; + Ptr test_taxon = tax->GetParent(); + while (test_taxon) { + depth++; + if (test_taxon == mrca || !test_taxon) { + return depth; + } + test_taxon = test_taxon->GetParent(); + } + return depth; + } + + template + std::set::taxon_t>> Systematics::GetCanopyExtantRoots(int time_point) const { + // NOTE: This could be made faster by doing something similar to the pairwise distance + // function + using taxon_t = Systematics::taxon_t; + std::set< Ptr> result; + // std::cout << "starting " << time_point << std::endl; + for (Ptr tax : active_taxa) { + // std::cout << tax->GetInfo() << std::endl; + while (tax) { + // std::cout << tax->GetInfo() << " " << tax->GetOriginationTime() << " " << tax->GetDestructionTime() << std::endl; + if (tax->GetOriginationTime() <= time_point && tax->GetDestructionTime() > time_point ) { + result.insert(tax); + // std::cout << "inserting " << tax->GetInfo() << std::endl; + break; + } + tax = tax->GetParent(); + } + } + + return result; + + } + + template + int Systematics::GetPhylogeneticDiversityNormalize(int generation, std::string filename) const { + int gen_value = ((generation / 10) - 1); //indexes from 0, 100 generations would correspond to the 10th line in the csv + // bool percent_found = false; + int phylogenetic_diversity = ancestor_taxa.size() + active_taxa.size() - 1; + + if(filename == ""){ + //std::cout << "Phylogenetic Diversity is " << phylogenetic_diversity << std::endl; + return phylogenetic_diversity; + } else{ + + emp::File generation_percentiles(filename); //opens file + emp::vector< emp::vector >percentile_data = generation_percentiles.ToData(','); //turns file contents into vector + + for(int j = 0; j <= percentile_data[gen_value].size() - 2; j++){ //searches through vector for slot where phylo diversity fits + + if((percentile_data[gen_value][j] <= phylogenetic_diversity) && (percentile_data[gen_value][j + 1] > phylogenetic_diversity)){ + // std::cout << "phylogenetic diversity is in between: " << percentile_data[gen_value][j] << "and " << percentile_data[gen_value][j+1] << std::endl; + // std::cout << "The phylogenetic diversity value " << phylogenetic_diversity << " is in the " << j << " percentile, in the " << ((gen_value + 1)* 10) << " generation" << std::endl; + return j; + } + } + } + return 100; + } + + template + int Systematics::GetMaxDepth() { + if (max_depth != -1) { + return max_depth; + } + + for (auto tax : active_taxa) { + int depth = tax->GetDepth(); + if (depth > max_depth) { + max_depth = depth; + } + } + return max_depth; + } + + } #endif // #ifndef EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE diff --git a/include/emp/Evolve/SystematicsAnalysis.hpp b/include/emp/Evolve/SystematicsAnalysis.hpp index 11bde6d3a7..9113250279 100644 --- a/include/emp/Evolve/SystematicsAnalysis.hpp +++ b/include/emp/Evolve/SystematicsAnalysis.hpp @@ -20,10 +20,14 @@ namespace emp { + /// @returns the taxon with the highest fitness out of any active taxon + /// in the given systematics manager. + /// @param s the systematics manager to search in. Must have more than 0 active taxa. template Ptr FindDominant(systematics_t & s) { - double best = -999999; - Ptr best_tax = nullptr; + emp_assert(s.GetNumActive() > 0 && "Trying to call FindDominant on empty population"); + double best = (*(s.GetActive().begin()))->GetData().GetFitness(); + Ptr best_tax = (*(s.GetActive().begin())); for (Ptr tax : s.GetActive()) { double f = tax->GetData().GetFitness(); if (f > best) { @@ -34,10 +38,9 @@ namespace emp { return best_tax; } - /// Returns the total number of times a mutation of type @param type - /// that along @param taxon 's lineage. (Different from CountMuts in - /// that CountMuts sums them whereas CountMutSteps would count two - /// simultaneous mutations of the same type as one event) + /// Returns the total number of ancestor taxa in \c taxon 's lineage. + /// Requires that taxon is a member of a systematics manager that + /// has ancestor storing turned on template int LineageLength(Ptr taxon) { int count = 0; @@ -50,10 +53,16 @@ namespace emp { return count; } - /// Returns the total number of times a mutation of type @param type - /// that along @param taxon 's lineage. (Different from CountMuts in + /// Returns the total number of times a mutation of type \c type + /// occurred along \c taxon 's lineage. (Different from CountMuts in /// that CountMuts sums them whereas CountMutSteps would count two /// simultaneous mutations of the same type as one event) + /// @param type string corresponding to a type of mutation. + /// Must be in the mut_counts dictionary (i.e. the dictionary + /// passed in when \ref mut_landscape_info::RecordMutation was called) + /// @param taxon a pointer to a taxon to count mutation steps for. + /// Must have a DATA_TYPE that supports mutation tracking + /// (e.g. mut_landscape_info) template int CountMutSteps(Ptr taxon, std::string type="substitution") { int count = 0; diff --git a/include/emp/Evolve/World.hpp b/include/emp/Evolve/World.hpp index f4a243fe81..0ecd68bd92 100644 --- a/include/emp/Evolve/World.hpp +++ b/include/emp/Evolve/World.hpp @@ -15,8 +15,6 @@ * whether or not they also affect injected organisms. (Right now they always do!!) * @todo We should Specialize World so that ANOTHER world can be used as an ORG, with proper * delegation to facilitate demes, pools, islands, etc. - * @todo We should be able to have any number of systematics managers, based on various type_trait - * information a that we want to track. * @todo Add a signal for DoBirth() for when a birth fails. * @todo Add a signal for population Reset() (and possibly Clear?) * @todo Add a feature to maintain population sorted by each phenotypic trait. This will allow @@ -974,7 +972,7 @@ namespace emp { // Track the new systematics info for (Ptr > s : systematics) { - s->AddOrg(*new_org, pos, (int) update); + s->AddOrg(*new_org, pos); } SetupOrg(*new_org, pos, *random_ptr); @@ -998,7 +996,7 @@ namespace emp { } for (Ptr > s : systematics) { - s->RemoveOrgAfterRepro(pos, update); // Notify systematics about organism removal + s->RemoveOrgAfterRepro(pos); // Notify systematics about organism removal } } @@ -1491,6 +1489,13 @@ namespace emp { pop.resize(0); std::swap(pops[0], pops[1]); // Move next pop into place. + // Tell systematics manager to swap next population and population + // Needs to happen here so that you can refer to systematics in + // OnPlacement functions + for (Ptr> s : systematics) { + s->Update(); + } + // Update the active population. num_orgs = 0; for (size_t i = 0; i < pop.size(); i++) { @@ -1500,12 +1505,7 @@ namespace emp { } } - // 3. Handle systematics and any data files that need to be printed this update. - - // Tell systematics manager to swap next population and population - for (Ptr> s : systematics) { - s->Update(); - } + // 3. Handle any data files that need to be printed this update. for (auto file : files) file->Update(update); diff --git a/tests/Evolve/Systematics.cpp b/tests/Evolve/Systematics.cpp index c5c73ad631..686a7dc58b 100644 --- a/tests/Evolve/Systematics.cpp +++ b/tests/Evolve/Systematics.cpp @@ -1,10 +1,9 @@ -/* - * This file is part of Empirical, https://github.com/devosoft/Empirical - * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2021 -*/ /** - * @file + * @note This file is part of Empirical, https://github.com/devosoft/Empirical + * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * @date 2021 + * + * @file Systematics.cpp */ #include @@ -15,6 +14,7 @@ #ifndef NDEBUG #define TDEBUG #endif + #include "emp/base/vector.hpp" #include "emp/Evolve/SystematicsAnalysis.hpp" #include "emp/Evolve/Systematics.hpp" @@ -22,83 +22,88 @@ #include "emp/Evolve/World_output.hpp" #include "emp/hardware/AvidaGP.hpp" - -TEST_CASE("Test Systematics", "[Evolve]") -{ - +TEST_CASE("Test Systematics", "[Evolve]") { // Taxon emp::Taxon tx(0, "a"); - REQUIRE(tx.GetID() == 0); - REQUIRE(tx.GetParent() == nullptr); - REQUIRE(tx.GetInfo() == "a"); - REQUIRE(tx.GetNumOrgs() == 0); - REQUIRE(tx.GetTotOrgs() == 0); + CHECK(tx.GetID() == 0); + CHECK(tx.GetParent() == nullptr); + CHECK(tx.GetInfo() == "a"); + CHECK(tx.GetNumOrgs() == 0); + CHECK(tx.GetTotOrgs() == 0); tx.AddOrg(); - REQUIRE(tx.GetNumOrgs() == 1); + CHECK(tx.GetNumOrgs() == 1); tx.RemoveOrg(); - REQUIRE(tx.GetNumOrgs() == 0); - REQUIRE(tx.GetTotOrgs() == 1); - REQUIRE(tx.GetTotalOffspring() == 0); + CHECK(tx.GetNumOrgs() == 0); + CHECK(tx.GetTotOrgs() == 1); + CHECK(tx.GetTotalOffspring() == 0); emp::Ptr< emp::Taxon > parentPtr(&tx); emp::Taxon tx_1(1, "b", parentPtr); - REQUIRE(tx_1.GetParent() == parentPtr); + CHECK(tx_1.GetParent() == parentPtr); tx_1.AddTotalOffspring(); - REQUIRE(tx_1.GetTotalOffspring() == 1); - REQUIRE(tx.GetTotalOffspring() == 1); + CHECK(tx_1.GetTotalOffspring() == 1); + CHECK(tx.GetTotalOffspring() == 1); // Systematics std::function calc_taxon = [](double & o){ return o > 50.0 ? "large" : "small"; }; emp::Systematics sys1(calc_taxon); - REQUIRE(sys1.GetTrackSynchronous() == false); - REQUIRE(sys1.GetNumAncestors() == 0); - REQUIRE(sys1.GetNumActive() == 0); - REQUIRE(sys1.GetNumOutside() == 0); - REQUIRE(sys1.GetTreeSize() == 0); - REQUIRE(sys1.GetNumTaxa() == 0); + CHECK(sys1.GetTrackSynchronous() == false); + CHECK(sys1.GetNumAncestors() == 0); + CHECK(sys1.GetNumActive() == 0); + CHECK(sys1.GetNumOutside() == 0); + CHECK(sys1.GetTreeSize() == 0); + CHECK(sys1.GetNumTaxa() == 0); sys1.SetTrackSynchronous(true); - sys1.AddOrg(15.0, {0,0}, 0); - REQUIRE(sys1.GetNumActive() == 1); - REQUIRE(sys1.GetTaxonAt(0)->GetInfo() == "small"); - sys1.AddOrg(56.0, {1,1}, 0); - REQUIRE(sys1.GetNumActive() == 2); - REQUIRE(sys1.GetNextTaxonAt(1)->GetInfo() == "large"); + CHECK(sys1.GetTrackSynchronous() == true); + sys1.AddOrg(15.0, {0,0}); + CHECK(sys1.GetNumActive() == 1); + CHECK(sys1.GetTaxonAt({0,0})->GetInfo() == "small"); + CHECK(sys1.IsTaxonAt({0,0})); + sys1.AddOrg(56.0, {1,1}); + CHECK(sys1.GetNumActive() == 2); + CHECK(sys1.GetTaxonAt({1,1})->GetInfo() == "large"); + CHECK(sys1.IsTaxonAt({1,1})); sys1.RemoveOrg({1,1}); - REQUIRE(sys1.GetNumActive() == 1); + CHECK(!sys1.IsTaxonAt({1,1})); + CHECK(sys1.GetNumActive() == 1); + sys1.AddOrg(56.0, {1,0}); + CHECK(sys1.IsTaxonAt({1,0})); + CHECK(!sys1.RemoveOrg({1,0})); + CHECK(!sys1.IsTaxonAt({1,0})); // Base setters and getters - REQUIRE(sys1.GetStoreActive() == true); - REQUIRE(sys1.GetStoreAncestors() == true); - REQUIRE(sys1.GetStoreOutside() == false); - REQUIRE(sys1.GetArchive() == true); - REQUIRE(sys1.GetStorePosition() == true); + CHECK(sys1.GetStoreActive() == true); + CHECK(sys1.GetStoreAncestors() == true); + CHECK(sys1.GetStoreOutside() == false); + CHECK(sys1.GetArchive() == true); + CHECK(sys1.GetStorePosition() == true); sys1.SetStoreActive(false); - REQUIRE(sys1.GetStoreActive() == false); + CHECK(sys1.GetStoreActive() == false); sys1.SetStoreAncestors(false); - REQUIRE(sys1.GetStoreAncestors() == false); + CHECK(sys1.GetStoreAncestors() == false); sys1.SetStoreOutside(true); - REQUIRE(sys1.GetStoreOutside() == true); + CHECK(sys1.GetStoreOutside() == true); sys1.SetArchive(false); - REQUIRE(sys1.GetArchive() == false); + CHECK(sys1.GetArchive() == false); sys1.SetStorePosition(false); - REQUIRE(sys1.GetStorePosition() == false); + CHECK(sys1.GetStorePosition() == false); #ifndef NDEBUG - sys1.AddDeleteriousStepDataNodeImpl(true); - REQUIRE(emp::assert_last_fail); + sys1.AddDeleteriousStepDataNode(); + CHECK(emp::assert_last_fail); emp::assert_clear(); - sys1.AddVolatilityDataNodeImpl(true); - REQUIRE(emp::assert_last_fail); + sys1.AddVolatilityDataNode(); + CHECK(emp::assert_last_fail); emp::assert_clear(); - sys1.AddUniqueTaxaDataNodeImpl(true); - REQUIRE(emp::assert_last_fail); + sys1.AddUniqueTaxaDataNode(); + CHECK(emp::assert_last_fail); emp::assert_clear(); - sys1.AddMutationCountDataNodeImpl(true); - REQUIRE(emp::assert_last_fail); + sys1.AddMutationCountDataNode(); + CHECK(emp::assert_last_fail); emp::assert_clear(); #endif @@ -107,138 +112,157 @@ TEST_CASE("Test Systematics", "[Evolve]") //emp::Systematics sys2(calc_taxon) my_taxon taxon1(1, "medium"); emp::Ptr ptr1 = &taxon1; - REQUIRE(emp::LineageLength(ptr1) == 1); + CHECK(emp::LineageLength(ptr1) == 1); my_taxon taxon2(1, "medium", ptr1); emp::Ptr ptr2 = &taxon2; - REQUIRE(emp::LineageLength(ptr1) == 1); - REQUIRE(emp::LineageLength(ptr2) == 2); + CHECK(emp::LineageLength(ptr1) == 1); + CHECK(emp::LineageLength(ptr2) == 2); std::unordered_map muts; muts["short"] = 12; muts["tall"] = 3; taxon2.GetData().RecordMutation(muts); - REQUIRE(taxon2.GetData().mut_counts.size() == 2); - REQUIRE(taxon2.GetData().mut_counts["tall"] == 3); + CHECK(taxon2.GetData().mut_counts.size() == 2); + CHECK(taxon2.GetData().mut_counts["tall"] == 3); emp::vector types; types.push_back("tall"); types.push_back("short"); - REQUIRE(emp::CountMuts(ptr2, types) == 15); - REQUIRE(emp::CountMutSteps(ptr2, types) == 2); - REQUIRE(emp::CountMutSteps(ptr2, "short") == 1); + CHECK(emp::CountMuts(ptr2, types) == 15); + CHECK(emp::CountMutSteps(ptr2, types) == 2); + CHECK(emp::CountMutSteps(ptr2, "short") == 1); muts["short"] = 4; taxon1.GetData().RecordMutation(muts); - REQUIRE(emp::CountMuts(ptr1, "short") == 4); - REQUIRE(emp::CountMuts(ptr2, "short") == 16); - REQUIRE(emp::CountMutSteps(ptr1, "short") == 1); - REQUIRE(emp::CountMutSteps(ptr2, "short") == 2); - - emp::Systematics sys([](const int & i){return i;}, true, true, true, false); - - std::cout << "\nAddOrg 25 (id1, no parent)\n"; - auto id1 = sys.AddOrg(25, nullptr, 0); - std::cout << "\nAddOrg -10 (id2; parent id1)\n"; - auto id2 = sys.AddOrg(-10, id1, 6); - std::cout << "\nAddOrg 26 (id3; parent id1)\n"; - auto id3 = sys.AddOrg(26, id1, 10); - std::cout << "\nAddOrg 27 (id4; parent id2)\n"; - auto id4 = sys.AddOrg(27, id2, 25); - std::cout << "\nAddOrg 28 (id5; parent id2)\n"; - auto id5 = sys.AddOrg(28, id2, 32); - std::cout << "\nAddOrg 29 (id6; parent id5)\n"; - auto id6 = sys.AddOrg(29, id5, 39); - std::cout << "\nAddOrg 30 (id7; parent id1)\n"; - auto id7 = sys.AddOrg(30, id1, 6); - - - std::cout << "\nRemoveOrg (id2)\n"; + CHECK(emp::CountMuts(ptr1, "short") == 4); + CHECK(emp::CountMuts(ptr2, "short") == 16); + CHECK(emp::CountMutSteps(ptr1, "short") == 1); + CHECK(emp::CountMutSteps(ptr2, "short") == 2); + + emp::Systematics sys([](const int & i){return i;}, true, true, true, false); + + // std::cout << "\nAddOrg 25 (id1, no parent)\n"; + sys.SetUpdate(0); + auto id1 = sys.AddOrg(25, nullptr); + // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; + sys.SetUpdate(6); + auto id2 = sys.AddOrg(-10, id1); + // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; + sys.SetUpdate(10); + auto id3 = sys.AddOrg(26, id1); + // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; + sys.SetUpdate(25); + auto id4 = sys.AddOrg(27, id2); + // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; + sys.SetUpdate(32); + auto id5 = sys.AddOrg(28, id2); + // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; + sys.SetUpdate(39); + auto id6 = sys.AddOrg(29, id5); + // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; + sys.SetUpdate(6); + auto id7 = sys.AddOrg(30, id1); + + CHECK(*id1 < *id2); + CHECK(sys.Parent(id2) == id1); + + // std::cout << "\nRemoveOrg (id2)\n"; sys.RemoveOrg(id1); sys.RemoveOrg(id2); double mpd = sys.GetMeanPairwiseDistance(); - std::cout << "MPD: " << mpd <GetNumOff() == 0); CHECK(outside_taxon->GetParent()->GetID() == 8); + CHECK(sys.GetMaxDepth() == 8); + auto active = sys.GetActive(); emp::vector>> active_vec(active.begin(), active.end()); emp::Sort(active_vec, [](emp::Ptr> & a, emp::Ptr> & b){ @@ -369,80 +395,92 @@ TEST_CASE("Test Systematics", "[Evolve]") CHECK(active_vec[10]->GetNumOrgs() == 1); CHECK(active_vec[10]->GetNumOff() == 0); CHECK(active_vec[10]->GetParent()->GetID() == 17); - } -TEST_CASE("Test not tracking ancestors", "[Evolve]") -{ +TEST_CASE("Test not tracking ancestors", "[Evolve]") { emp::Systematics sys([](const int & i){return i;}, true, false, false, false); - std::cout << "\nAddOrg 25 (id1, no parent)\n"; - auto id1 = sys.AddOrg(25, nullptr, 0); - std::cout << "\nAddOrg -10 (id2; parent id1)\n"; - auto id2 = sys.AddOrg(-10, id1, 6); - std::cout << "\nAddOrg 26 (id3; parent id1)\n"; - auto id3 = sys.AddOrg(26, id1, 10); - std::cout << "\nAddOrg 27 (id4; parent id2)\n"; - auto id4 = sys.AddOrg(27, id2, 25); - std::cout << "\nAddOrg 28 (id5; parent id2)\n"; - auto id5 = sys.AddOrg(28, id2, 32); - std::cout << "\nAddOrg 29 (id6; parent id5)\n"; - auto id6 = sys.AddOrg(29, id5, 39); - std::cout << "\nAddOrg 30 (id7; parent id1)\n"; - auto id7 = sys.AddOrg(30, id1, 6); - - - std::cout << "\nRemoveOrg (id2)\n"; + // std::cout << "\nAddOrg 25 (id1, no parent)\n"; + sys.SetUpdate(0); + auto id1 = sys.AddOrg(25, nullptr); + // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; + sys.SetUpdate(6); + auto id2 = sys.AddOrg(-10, id1); + // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; + sys.SetUpdate(10); + auto id3 = sys.AddOrg(26, id1); + // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; + sys.SetUpdate(25); + auto id4 = sys.AddOrg(27, id2); + // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; + sys.SetUpdate(32); + auto id5 = sys.AddOrg(28, id2); + // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; + sys.SetUpdate(39); + auto id6 = sys.AddOrg(29, id5); + // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; + sys.SetUpdate(6); + auto id7 = sys.AddOrg(30, id1); + + + // std::cout << "\nRemoveOrg (id2)\n"; sys.RemoveOrg(id1); sys.RemoveOrg(id2); - double mpd = sys.GetMeanPairwiseDistance(); - std::cout << "Mean Pairwise Distance = " << mpd << "\n"; - - std::cout << "\nAddOrg 31 (id8; parent id7)\n"; - auto id8 = sys.AddOrg(31, id7, 11); - std::cout << "\nAddOrg 32 (id9; parent id8)\n"; - auto id9 = sys.AddOrg(32, id8, 19); + // std::cout << "\nAddOrg 31 (id8; parent id7)\n"; + sys.SetUpdate(11); + auto id8 = sys.AddOrg(31, id7); + // std::cout << "\nAddOrg 32 (id9; parent id8)\n"; + sys.SetUpdate(19); + auto id9 = sys.AddOrg(32, id8); - std::cout << "\nAddOrg 33 (id10; parent id8)\n"; - auto id10 = sys.AddOrg(33, id8, 19); + // std::cout << "\nAddOrg 33 (id10; parent id8)\n"; + auto id10 = sys.AddOrg(33, id8); sys.RemoveOrg(id7); sys.RemoveOrg(id8); sys.RemoveOrg(id10); - - std::cout << "\nAddOrg 34 (id11; parent id9)\n"; - auto id11 = sys.AddOrg(34, id9, 22); - std::cout << "\nAddOrg 35 (id12; parent id10)\n"; - auto id12 = sys.AddOrg(35, id11, 23); + // std::cout << "\nAddOrg 34 (id11; parent id9)\n"; + sys.SetUpdate(22); + auto id11 = sys.AddOrg(34, id9); + // std::cout << "\nAddOrg 35 (id12; parent id10)\n"; + sys.SetUpdate(23); + auto id12 = sys.AddOrg(35, id11); sys.RemoveOrg(id9); - std::cout << "\nAddOrg 36 (id13; parent id12)\n"; - auto id13 = sys.AddOrg(36, id12, 27); - std::cout << "\nAddOrg 37 (id14; parent id13)\n"; - auto id14 = sys.AddOrg(37, id13, 30); + // std::cout << "\nAddOrg 36 (id13; parent id12)\n"; + sys.SetUpdate(27); + auto id13 = sys.AddOrg(36, id12); + // std::cout << "\nAddOrg 37 (id14; parent id13)\n"; + sys.SetUpdate(30); + auto id14 = sys.AddOrg(37, id13); sys.RemoveOrg(id13); - std::cout << "\nAddOrg 38 (id15; parent id14)\n"; - auto id15 = sys.AddOrg(38, id14, 33); + // std::cout << "\nAddOrg 38 (id15; parent id14)\n"; + sys.SetUpdate(33); + auto id15 = sys.AddOrg(38, id14); sys.RemoveOrg(id14); - std::cout << "\nAddOrg 39 (id16; parent id11)\n"; - auto id16 = sys.AddOrg(39, id11, 35); - std::cout << "\nAddOrg 40 (id17; parent id11)\n"; - auto id17 = sys.AddOrg(40, id11, 35); + // std::cout << "\nAddOrg 39 (id16; parent id11)\n"; + sys.SetUpdate(35); + auto id16 = sys.AddOrg(39, id11); + // std::cout << "\nAddOrg 40 (id17; parent id11)\n"; + auto id17 = sys.AddOrg(40, id11); - std::cout << "\nAddOrg 41 (id18; parent id17)\n"; - auto id18 = sys.AddOrg(41, id17, 36); + // std::cout << "\nAddOrg 41 (id18; parent id17)\n"; + sys.SetUpdate(36); + auto id18 = sys.AddOrg(41, id17); std::cout << "\nAddOrg 42 (id19; parent id17)\n"; - auto id19 = sys.AddOrg(42, id17, 37); - REQUIRE(id17->GetTotalOffspring() > 0); + sys.SetUpdate(37); + auto id19 = sys.AddOrg(42, id17); + + CHECK(id17->GetTotalOffspring() > 0); std::cout << "id3 = " << id3 << std::endl; std::cout << "id4 = " << id4 << std::endl; @@ -532,11 +570,14 @@ TEST_CASE("Pointer to systematics", "[evo]") { sys.Delete(); } -TEST_CASE("Test Data Struct", "[evo]") -{ +TEST_CASE("Test Data Struct", "[evo]") { emp::Ptr >> sys; sys.New([](const int & i){return i;}, true, true, true, false); + sys->AddMutationCountDataNode(); + sys->AddVolatilityDataNode(); + sys->AddUniqueTaxaDataNode(); + auto id1 = sys->AddOrg(1, nullptr); id1->GetData().fitness.Add(2); id1->GetData().phenotype = 6; @@ -558,36 +599,79 @@ TEST_CASE("Test Data Struct", "[evo]") id4->GetData().phenotype = 3; auto id5 = sys->AddOrg(5, id4); - id5->GetData().mut_counts["substitution"] = 1; - id5->GetData().fitness.Add(2); - id5->GetData().phenotype = 6; + std::unordered_map muts; + muts["substitution"] = 1; + id5->GetData().RecordMutation(muts); + id5->GetData().RecordFitness(2); + id5->GetData().RecordPhenotype(6); + CHECK(id5->GetData().GetPhenotype() == 6); + CHECK(id5->GetData().GetFitness() == 2); CHECK(CountMuts(id4) == 3); CHECK(CountDeleteriousSteps(id4) == 1); CHECK(CountPhenotypeChanges(id4) == 1); CHECK(CountUniquePhenotypes(id4) == 2); + CHECK(LineageLength(id4) == 3); CHECK(CountMuts(id3) == 5); CHECK(CountDeleteriousSteps(id3) == 1); CHECK(CountPhenotypeChanges(id3) == 0); CHECK(CountUniquePhenotypes(id3) == 1); + CHECK(LineageLength(id3) == 2); CHECK(CountMuts(id5) == 4); CHECK(CountDeleteriousSteps(id5) == 2); CHECK(CountPhenotypeChanges(id5) == 2); CHECK(CountUniquePhenotypes(id5) == 2); + CHECK(LineageLength(id5) == 4); + + CHECK(FindDominant(*sys) == id4); + + sys->GetDataNode("mutation_count")->PullData(); + CHECK(sys->GetDataNode("mutation_count")->GetMean() == Approx(2.8)); + + sys->GetDataNode("volatility")->PullData(); + CHECK(sys->GetDataNode("volatility")->GetMean() == Approx(0.6)); + + sys->GetDataNode("unique_taxa")->PullData(); + CHECK(sys->GetDataNode("unique_taxa")->GetMean() == Approx(1.4)); + sys.Delete(); -} + emp::Ptr> sys2; + sys2.New([](const int & i){return i;}, true, true, true, false); + sys2->AddDeleteriousStepDataNode(); + auto new_tax = sys2->AddOrg(1, nullptr); + new_tax->GetData().RecordFitness(2); + CHECK(new_tax->GetData().GetFitness() == 2); + new_tax->GetData().RecordFitness(4); + CHECK(new_tax->GetData().GetFitness() == 3); + + emp::datastruct::fitness fit_data; + fit_data.RecordFitness(5); + new_tax->SetData(fit_data); + CHECK(new_tax->GetData().GetFitness() == 5); + + auto tax2 = sys2->AddOrg(2, new_tax); + tax2->GetData().RecordFitness(1); + + sys->GetDataNode("deleterious_steps")->PullData(); + CHECK(sys->GetDataNode("deleterious_steps")->GetMean() == Approx(.5)); + + + sys2.Delete(); + + +} TEST_CASE("World systematics integration", "[evo]") { - // std::function, emp::datastruct::mut_landscape_info>>)> setup_phenotype = [](emp::Ptr, emp::datastruct::mut_landscape_info>> tax){ - // tax->GetData().phenotype = emp::Sum(tax->GetInfo()); - // }; + std::function, emp::datastruct::mut_landscape_info>>, emp::vector &)> setup_phenotype = [](emp::Ptr, emp::datastruct::mut_landscape_info>> tax, emp::vector & org){ + tax->GetData().phenotype = emp::Sum(tax->GetInfo()); + }; using systematics_t = emp::Systematics< emp::vector, @@ -602,13 +686,14 @@ TEST_CASE("World systematics integration", "[evo]") { world.SetMutFun([](emp::vector & org, emp::Random & r){return 0;}); - // world.GetSystematics().OnNew(setup_phenotype); + sys->OnNew(setup_phenotype); world.InjectAt(emp::vector({1,2,3}), 0); - sys->GetTaxonAt(0)->GetData().RecordPhenotype(6); - sys->GetTaxonAt(0)->GetData().RecordFitness(2); + CHECK(sys->GetTaxonAt(0)->GetData().phenotype == 6); + sys->GetTaxonAt(0)->GetData().RecordPhenotype(10); + CHECK(sys->GetTaxonAt(0)->GetData().phenotype == 10); - REQUIRE(sys->GetTaxonAt(0)->GetData().phenotype == 6); + sys->GetTaxonAt(0)->GetData().RecordFitness(2); std::unordered_map mut_counts; mut_counts["substitution"] = 3; @@ -617,10 +702,10 @@ TEST_CASE("World systematics integration", "[evo]") { auto old_taxon = sys->GetTaxonAt(0); world.DoBirth(new_org,0); - REQUIRE(old_taxon->GetNumOrgs() == 0); - REQUIRE(old_taxon->GetNumOff() == 1); - REQUIRE(sys->GetTaxonAt(0)->GetParent()->GetData().phenotype == 6); - REQUIRE((*sys->GetActive().begin())->GetNumOrgs() == 1); + CHECK(old_taxon->GetNumOrgs() == 0); + CHECK(old_taxon->GetNumOff() == 1); + CHECK(sys->GetTaxonAt(0)->GetParent()->GetData().phenotype == 10); + CHECK((*sys->GetActive().begin())->GetNumOrgs() == 1); } @@ -629,35 +714,64 @@ emp::DataFile AddDominantFile(WORLD_TYPE & world){ using mut_count_t [[maybe_unused]] = std::unordered_map; using data_t = emp::datastruct::mut_landscape_info>; using org_t = emp::AvidaGP; - using systematics_t = emp::Systematics; + using systematics_t = emp::Systematics; - auto & file = world.SetupFile("dominant.csv"); - - std::function get_update = [&world](){return world.GetUpdate();}; - std::function dom_mut_count = [&world](){ - return CountMuts(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); - }; - std::function dom_del_step = [&world](){ - return CountDeleteriousSteps(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); - }; - std::function dom_phen_vol = [&world](){ - return CountPhenotypeChanges(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); - }; - std::function dom_unique_phen = [&world](){ - return CountUniquePhenotypes(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); - }; + auto & file = world.SetupFile("dominant.csv"); - - file.AddFun(get_update, "update", "Update"); - file.AddFun(dom_mut_count, "dominant_mutation_count", "sum of mutations along dominant organism's lineage"); - file.AddFun(dom_del_step, "dominant_deleterious_steps", "count of deleterious steps along dominant organism's lineage"); - file.AddFun(dom_phen_vol, "dominant_phenotypic_volatility", "count of changes in phenotype along dominant organism's lineage"); - file.AddFun(dom_unique_phen, "dominant_unique_phenotypes", "count of unique phenotypes along dominant organism's lineage"); - file.PrintHeaderKeys(); - return file; + std::function get_update = [&world](){return world.GetUpdate();}; + std::function dom_mut_count = [&world](){ + emp::Ptr> sys = world.GetSystematics(0); + emp::Ptr full_sys = sys.DynamicCast(); + if (full_sys->GetNumActive() > 0) { + return emp::CountMuts(emp::FindDominant(*full_sys)); + } + return 0; + }; + std::function dom_del_step = [&world](){ + emp::Ptr> sys = world.GetSystematics(0); + emp::Ptr full_sys = sys.DynamicCast(); + if (full_sys->GetNumActive() > 0) { + return emp::CountDeleteriousSteps(emp::FindDominant(*full_sys)); + } + return 0; + }; + std::function dom_phen_vol = [&world](){ + emp::Ptr> sys = world.GetSystematics(0); + emp::Ptr full_sys = sys.DynamicCast(); + if (full_sys->GetNumActive() > 0) { + return emp::CountPhenotypeChanges(emp::FindDominant(*full_sys)); + } + return 0; + }; + std::function dom_unique_phen = [&world](){ + emp::Ptr> sys = world.GetSystematics(0); + emp::Ptr full_sys = sys.DynamicCast(); + if (full_sys->GetNumActive() > 0) { + return emp::CountUniquePhenotypes(emp::FindDominant(*full_sys)); + } + return 0; + }; + std::function lin_len = [&world](){ + emp::Ptr> sys = world.GetSystematics(0); + emp::Ptr full_sys = sys.DynamicCast(); + if (full_sys->GetNumActive() > 0) { + return emp::LineageLength(emp::FindDominant(*full_sys)); + } + return 0; + }; + + file.AddFun(get_update, "update", "Update"); + file.AddFun(dom_mut_count, "dominant_mutation_count", "sum of mutations along dominant organism's lineage"); + file.AddFun(dom_del_step, "dominant_deleterious_steps", "count of deleterious steps along dominant organism's lineage"); + file.AddFun(dom_phen_vol, "dominant_phenotypic_volatility", "count of changes in phenotype along dominant organism's lineage"); + file.AddFun(dom_unique_phen, "dominant_unique_phenotypes", "count of unique phenotypes along dominant organism's lineage"); + file.AddFun(lin_len, "lineage_length", "number of taxa dominant organism's lineage"); + file.PrintHeaderKeys(); + return file; } +// Integration test for using multiple systematics managers in a world and recording data TEST_CASE("Run world", "[evo]") { using mut_count_t = std::unordered_map; using data_t = emp::datastruct::mut_landscape_info>; @@ -695,6 +809,32 @@ TEST_CASE("Run world", "[evo]") { world.AddSystematics(gene_sys); world.AddSystematics(phen_sys); + std::function, emp::AvidaGP&)> check_update = [&gene_sys, &world](emp::Ptr tax, emp::AvidaGP & org){ + CHECK(tax->GetOriginationTime() == gene_sys->GetUpdate()); + CHECK(tax->GetOriginationTime() == world.GetUpdate()); + CHECK(tax->GetNumOff() == 0); + }; + + gene_sys->OnNew(check_update); + + std::function)> extinction_checks = [&gene_sys, &world](emp::Ptr tax){ + CHECK(tax->GetDestructionTime() == gene_sys->GetUpdate()); + CHECK(tax->GetDestructionTime() == world.GetUpdate()); + CHECK(tax->GetNumOrgs() == 0); + }; + + gene_sys->OnExtinct(extinction_checks); + + std::function)> prune_checks = [&world](emp::Ptr tax){ + CHECK(tax->GetNumOrgs() == 0); + CHECK(tax->GetNumOff() == 0); + CHECK(tax->GetOriginationTime() <= world.GetUpdate()); + CHECK(tax->GetDestructionTime() <= world.GetUpdate()); + }; + + gene_sys->OnPrune(prune_checks); + + emp::Signal on_mutate_sig; ///< Trigger signal before organism gives birth. emp::Signal record_fit_sig; ///< Trigger signal before organism gives birth. emp::Signal)> record_phen_sig; ///< Trigger signal before organism gives birth. @@ -711,9 +851,12 @@ TEST_CASE("Run world", "[evo]") { world.GetSystematics(1).Cast()->GetTaxonAt(pos)->GetData().RecordPhenotype(phen); }); - // world.OnOrgPlacement([&last_mutation, &world](size_t pos){ - // world.GetSystematics(0).Cast()->GetTaxonAt(pos)->GetData().RecordMutation(last_mutation); - // }); + emp::Ptr> sys0 = world.GetSystematics(0); + emp::Ptr sys0_cast = sys0.DynamicCast(); + std::function, emp::AvidaGP&)> capture_mut_fun = [&last_mutation](emp::Ptr tax, emp::AvidaGP & org){ + tax->GetData().RecordMutation(last_mutation); + }; + sys0_cast->OnNew(capture_mut_fun); world.SetupSystematicsFile().SetTimingRepeat(1); world.SetupFitnessFile().SetTimingRepeat(1); @@ -721,7 +864,7 @@ TEST_CASE("Run world", "[evo]") { emp::AddPhylodiversityFile(world, 0, "genotype_phylodiversity.csv").SetTimingRepeat(1); emp::AddPhylodiversityFile(world, 1, "phenotype_phylodiversity.csv").SetTimingRepeat(1); emp::AddLineageMutationFile(world).SetTimingRepeat(1); - // AddDominantFile(world).SetTimingRepeat(1); + AddDominantFile(world).SetTimingRepeat(1); // emp::AddMullerPlotFile(world).SetTimingOnce(1); @@ -760,15 +903,7 @@ TEST_CASE("Run world", "[evo]") { world.SetFitFun(fit_fun); - // emp::vector< std::function > fit_set(16); - // for (size_t out_id = 0; out_id < 16; out_id++) { - // // Setup the fitness function. - // fit_set[out_id] = [out_id](const emp::AvidaGP & org) { - // return (double) -std::abs(org.GetOutput((int)out_id) - (double) (out_id * out_id)); - // }; - // } - - // Build a random initial popoulation. + // Build a random initial population. for (size_t i = 0; i < 1; i++) { emp::AvidaGP cpu; cpu.PushRandom(random, 20); @@ -785,47 +920,34 @@ TEST_CASE("Run world", "[evo]") { // Update the status of all organisms. world.ResetHardware(); world.Process(200); - double fit0 = world.CalcFitnessID(0); - std::cout << (ud+1) << " : " << 0 << " : " << fit0 << std::endl; + TournamentSelect(world, 2, 100); - // Keep the best individual. - EliteSelect(world, 1, 1); - - // Run a tournament for the rest... - TournamentSelect(world, 2, 99); - // LexicaseSelect(world, fit_set, POP_SIZE-1); - // EcoSelect(world, fit_fun, fit_set, 100, 5, POP_SIZE-1); for (size_t i = 0; i < world.GetSize(); i++) { record_fit_sig.Trigger(i, world.CalcFitnessID(i)); record_phen_sig.Trigger(i, phen_fun(world.GetOrg(i))); } world.Update(); - + CHECK(world.GetUpdate() == gene_sys->GetUpdate()); + CHECK(world.GetUpdate() == phen_sys->GetUpdate()); + CHECK(gene_sys->GetTaxonAt(0)->GetOriginationTime() <= world.GetUpdate()); } - - // std::cout << std::endl; - // world[0].PrintGenome(); - // std::cout << std::endl; - // for (int i = 0; i < 16; i++) { - // std::cout << i << ":" << world[0].GetOutput(i) << " "; - // } - // std::cout << std::endl; } - - -TEST_CASE("Test GetCanopy", "[evo]") -{ +TEST_CASE("Test GetCanopy", "[evo]") { emp::Systematics sys([](const int & i){return i;}, true, true, true, false); - auto id1 = sys.AddOrg(1, nullptr, 0); - auto id2 = sys.AddOrg(2, id1, 2); - auto id3 = sys.AddOrg(3, id1, 3); - auto id4 = sys.AddOrg(4, id2, 3); + sys.SetUpdate(0); + auto id1 = sys.AddOrg(1, nullptr); + sys.SetUpdate(2); + auto id2 = sys.AddOrg(2, id1); + sys.SetUpdate(3); + auto id3 = sys.AddOrg(3, id1); + auto id4 = sys.AddOrg(4, id2); - sys.RemoveOrg(id1, 3); - sys.RemoveOrg(id2, 5); + sys.RemoveOrg(id1); + sys.SetUpdate(5); + sys.RemoveOrg(id2); auto can_set = sys.GetCanopyExtantRoots(4); @@ -842,7 +964,8 @@ TEST_CASE("Test GetCanopy", "[evo]") CHECK(Has(can_set, id1)); CHECK(Has(can_set, id2)); - sys.RemoveOrg(id3, 7); + sys.SetUpdate(7); + sys.RemoveOrg(id3); can_set = sys.GetCanopyExtantRoots(2); @@ -852,10 +975,14 @@ TEST_CASE("Test GetCanopy", "[evo]") CHECK(can_set.size() == 1); CHECK(Has(can_set, id2)); - auto id5 = sys.AddOrg(5, id4, 8); - sys.RemoveOrg(id4, 9); - auto id6 = sys.AddOrg(6, id5, 10); - sys.RemoveOrg(id5, 11); + sys.SetUpdate(8); + auto id5 = sys.AddOrg(5, id4); + sys.SetUpdate(9); + sys.RemoveOrg(id4); + sys.SetUpdate(10); + auto id6 = sys.AddOrg(6, id5); + sys.SetUpdate(11); + sys.RemoveOrg(id5); can_set = sys.GetCanopyExtantRoots(7); // Should only be 4 @@ -867,16 +994,20 @@ TEST_CASE("Test GetCanopy", "[evo]") CHECK(can_set.size() == 1); CHECK(Has(can_set, id5)); - - auto id7 = sys.AddOrg(7, id6, 12); - auto id8 = sys.AddOrg(8, id7, 13); - auto id9 = sys.AddOrg(9, id8, 14); - auto id10 = sys.AddOrg(10, id9, 15); - - sys.RemoveOrg(id6, 20); - sys.RemoveOrg(id7, 20); - sys.RemoveOrg(id8, 20); - sys.RemoveOrg(id9, 20); + sys.SetUpdate(12); + auto id7 = sys.AddOrg(7, id6); + sys.SetUpdate(13); + auto id8 = sys.AddOrg(8, id7); + sys.SetUpdate(14); + auto id9 = sys.AddOrg(9, id8); + sys.SetUpdate(15); + auto id10 = sys.AddOrg(10, id9); + + sys.SetUpdate(20); + sys.RemoveOrg(id6); + sys.RemoveOrg(id7); + sys.RemoveOrg(id8); + sys.RemoveOrg(id9); can_set = sys.GetCanopyExtantRoots(22); // Should only be 10 @@ -905,13 +1036,6 @@ TEST_CASE("Test GetCanopy", "[evo]") CHECK(can_set.size() == 1); CHECK(Has(can_set, id5)); - - // auto id5 = sys.AddOrg(28, id2, 32); - // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; - // auto id6 = sys.AddOrg(29, id5, 39); - // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; - // auto id7 = sys.AddOrg(30, id1, 6); - } // Tests from Shao 1990 tree balance paper @@ -1081,3 +1205,234 @@ TEST_CASE("Tree balance", "[evo]") { CHECK(treecl.SackinIndex() == 18); CHECK(treecl.CollessLikeIndex() == Approx(1.746074)); } + +// Test that MRCA is properly updated when the MRCA is alive and then dies, +// causing a new taxon to be MRCA +TEST_CASE("Dieing MRCA", "[evo]") { + emp::Systematics tree([](const int & i){return i;}, true, true, false, false); + CHECK(!tree.GetTrackSynchronous()); + + // std::cout << "\nAddOrg 25 (id1, no parent)\n"; + tree.SetUpdate(0); + auto id1 = tree.AddOrg(25, nullptr); + // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; + tree.SetUpdate(6); + auto id2 = tree.AddOrg(-10, id1); + // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; + tree.SetUpdate(10); + auto id3 = tree.AddOrg(26, id1); + // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; + tree.SetUpdate(25); + auto id4 = tree.AddOrg(27, id2); + // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; + tree.SetUpdate(32); + auto id5 = tree.AddOrg(28, id2); + // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; + tree.SetUpdate(39); + auto id6 = tree.AddOrg(29, id5); + // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; + tree.SetUpdate(6); + auto id7 = tree.AddOrg(30, id1); + + CHECK(tree.GetMRCA() == id1); + tree.RemoveOrg(id7); + tree.RemoveOrg(id3); + tree.RemoveOrg(id2); + CHECK(tree.GetMRCA() == id1); + tree.RemoveOrg(id1); + CHECK(tree.GetMRCA() == id2); + tree.RemoveOrg(id4); + CHECK(tree.GetMRCA() == id5); + tree.RemoveOrg(id5); + CHECK(tree.GetMRCA() == id6); +} + +TEST_CASE("Test RemoveBefore", "[Evolve]") { + emp::Systematics sys([](const int & i){return i;}, true, true, false, false); + + // std::cout << "\nAddOrg 25 (id1, no parent)\n"; + sys.SetUpdate(0); + auto id1 = sys.AddOrg(25, nullptr); + // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; + sys.SetUpdate(6); + auto id2 = sys.AddOrg(-10, id1); + // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; + sys.SetUpdate(10); + auto id3 = sys.AddOrg(26, id1); + // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; + sys.SetUpdate(25); + auto id4 = sys.AddOrg(27, id2); + // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; + sys.SetUpdate(32); + auto id5 = sys.AddOrg(28, id2); + // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; + sys.SetUpdate(39); + auto id6 = sys.AddOrg(29, id5); + // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; + sys.SetUpdate(6); + auto id7 = sys.AddOrg(30, id1); + sys.SetUpdate(33); + auto id8 = sys.AddOrg(2, id3); + auto id9 = sys.AddOrg(4, id8); + sys.SetUpdate(34); + auto id10 = sys.AddOrg(5, id9); + + sys.SetUpdate(40); + sys.RemoveOrg(id1); + sys.SetUpdate(41); + sys.RemoveOrg(id2); + sys.SetUpdate(40); + sys.RemoveOrg(id9); + sys.SetUpdate(60); + sys.RemoveOrg(id8); + + CHECK(emp::Has(sys.GetAncestors(), id1)); + CHECK(emp::Has(sys.GetAncestors(), id2)); + + sys.RemoveBefore(50); + + CHECK(!emp::Has(sys.GetAncestors(), id1)); + CHECK(!emp::Has(sys.GetAncestors(), id2)); + CHECK(emp::Has(sys.GetAncestors(), id9)); + CHECK(emp::Has(sys.GetActive(), id3)); + CHECK(emp::Has(sys.GetActive(), id4)); + CHECK(emp::Has(sys.GetActive(), id5)); + CHECK(emp::Has(sys.GetActive(), id6)); + CHECK(emp::Has(sys.GetActive(), id7)); + CHECK(emp::Has(sys.GetAncestors(), id8)); + + sys.RemoveBefore(70); + CHECK(!emp::Has(sys.GetActive(), id8)); + CHECK(!emp::Has(sys.GetActive(), id9)); + +} + +TEST_CASE("Test Snapshot", "[Evolve]") { + emp::Systematics sys([](const int & i){return i;}, true, true, true, false); + + sys.SetUpdate(0); + auto id1 = sys.AddOrg(25, nullptr); + sys.SetUpdate(6); + auto id2 = sys.AddOrg(-10, id1); + sys.SetUpdate(10); + auto id3 = sys.AddOrg(26, id1); + sys.SetUpdate(25); + auto id4 = sys.AddOrg(27, id2); + sys.SetUpdate(32); + auto id5 = sys.AddOrg(28, id2); + sys.SetUpdate(39); + auto id6 = sys.AddOrg(29, id5); + sys.SetUpdate(6); + auto id7 = sys.AddOrg(30, id1); + sys.SetUpdate(33); + auto id8 = sys.AddOrg(2, id3); + auto id9 = sys.AddOrg(4, id8); + sys.SetUpdate(34); + auto id10 = sys.AddOrg(5, id9); + + sys.SetUpdate(40); + sys.RemoveOrg(id1); + sys.SetUpdate(41); + sys.RemoveOrg(id2); + sys.SetUpdate(40); + sys.RemoveOrg(id9); + sys.SetUpdate(60); + sys.RemoveOrg(id8); + sys.RemoveOrg(id10); + + sys.AddSnapshotFun([](const emp::Taxon & t){return std::to_string(t.GetInfo());}, "genome", "genome"); + sys.Snapshot("systematics_snapshot.csv"); + + // TODO: Would be nice to compare this to existing snapshot file, but lines could be in any order +} + +TEST_CASE("Test Prune", "[Evolve]") { + emp::Systematics sys([](const int & i){return i;}, true, true, false, false); + + int prunes = 0; + std::function >)> prune_fun = [&prunes](emp::Ptr> tax){prunes++;}; + sys.OnPrune(prune_fun); + + sys.SetUpdate(0); + auto id1 = sys.AddOrg(25, nullptr); + sys.SetUpdate(6); + auto id2 = sys.AddOrg(-10, id1); + sys.SetUpdate(10); + auto id3 = sys.AddOrg(26, id1); + sys.SetUpdate(25); + auto id4 = sys.AddOrg(27, id2); + sys.SetUpdate(32); + auto id5 = sys.AddOrg(28, id2); + sys.SetUpdate(39); + auto id6 = sys.AddOrg(29, id5); + sys.SetUpdate(6); + auto id7 = sys.AddOrg(30, id1); + sys.SetUpdate(33); + auto id8 = sys.AddOrg(2, id3); + auto id9 = sys.AddOrg(4, id8); + sys.SetUpdate(34); + auto id10 = sys.AddOrg(5, id9); + auto id11 = sys.AddOrg(5, id3); + + sys.SetUpdate(40); + sys.RemoveOrg(id1); + sys.RemoveOrg(id2); + sys.RemoveOrg(id3); + sys.RemoveOrg(id8); + sys.RemoveOrg(id9); + + CHECK(sys.GetMRCA() == id1); + + CHECK(prunes == 0); + CHECK(Has(sys.GetAncestors(), id9)); + sys.RemoveOrg(id10); + CHECK(prunes == 3); + CHECK(!Has(sys.GetAncestors(), id9)); + CHECK(Has(sys.GetAncestors(), id3)); + + sys.RemoveOrg(id11); + CHECK(prunes == 5); + CHECK(!Has(sys.GetAncestors(), id3)); + CHECK(sys.GetMRCA() == id1); + + sys.RemoveOrg(id7); + CHECK(prunes == 6); + CHECK(sys.GetMRCA() == id2); +} + +TEST_CASE("Test tracking position", "[Evolve]") { + emp::Systematics sys([](const int & i){return i;}, true, true, true, true); + + sys.SetUpdate(0); + auto id1 = sys.AddOrg(25, {0,0}, nullptr); + sys.SetUpdate(6); + auto id2 = sys.AddOrg(-10, {1,0}, id1); + CHECK(sys.Parent(id2) == id1); + sys.SetNextParent(id1); + sys.SetUpdate(10); + sys.AddOrg(26, {2,0}); + auto id3 = sys.GetMostRecent(); + CHECK(id3->GetParent() == id1); + CHECK(id3->GetInfo() == 26); + CHECK(id3->GetOriginationTime() == 10); + sys.SetNextParent({1,0}); + sys.SetUpdate(25); + sys.AddOrg(27, {3,0}); + auto id4 = sys.GetMostRecent(); + CHECK(id4->GetParent() == id2); + CHECK(id4->GetInfo() == 27); + CHECK(id4->GetOriginationTime() == 25); + + sys.SetUpdate(40); + sys.RemoveOrg({0,0}); + CHECK(id1->GetDestructionTime() == 40); + CHECK(id1->GetNumOrgs() == 0); + + sys.RemoveOrgAfterRepro(id4); + CHECK(!Has(sys.GetAncestors(), id4)); + sys.SetUpdate(34); + auto id5 = sys.AddOrg(88, {4,0}, id4); + CHECK(id4->GetNumOrgs() == 0); + CHECK(id4->GetNumOff() == 1); + CHECK(Has(sys.GetAncestors(), id4)); +} From 29cef025f4d0be21135549b30e7d2aae532840c7 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 02:36:08 -0400 Subject: [PATCH 40/80] Eliminate doxygen warnings --- Doxyfile | 2 +- doc/filter_namespace | 13 +++---- include/emp/Evolve/Systematics.hpp | 42 ++++++++++++---------- include/emp/Evolve/SystematicsAnalysis.hpp | 3 +- include/emp/Evolve/World.hpp | 6 ++-- include/emp/base/vector.hpp | 5 +++ include/emp/bits/BitArray.hpp | 4 +-- include/emp/config/SettingConfig.hpp | 2 +- include/emp/data/DataFile.hpp | 12 ++++--- include/emp/datastructs/QueueCache.hpp | 2 ++ include/emp/datastructs/StringMap.hpp | 2 +- include/emp/datastructs/set_utils.hpp | 34 +++++++++--------- include/emp/datastructs/vector_utils.hpp | 5 +-- include/emp/hardware/EventDrivenGP.hpp | 5 ++- include/emp/hardware/InstLib.hpp | 8 +++-- include/emp/hardware/signalgp_utils.hpp | 7 ++-- include/emp/math/Fraction.hpp | 3 +- include/emp/prefab/ConfigPanel.hpp | 3 ++ include/emp/prefab/ReadoutPanel.hpp | 3 ++ include/emp/prefab/ValueBox.hpp | 18 ++++++++-- include/emp/tools/string_utils.hpp | 5 ++- include/emp/web/Animate.hpp | 2 ++ include/emp/web/Attributes.hpp | 1 + include/emp/web/Table.hpp | 3 +- include/emp/web/_MochaTestRunner.hpp | 12 +++---- include/emp/web/canvas_utils.hpp | 31 +++++++++++++--- include/emp/web/commands.hpp | 2 ++ include/emp/web/d3/d3_init.hpp | 8 ++--- include/emp/web/js_utils.hpp | 8 +++-- 29 files changed, 162 insertions(+), 89 deletions(-) diff --git a/Doxyfile b/Doxyfile index 05856f414a..229c101fed 100644 --- a/Doxyfile +++ b/Doxyfile @@ -891,7 +891,7 @@ WARN_IF_UNDOC_ENUM_VAL = NO # Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. -WARN_AS_ERROR = NO +WARN_AS_ERROR = FAIL_ON_WARNINGS_PRINT # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which diff --git a/doc/filter_namespace b/doc/filter_namespace index c807bb6e33..97f3d09542 100755 --- a/doc/filter_namespace +++ b/doc/filter_namespace @@ -4,7 +4,7 @@ import sys with open(sys.argv[1]) as infile: open_braces = 0 - namespace_removed = 0 + bracket_counts = [] for line in infile: line = line.strip() if line.startswith("namespace emp {") or \ @@ -12,14 +12,15 @@ with open(sys.argv[1]) as infile: line.startswith("namespace prefab {") or \ line.startswith("namespace emp::prefab {") or \ line.startswith("namespace evo {"): - namespace_removed += 1 - open_braces = 1 + open_braces += 1 + bracket_counts.append(open_braces) print() - elif namespace_removed and line == "}": + elif bracket_counts and bracket_counts[-1] == open_braces and line == "}": print() - namespace_removed -= 1 + open_braces -= 1 + bracket_counts.pop() else: - if namespace_removed: + if bracket_counts: open_braces += line.count("{") open_braces -= line.count("}") line = line.replace("emp::", "") diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index f13cc3c649..c49d8df89a 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1,9 +1,10 @@ -/** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 - * - * @file Systematics.hpp +/* + * note: This file is part of Empirical, https://github.com/devosoft/Empirical + * copyright: Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2017-2023 + */ + /** + * @file * @brief Track genotypes, species, clades, or lineages of organisms in a world. * * @@ -80,13 +81,14 @@ namespace emp { /// Maps a string representing a type of mutation to a count representing /// the number of that type of mutation that occurred to bring about this taxon. template - struct mut_landscape_info { + class mut_landscape_info { using phen_t = PHEN_TYPE; using has_phen_t = std::true_type; using has_mutations_t = std::true_type; using has_fitness_t = std::true_type; // using has_phenotype_t = true; + public: std::unordered_map mut_counts = {}; /// The number of mutations of each type that occurred to make this taxon DataNode fitness; /// This taxon's fitness (for assessing deleterious mutational steps) PHEN_TYPE phenotype; /// This taxon's phenotype (for assessing phenotypic change) @@ -131,7 +133,7 @@ namespace emp { } /// @brief A Taxon represents a type of organism in a phylogeny. - /// @param ORG_INFO The information type associated with an organism, used to categorize it. + /// @tparam ORG_INFO The information type associated with an organism, used to categorize it. /// /// Genotypes are the most commonly used Taxon; in general taxa can be anything from a shared /// genome sequence, a phenotypic trait, or a even a position in the world (if you want to @@ -384,7 +386,7 @@ namespace emp { /// Add a data node to this systematics manager /// @param name the name of the data node (so it can be found later) - /// @param pull_set_fun a function to run when the data node is requested to pull data (returns single value) + /// @param pull_fun a function to run when the data node is requested to pull data (returns single value) data_ptr_t AddDataNode(std::function pull_fun, const std::string & name) { emp_assert(!data_nodes.HasNode(name)); auto node = AddDataNode(name); @@ -561,6 +563,7 @@ namespace emp { /** * Contructor for Systematics; controls what information should be stored. + * @param calc_taxon Function that should be run on organism to determine which taxon it belongs to * @param store_active Should living organisms' taxa be tracked? (typically yes!) * @param store_ancestors Should ancestral organisms' taxa be maintained? (yes for lineages!) * @param store_all Should all dead taxa be maintained? (typically no; it gets BIG!) @@ -595,11 +598,13 @@ namespace emp { /// Add information about a new organism, including its stored info and parent's taxon; /// If you would like the systematics manager to track taxon age, you can also supply /// the update at which the taxon is being added. - /// return a pointer for the associated taxon. - /// @returns a pointer for the associated taxon. - /// @param org a reference to the organism being added - /// @param pos the position of the organism being added - /// @param parent a pointer to the org's parent + /// The new organism is always passed as a reference to the organism being added. + /// If positions are being tracked, the new organism's position in the world should + /// be passed as the second argument. + /// The parent can either be passed as a world position (if positions are being tracked), + /// or as a pointer to the organism's parent. + /// Versions of AddOrg that take a pointer to a parent return a pointer for the taxon associated + /// with the new organism. void AddOrg(ORG && org, WorldPosition pos); void AddOrg(ORG && org, WorldPosition pos, WorldPosition parent); Ptr AddOrg(ORG && org, WorldPosition pos, Ptr parent); @@ -611,13 +616,12 @@ namespace emp { Ptr AddOrg(ORG & org, Ptr parent=nullptr); ///@} - ///@{ /// Remove an instance of an organism; track when it's gone. /// @param pos the world position of the individual being removed - /// @param taxon a pointer to the taxon of the individual being removed bool RemoveOrg(WorldPosition pos); + /// Remove an instance of an organism; track when it's gone. + /// @param taxon a pointer to the taxon of the individual being removed bool RemoveOrg(Ptr taxon); - ///@} ///@{ /// Mark an instance of a taxon to be removed; track when it's gone. @@ -628,8 +632,8 @@ namespace emp { /// mark the taxon as extinct when it is actually continuing. /// By using this method, the taxon won't be removed until after the /// next org is added or the next time an org is marked for removal. - /// @param pos the world position of the individual being removed - /// @param taxon a pointer to the taxon of the individual being removed + /// Individual can either be specified as the world position of the individual being removed + /// or as a pointer to the taxon of the individual being removed void RemoveOrgAfterRepro(WorldPosition pos); void RemoveOrgAfterRepro(Ptr taxon); ///@} diff --git a/include/emp/Evolve/SystematicsAnalysis.hpp b/include/emp/Evolve/SystematicsAnalysis.hpp index 9113250279..029448d194 100644 --- a/include/emp/Evolve/SystematicsAnalysis.hpp +++ b/include/emp/Evolve/SystematicsAnalysis.hpp @@ -22,6 +22,7 @@ namespace emp { /// @returns the taxon with the highest fitness out of any active taxon /// in the given systematics manager. + /// @tparam systematics_t The type of the systematics manager containing the phylogeny to analyze. /// @param s the systematics manager to search in. Must have more than 0 active taxa. template Ptr FindDominant(systematics_t & s) { @@ -59,7 +60,7 @@ namespace emp { /// simultaneous mutations of the same type as one event) /// @param type string corresponding to a type of mutation. /// Must be in the mut_counts dictionary (i.e. the dictionary - /// passed in when \ref mut_landscape_info::RecordMutation was called) + /// passed in when \ref datastruct::mut_landscape_info::RecordMutation was called) /// @param taxon a pointer to a taxon to count mutation steps for. /// Must have a DATA_TYPE that supports mutation tracking /// (e.g. mut_landscape_info) diff --git a/include/emp/Evolve/World.hpp b/include/emp/Evolve/World.hpp index 0ecd68bd92..db8838ada6 100644 --- a/include/emp/Evolve/World.hpp +++ b/include/emp/Evolve/World.hpp @@ -366,8 +366,8 @@ namespace emp { return *(pop[id]); } - /// Retrieve a const reference to the organsim as the specified x,y coordinates. - /// @CAO: Technically, we should set this up with any number of coordinates. + /// Retrieve a const reference to the organism as the specified x,y coordinates. + // @CAO: Technically, we should set this up with any number of coordinates. ORG & GetOrg(size_t x, size_t y) { return GetOrg(x+y*GetWidth()); } /// Retrive a pointer to the contents of a specified cell; will be nullptr if the cell is @@ -942,7 +942,6 @@ namespace emp { }; - #ifndef DOXYGEN_SHOULD_SKIP_THIS // ============================================================= // === === // === Out-of-class member function definitions from above === @@ -1736,7 +1735,6 @@ namespace emp { os << std::endl; } } - #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_EVOLVE_WORLD_HPP_INCLUDE diff --git a/include/emp/base/vector.hpp b/include/emp/base/vector.hpp index 7cdff21de9..b4021ed086 100644 --- a/include/emp/base/vector.hpp +++ b/include/emp/base/vector.hpp @@ -270,8 +270,13 @@ namespace emp { }; /// Build a specialized debug wrapper for emp::vector + #ifndef DOXYGEN_SHOULD_SKIP_THIS template class vector : public std::vector { + #else + template + class vector { + #endif private: using this_t = emp::vector; using stdv_t = std::vector; diff --git a/include/emp/bits/BitArray.hpp b/include/emp/bits/BitArray.hpp index 52a833e7a0..05e38d4d7a 100644 --- a/include/emp/bits/BitArray.hpp +++ b/include/emp/bits/BitArray.hpp @@ -38,8 +38,8 @@ namespace emp { /// A fixed-sized (but arbitrarily large) array of bits, and optimizes operations on those bits /// to be as fast as possible. - /// @param NUM_BITS is the fixed number of bits in this BitArray. - /// @param ZERO_LEFT indicates the side that bit zero will be located. + /// @tparam NUM_BITS is the fixed number of bits in this BitArray. + /// @tparam ZERO_LEFT indicates the side that bit zero will be located. template class BitArray { diff --git a/include/emp/config/SettingConfig.hpp b/include/emp/config/SettingConfig.hpp index 298a3300db..bb1150e9a5 100644 --- a/include/emp/config/SettingConfig.hpp +++ b/include/emp/config/SettingConfig.hpp @@ -382,7 +382,7 @@ namespace emp { } /// Convert all of the current values into a comma-separated string. - std::string CurComboString(const std::string & separator=",", + std::string CurComboString(const std::string & separator=",", ///< Delimiter separating values in string bool use_labels=false, ///< Print name with each value? bool multi_only=false ///< Only print values that can change? ) const { diff --git a/include/emp/data/DataFile.hpp b/include/emp/data/DataFile.hpp index 150911fe28..876b5e1be5 100644 --- a/include/emp/data/DataFile.hpp +++ b/include/emp/data/DataFile.hpp @@ -63,8 +63,11 @@ namespace emp { , line_begin(b), line_spacer(s), line_end(e) { ; } DataFile(std::ostream & in_os, const std::string & b="", const std::string & s=",", const std::string & e="\n") - : filename(), os(&in_os), funs(), pre_funs(), keys(), descs(), timing_fun([](size_t){return true;}) - , line_begin(b), line_spacer(s), line_end(e) { ; } + : filename(), os(&in_os), funs(), pre_funs(), keys(), descs(), timing_fun( + #ifndef DOXYGEN_SHOULD_SKIP_THIS + [](size_t){return true;} + #endif + ), line_begin(b), line_spacer(s), line_end(e) { ; } DataFile(const DataFile &) = default; DataFile(DataFile &&) = default; @@ -89,9 +92,10 @@ namespace emp { /// Setup this file to print only once, at the specified update. Note that this timing /// function can be replaced at any time, even after being triggered. + /// @param print_time The update the file should print at void SetTimingOnce(size_t print_time) { - timing_fun = [print_time](size_t update) { return update == print_time; }; - } + timing_fun = [print_time](size_t update) { return update == print_time; }; + } /// Setup this file to print every 'step' updates. void SetTimingRepeat(size_t step) { diff --git a/include/emp/datastructs/QueueCache.hpp b/include/emp/datastructs/QueueCache.hpp index a87b484a51..e13706d3b4 100644 --- a/include/emp/datastructs/QueueCache.hpp +++ b/include/emp/datastructs/QueueCache.hpp @@ -41,6 +41,7 @@ // maximum number of elements the cache can hold size_t capacity; + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Put the iterator at the beginning of the list, and returns its value // @param it Iterator to element to update // @return Reference to value of updated element @@ -53,6 +54,7 @@ ); return it->second; } + #endif // DOXYGEN_SHOULD_SKIP_THIS // Shrink cache to its capacity by removing elements at the end of it void Shrink() { diff --git a/include/emp/datastructs/StringMap.hpp b/include/emp/datastructs/StringMap.hpp index fb238ca67f..6eb9244435 100644 --- a/include/emp/datastructs/StringMap.hpp +++ b/include/emp/datastructs/StringMap.hpp @@ -12,7 +12,7 @@ * desginated type. It is more powerful than std::unordered_map because it will accept strings wrapped in * the EMP_STRING_ID macro, which is hashed at compile-time instead of run-time. * - * @CO2: + * \@CO2: * StringMap = PAdictionary (PA = Perfectly accurate) * StringMap = HIDL (HIDL = having an identification of linking) * SMID = String.Map…e112th][string (SMID = StringMap identification) diff --git a/include/emp/datastructs/set_utils.hpp b/include/emp/datastructs/set_utils.hpp index feab36e3a5..e95a22430e 100644 --- a/include/emp/datastructs/set_utils.hpp +++ b/include/emp/datastructs/set_utils.hpp @@ -39,7 +39,7 @@ namespace emp { template bool Has(const std::unordered_set & s, const V & val) { return s.count(val); } - /// Test if an std::unordere_multiset has a particular element without modifying the set in any way. + /// Test if an std::unordered_multiset has a particular element without modifying the set in any way. template bool Has(const std::unordered_multiset & s, const V & val) { return s.count(val); } @@ -47,7 +47,7 @@ namespace emp { // by reference and vectors are passed by value, because these functions only work // on sorted data. Therefore, vectors must be sorted first, which happens in place. - /// Compute the set difference of @param s1 and @param s2 (elements that are in S1 but no S2) + /// Compute the set difference of s1 and s2 (elements that are in S1 but no S2) template std::set difference(std::set & s1, std::set & s2) { // Based on PierreBdR's answer to https://stackoverflow.com/questions/283977/c-stl-set-difference @@ -57,7 +57,7 @@ namespace emp { return result; } - /// Compute the set difference of @param s1 and @param s2 (elements that are in S1 but no S2) + /// Compute the set difference of s1 and s2 (elements that are in S1 but no S2) template std::set difference(emp::vector s1, emp::vector s2) { // Based on PierreBdR's answer to https://stackoverflow.com/questions/283977/c-stl-set-difference @@ -70,7 +70,7 @@ namespace emp { return result; } - /// Compute the set difference of @param s1 and @param s2 (elements that are in S1 but not S2) + /// Compute the set difference of s1 and s2 (elements that are in S1 but not S2) template std::set difference(std::set & s1, emp::vector s2) { // Based on PierreBdR's answer to https://stackoverflow.com/questions/283977/c-stl-set-difference @@ -81,7 +81,7 @@ namespace emp { return result; } - /// Compute the set difference of @param s1 and @param s2 (elements that are in S1 but no S2) + /// Compute the set difference of s1 and s2 (elements that are in S1 but no S2) template std::set difference(emp::vector s1, std::set & s2) { // Based on PierreBdR's answer to https://stackoverflow.com/questions/283977/c-stl-set-difference @@ -92,7 +92,7 @@ namespace emp { return result; } - /// Compute the set intersection of @param s1 and @param s2 (elements that are in both S1 and S2) + /// Compute the set intersection of s1 and s2 (elements that are in both S1 and S2) template std::set intersection(std::set & s1, std::set & s2) { std::set result; @@ -101,7 +101,7 @@ namespace emp { return result; } - /// Compute the set intersection of @param s1 and @param s2 (elements that are in both S1 and S2) + /// Compute the set intersection of s1 and s2 (elements that are in both S1 and S2) template std::set intersection(emp::vector s1, emp::vector s2) { std::sort(s1.begin(), s1.end()); // set_intersection expects sorted things @@ -113,7 +113,7 @@ namespace emp { return result; } - /// Compute the set intersection of @param s1 and @param s2 (elements that are in both S1 and S2) + /// Compute the set intersection of s1 and s2 (elements that are in both S1 and S2) template std::set intersection(std::set & s1, emp::vector s2) { std::sort(s2.begin(), s2.end()); // set_intersection expects sorted things @@ -124,7 +124,7 @@ namespace emp { return result; } - /// Compute the set intersection of @param s1 and @param s2 (elements that are in both S1 and S2) + /// Compute the set intersection of s1 and s2 (elements that are in both S1 and S2) template std::set intersection(emp::vector s1, std::set & s2) { std::sort(s1.begin(), s1.end()); // set_intersection expects sorted things @@ -135,7 +135,7 @@ namespace emp { return result; } - /// Compute the set union of @param s1 and @param s2 (elements that are in either S1 or S2) + /// Compute the set union of s1 and s2 (elements that are in either S1 or S2) template std::set set_union(std::set & s1, std::set & s2) { std::set result; @@ -144,7 +144,7 @@ namespace emp { return result; } - /// Compute the set union of @param s1 and @param s2 (elements that are in either S1 or S2) + /// Compute the set union of s1 and s2 (elements that are in either S1 or S2) template std::set set_union(emp::vector s1, emp::vector s2) { std::sort(s1.begin(), s1.end()); // set_union expects sorted things @@ -156,7 +156,7 @@ namespace emp { return result; } - /// Compute the set union of @param s1 and @param s2 (elements that are in either S1 or S2) + /// Compute the set union of s1 and s2 (elements that are in either S1 or S2) template std::set set_union(std::set & s1, emp::vector s2) { std::sort(s2.begin(), s2.end()); // set_union expects sorted things @@ -167,7 +167,7 @@ namespace emp { return result; } - /// Compute the set union of @param s1 and @param s2 (elements that are in either S1 or S2) + /// Compute the set union of s1 and s2 (elements that are in either S1 or S2) template std::set set_union(emp::vector s1, std::set & s2) { std::sort(s1.begin(), s1.end()); // set_union expects sorted things @@ -178,7 +178,7 @@ namespace emp { return result; } - /// Compute the set symmetric_difference of @param s1 and @param s2 (elements that are in either S1 or S2 but not both) + /// Compute the set symmetric_difference of s1 and s2 (elements that are in either S1 or S2 but not both) template std::set symmetric_difference(std::set & s1, std::set & s2) { std::set result; @@ -187,7 +187,7 @@ namespace emp { return result; } - /// Compute the set symmetric_difference of @param s1 and @param s2 (elements that are in either S1 or S2 but not both) + /// Compute the set symmetric_difference of s1 and s2 (elements that are in either S1 or S2 but not both) template std::set symmetric_difference(emp::vector s1, emp::vector s2) { std::sort(s1.begin(), s1.end()); // set_symmetric_difference expects sorted things @@ -199,7 +199,7 @@ namespace emp { return result; } - /// Compute the set symmetric_difference of @param s1 and @param s2 (elements that are in either S1 or S2 but not both) + /// Compute the set symmetric_difference of s1 and s2 (elements that are in either S1 or S2 but not both) template std::set symmetric_difference(std::set & s1, emp::vector s2) { std::sort(s2.begin(), s2.end()); // set_symmetric_difference expects sorted things @@ -210,7 +210,7 @@ namespace emp { return result; } - /// Compute the set symmetric_difference of @param s1 and @param s2 (elements that are in either S1 or S2 but not both) + /// Compute the set symmetric_difference of s1 and s2 (elements that are in either S1 or S2 but not both) template std::set symmetric_difference(emp::vector s1, std::set & s2) { std::sort(s1.begin(), s1.end()); // set_symmetric_difference expects sorted things diff --git a/include/emp/datastructs/vector_utils.hpp b/include/emp/datastructs/vector_utils.hpp index 13cc016fa3..497acc558c 100644 --- a/include/emp/datastructs/vector_utils.hpp +++ b/include/emp/datastructs/vector_utils.hpp @@ -28,11 +28,13 @@ namespace emp { + #ifndef DOXYGEN_SHOULD_SKIP_THIS /// Base case for Append; we just have a single vector with nothing to append. template emp::vector & Append(emp::vector & base) { return base; } + #endif // DOXYGEN_SHOULD_SKIP_THIS /// Append one or more vectors on to the end of an existing vector. template @@ -51,8 +53,7 @@ namespace emp { return Append(base, vs...); } - - /// Concatonate two or more vectors together, creating a new vector. + /// Concatenate two or more vectors together, creating a new vector. template emp::vector Concat(const emp::vector & v1, const Vs &... vs) { emp::vector out_v(v1); diff --git a/include/emp/hardware/EventDrivenGP.hpp b/include/emp/hardware/EventDrivenGP.hpp index 78ff940918..8eeb10f204 100644 --- a/include/emp/hardware/EventDrivenGP.hpp +++ b/include/emp/hardware/EventDrivenGP.hpp @@ -392,7 +392,10 @@ namespace emp { Function( const affinity_t & _aff=affinity_t(), const inst_seq_t & _seq=inst_seq_t(), - std::function _fun_matchbin_refresh=[](){} + std::function _fun_matchbin_refresh + #ifndef DOXYGEN_SHOULD_SKIP_THIS + =[](){} + #endif // DOXYGEN_SHOULD_SKIP_THIS ) : affinity(_aff) , inst_seq(_seq) , fun_matchbin_refresh(_fun_matchbin_refresh) diff --git a/include/emp/hardware/InstLib.hpp b/include/emp/hardware/InstLib.hpp index 15b8a4a592..6c3a3c0dd9 100644 --- a/include/emp/hardware/InstLib.hpp +++ b/include/emp/hardware/InstLib.hpp @@ -28,9 +28,9 @@ namespace emp { enum class ScopeType { NONE=0, ROOT, BASIC, LOOP, FUNCTION }; /// @brief InstLib maintains a set of instructions for use in virtual hardware. - /// @param HARDWARE_T Type of the virtual hardware class to track instructions. - /// @param ARG_T What types of arguments are associated with instructions. - /// @param ARG_COUNT Max number of arguments on an instruction. + /// @tparam HARDWARE_T Type of the virtual hardware class to track instructions. + /// @tparam ARG_T What types of arguments are associated with instructions. + /// @tparam ARG_COUNT Max number of arguments on an instruction. template class InstLib { public: @@ -109,6 +109,8 @@ namespace emp { /// Get the number of instructions in this set. size_t GetSize() const { return inst_lib.size(); } + /// Returns boolean indicating whether the given + /// string is a valid instruction. bool IsInst(const std::string name) const { return Has(name_map, name); } diff --git a/include/emp/hardware/signalgp_utils.hpp b/include/emp/hardware/signalgp_utils.hpp index 449bb79ca8..49f5288b82 100644 --- a/include/emp/hardware/signalgp_utils.hpp +++ b/include/emp/hardware/signalgp_utils.hpp @@ -34,6 +34,7 @@ namespace emp { /// @param unique_from - Other tags that the tag being generated should be unique with respect to. template BitSet GenRandSignalGPTag(emp::Random & rnd, const emp::vector> & unique_from=emp::vector>()) { + #ifndef DOXYGEN_SHOULD_SKIP_THIS using tag_t = BitSet; emp_assert(unique_from.size() < emp::Pow2(TAG_WIDTH), "Tag width is not large enough to be able to guarantee requested number of unique tags"); tag_t new_tag(rnd, 0.5); // Make a random tag. @@ -49,6 +50,7 @@ namespace emp { } } return new_tag; + #endif // DOXYGEN_SHOULD_SKIP_THIS } @@ -218,9 +220,8 @@ namespace emp { /// - Single-instruction substitution (applied per-instruction) /// - Single-instruction insertions and deletions (each applied per-instruction) /// - Instruction-tag bit-flips (applied per-bit) - /// - Instruction-argument substitutions (applied per-argument) - /// NOTE: could use some feedback on this! - /// - Not loving the inconsistency between rates and constraints at the moment. + /// - Instruction-argument substitutions (applied per-argument) NOTE: could use some feedback on this! + /// - Not loving the inconsistency between rates and constraints at the moment. template< size_t TAG_WIDTH, typename TRAIT_T=double, diff --git a/include/emp/math/Fraction.hpp b/include/emp/math/Fraction.hpp index 2271fcbc87..a2596cdab0 100644 --- a/include/emp/math/Fraction.hpp +++ b/include/emp/math/Fraction.hpp @@ -35,11 +35,12 @@ namespace emp { denom /= gcd; } public: - Fraction(int64_t in_num=0, int64_t in_denom=1) : num=in_num, denom=in_denom { } + Fraction(int64_t in_num=0, int64_t in_denom=1) : num(in_num), denom(in_denom) { } Fraction(const Fraction &) = default; int64_t GetNumerator() const { return num; } int64_t GetDenomonator() const { return denom; } }; +} #endif // #ifndef EMP_MATH_FRACTION_HPP_INCLUDE diff --git a/include/emp/prefab/ConfigPanel.hpp b/include/emp/prefab/ConfigPanel.hpp index 31284bbf06..768164ed30 100644 --- a/include/emp/prefab/ConfigPanel.hpp +++ b/include/emp/prefab/ConfigPanel.hpp @@ -111,12 +111,15 @@ namespace prefab { } inline static std::set numeric_types = {"int", "double", "float", "uint32_t", "uint64_t", "size_t"}; + + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Helper function to get pretty names from config values inline static std::function format_label = []( const std::string & name ) { return to_titlecase(join(slice(name, '_'), " ")); }; + #endif // DOXYGEN_SHOULD_SKIP_THIS /** * Get current on-update callback. diff --git a/include/emp/prefab/ReadoutPanel.hpp b/include/emp/prefab/ReadoutPanel.hpp index f019b86951..162fe875c4 100644 --- a/include/emp/prefab/ReadoutPanel.hpp +++ b/include/emp/prefab/ReadoutPanel.hpp @@ -20,6 +20,7 @@ namespace emp::prefab { + #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace internal { /** * Shared pointer held by instances of ReadoutPanel class representing @@ -55,6 +56,8 @@ namespace emp::prefab { }; } + #endif // DOXYGEN_SHOULD_SKIP_THIS + /** * Use a ReadoutPanel to display a collection of related live values * in a Card. diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index 6cb0e03037..161bc653f5 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -191,7 +191,11 @@ namespace emp::prefab { const std::string & label, const std::string & desc, const std::string & value, - const std::function & onChange = [](const std::string &) { ; }, + const std::function & onChange + #ifndef DOXYGEN_SHOULD_SKIP_THIS + = [](const std::string &) { ; } + #endif // DOXYGEN_SHOULD_SKIP_THIS + , const std::string & id="" ) : ValueControl(label, desc, value, web::Input(onChange, "text", ""), id) { mainCtrl.AddAttr("class", "form-control"); @@ -215,7 +219,11 @@ namespace emp::prefab { const std::string & label, const std::string & desc, const bool is_checked, - const std::function & onChange = [](const std::string &) { ; }, + const std::function & onChange + #ifndef DOXYGEN_SHOULD_SKIP_THIS + = [](const std::string & val) { ; } + #endif // DOXYGEN_SHOULD_SKIP_THIS + , const std::string & id="" ) : ValueBox(label, desc, id) { prefab::ToggleSwitch toggle(onChange, "", is_checked); @@ -277,7 +285,11 @@ namespace emp::prefab { const std::string & desc, const std::string & value, const std::string & type, - const std::function & onChange = [](const std::string & val) { ; }, + const std::function & onChange + #ifndef DOXYGEN_SHOULD_SKIP_THIS + = [](const std::string & val) { ; } + #endif // DOXYGEN_SHOULD_SKIP_THIS + , const std::string & id="" ) : ValueControl(label, desc, value, web::Input([](const std::string & val){ ; }, "range", ""), id) { mainCtrl.AddAttr("class", "form-range"); diff --git a/include/emp/tools/string_utils.hpp b/include/emp/tools/string_utils.hpp index 3188d94de5..b66072470e 100644 --- a/include/emp/tools/string_utils.hpp +++ b/include/emp/tools/string_utils.hpp @@ -41,7 +41,6 @@ namespace emp { /// Return a const reference to an empty string. This function is useful to implement other /// functions that need to return a const reference for efficiency, but also need a null response. - static inline const std::string & empty_string() { static std::string empty = ""; return empty; @@ -1182,7 +1181,7 @@ namespace emp { return ANSI_Reverse() + _in + ANSI_NoReverse(); } - + #ifndef DOXYGEN_SHOULD_SKIP_THIS /// Apply sprintf-like formatting to a string. /// See https://en.cppreference.com/w/cpp/io/c/fprintf. /// Adapted from https://stackoverflow.com/a/26221725. @@ -1205,7 +1204,7 @@ namespace emp { #pragma GCC diagnostic pop } - + #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_TOOLS_STRING_UTILS_HPP_INCLUDE diff --git a/include/emp/web/Animate.hpp b/include/emp/web/Animate.hpp index 8a8bbbe07a..13f9b0261f 100644 --- a/include/emp/web/Animate.hpp +++ b/include/emp/web/Animate.hpp @@ -83,6 +83,7 @@ namespace web { Button step_but; ///< A button to advance this animation one step. + #ifndef DOXYGEN_SHOULD_SKIP_THIS void LoadTargets() { ; } template void LoadTargets(const web::Widget & target1, const T&... other_targets) { @@ -109,6 +110,7 @@ namespace web { frame_count++; } + #endif // DOXYGEN_SHOULD_SKIP_THIS /// DoFrame() is called by default if no animation function is provided. As such, an animation /// can be built by deriving a class from Animate and overriding this function. diff --git a/include/emp/web/Attributes.hpp b/include/emp/web/Attributes.hpp index 06782b4f67..5832724bf7 100644 --- a/include/emp/web/Attributes.hpp +++ b/include/emp/web/Attributes.hpp @@ -40,6 +40,7 @@ namespace web { /// Return a count of the number of attributes that have been set. int GetSize() const { return (int) settings.size(); } + /// Set the specified setting to the specified value Attributes & DoSet(const std::string & in_set, const std::string & in_val) { settings[in_set] = in_val; return *this; diff --git a/include/emp/web/Table.hpp b/include/emp/web/Table.hpp index e41e33dd00..40423aef11 100644 --- a/include/emp/web/Table.hpp +++ b/include/emp/web/Table.hpp @@ -722,7 +722,8 @@ namespace web { return *this; } - /// Apply CSS to all rows. (@CAO: Should we use fancier jquery here?) + /// Apply CSS to all rows. + // (@CAO: Should we use fancier jquery here?) template Table & RowsCSS(const std::string & setting, SETTING_TYPE && value) { for (auto & row : Info()->rows) row.extras.style.Set(setting, emp::to_string(value)); diff --git a/include/emp/web/_MochaTestRunner.hpp b/include/emp/web/_MochaTestRunner.hpp index ff7053860b..001aaa48fb 100644 --- a/include/emp/web/_MochaTestRunner.hpp +++ b/include/emp/web/_MochaTestRunner.hpp @@ -105,12 +105,12 @@ namespace web { /// Utility class for managing software tests written for Emscripten web code. /// IMPORTANT: This utility assumes the Karma + Mocha javascript testing framework. - // MochaTestRunner is useful because emscripten does not play very nice with the browser event queue (i.e., - // it does not relinquish control back to the browser until it finishes executing the compiled 'C++' - // code). This interacts poorly with Mocha because Mocha's 'describe' statements do not execute when - // they are called; instead, they are added to the browser's event queue. - // The MochaTestRunner exploits Mocha's describe statements + the browser's event queue to chain together - // the tests added to the MochaTestRunner. + /// MochaTestRunner is useful because emscripten does not play very nice with the browser event queue (i.e., + /// it does not relinquish control back to the browser until it finishes executing the compiled 'C++' + /// code). This interacts poorly with Mocha because Mocha's 'describe' statements do not execute when + /// they are called; instead, they are added to the browser's event queue. + /// The MochaTestRunner exploits Mocha's describe statements + the browser's event queue to chain together + /// the tests added to the MochaTestRunner. class MochaTestRunner { protected: diff --git a/include/emp/web/canvas_utils.hpp b/include/emp/web/canvas_utils.hpp index caa51d4e95..7bcf85f558 100644 --- a/include/emp/web/canvas_utils.hpp +++ b/include/emp/web/canvas_utils.hpp @@ -27,20 +27,36 @@ namespace emp { namespace web { + /// Draw a Circle onto the canvas. + /// @param canvas The Canvas to draw on. + /// @param circle The circle to draw + /// @param fill The color to fill the circle with + /// @param line The color of the circle's outline void Draw(Canvas canvas, const emp::Circle & circle, const std::string & fill="", const std::string & line="") { + #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(); canvas.Draw(circle, fill, line); + #endif // DOXYGEN_SHOULD_SKIP_THIS } - - + /// Draw a BitMatrix onto a canvas using black and white squares (can specify cell width and height) + /// Draw a Circle onto the canvas. + /// @param canvas The Canvas to draw on. + /// @param matrix The matrix to draw + /// @param w The width of the matrix (number of columns) + /// @param h The height of the matrix (number of rows) + #ifndef DOXYGEN_SHOULD_SKIP_THIS template void Draw(Canvas canvas, const BitMatrix & matrix, double w, double h) + #else + void Draw(Canvas canvas, const BitMatrix & matrix, double w, double h) + #endif { + #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(); double cell_w = w / (double) COLS; @@ -53,9 +69,10 @@ namespace web { } } } + #endif } - + #ifndef DOXYGEN_SHOULD_SKIP_THIS /// Draw a Surface, specifying the full colormap to be used. The surface has a range of circle /// bodies, each with a color id. /// @param canvas The Canvas to draw on. @@ -251,7 +268,7 @@ namespace web { } } } - + // #endif // DOXYGEN_SHOULD_SKIP_THIS /// Draw a state grid onto a canvas. /// @param canvas The Canvas to draw on. /// @param state_grid A StateGrid object. @@ -295,6 +312,7 @@ namespace web { canvas.Rect({cur_x,cur_y}, cell_w, cell_h, cur_color, line_color); } } + #endif // DOXYGEN_SHOULD_SKIP_THIS } /// Draw a grid as the background of a canvas. @@ -306,6 +324,8 @@ namespace web { /// @param line_color The color of the liens on the grid. void DrawGridBG(Canvas canvas, size_t rows, size_t cols, const std::string & bg_color, const std::string & line_color) { + + #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(bg_color); const double canvas_x = (double) canvas.GetWidth(); @@ -321,6 +341,7 @@ namespace web { double y = cell_height * i; canvas.Line( {0,y}, {canvas_x,y}, line_color); } + #endif // DOXYGEN_SHOULD_SKIP_THIS } template @@ -328,12 +349,14 @@ namespace web { POINT_FUN_T && point_fun, COLOR_FUN_T && color_fun, const std::string & line_color="black") { + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Draw all of the organisms for (auto obj : container) { const auto pos = point_fun(obj); const auto color = color_fun(obj); canvas.Circle(pos, radius, color, line_color); } + #endif // DOXYGEN_SHOULD_SKIP_THIS } diff --git a/include/emp/web/commands.hpp b/include/emp/web/commands.hpp index 432a4b835c..f7139e0686 100644 --- a/include/emp/web/commands.hpp +++ b/include/emp/web/commands.hpp @@ -50,8 +50,10 @@ namespace web { const std::string & GetStr() const { return str; } }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS /// Pre-define emp::endl to insert a "
" and thus acting like a newline. static const PrintStr endl("
"); + #endif // DOXYGEN_SHOULD_SKIP_THIS } } diff --git a/include/emp/web/d3/d3_init.hpp b/include/emp/web/d3/d3_init.hpp index 7b163875b6..6ce798c593 100644 --- a/include/emp/web/d3/d3_init.hpp +++ b/include/emp/web/d3/d3_init.hpp @@ -132,8 +132,8 @@ namespace D3 { /// /// Example: /// - /// - /// `D3::FormatFunction rounded = D3::FormatFunction(".2f"); + /// @code + /// D3::FormatFunction rounded = D3::FormatFunction(".2f"); /// /// std::function tooltip_display = /// [this](double d, int i, int k) {return "Data: " + to_string(rounded(d));} @@ -142,8 +142,8 @@ namespace D3 { /// /// D3::Selection example_selection = D3::SelectAll("circle"); /// - /// example_selection.SetupToolTip(tip);' - /// + /// example_selection.SetupToolTip(tip); + /// @endcode /// /// Mousing over a circle in the example selection will display /// "Data: " followed by the value of d, rounded to two decimal points. diff --git a/include/emp/web/js_utils.hpp b/include/emp/web/js_utils.hpp index 273145348a..5f44e496d6 100644 --- a/include/emp/web/js_utils.hpp +++ b/include/emp/web/js_utils.hpp @@ -30,14 +30,18 @@ namespace emp { /// getValue() from within MAIN_THREAD_EM_ASM macros. /// /// For example, say we have a templated function that takes a pointer to type - /// T. We find out the appropriate string for type T: + /// T. We find out the appropriate string for type T : + /// @code /// std::map type_map = GetTypeToStringMap(); /// std::string type_string = type_map[typeid(T).name()]; + /// @endcode /// /// Now we can pass type_string.c_str() into MAIN_THREAD_EM_ASM: + /// @code /// `MAIN_THREAD_EM_ASM({ /// var value = getValue($0, $1); - /// }, pointer, type_string.c_str();` + /// }, pointer, type_string.c_str();` + /// @endcode std::map get_type_to_string_map() { // Using typeid().name() could create problems because it varies by From 2074dee288b8c9d056c9dee36045e9b89be56658 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 14:34:39 -0400 Subject: [PATCH 41/80] Don't have doxygen generate latex --- Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doxyfile b/Doxyfile index 229c101fed..31abf156e7 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1875,7 +1875,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = YES +GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of From 80408a9314b5f0dc99c99e82a26257d8729b3ca3 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 14:36:21 -0400 Subject: [PATCH 42/80] Go back to struct --- include/emp/Evolve/Systematics.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index c49d8df89a..fe51211aaf 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -81,7 +81,7 @@ namespace emp { /// Maps a string representing a type of mutation to a count representing /// the number of that type of mutation that occurred to bring about this taxon. template - class mut_landscape_info { + struct mut_landscape_info { using phen_t = PHEN_TYPE; using has_phen_t = std::true_type; using has_mutations_t = std::true_type; From 452cc717ab81cab0b081665f57ed77fbd18507aa Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 14:37:09 -0400 Subject: [PATCH 43/80] Upgrade checkout action --- .github/workflows/CI.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 111bb50dd4..9897800b36 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -13,7 +13,7 @@ jobs: name: Enforce Tidyness runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: 'recursive' - run: sudo apt-get update -qq @@ -48,7 +48,7 @@ jobs: CXX: ${{ matrix.cxx }} TEST_SET: ${{ matrix.test-set }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: 'recursive' - name: Set up GCC @@ -69,7 +69,7 @@ jobs: name: Web Tests runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: 'recursive' - name: Set up GCC @@ -87,7 +87,7 @@ jobs: name: Measure Test Coverage runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: 'recursive' - run: sudo apt-get update -qq @@ -110,7 +110,7 @@ jobs: - run: cd doc && python make_md.py - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json - uses: sylvanld/action-storage@v1 - # if: github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/master' with: src: doc/doc-coverage.json dst: stats/doc-coverage.json From 0ff59b299628cb9bc28ef5ba102d640b3d3a64b8 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 14:38:27 -0400 Subject: [PATCH 44/80] Officially drop exhle dependency --- doc/requirements.in | 1 - doc/requirements.txt | 15 ++------------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/doc/requirements.in b/doc/requirements.in index 799c4c954f..7de83b2f4b 100644 --- a/doc/requirements.in +++ b/doc/requirements.in @@ -1,5 +1,4 @@ sphinx -exhale sphinx-rtd-theme>=1.0.0 coverxygen breathe diff --git a/doc/requirements.txt b/doc/requirements.txt index 01466d8bf9..03e6356cd5 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -9,13 +9,9 @@ alabaster==0.7.13 babel==2.12.1 # via sphinx beautifulsoup4==4.12.2 - # via - # exhale - # sphinx-tippy + # via sphinx-tippy breathe==4.35.0 - # via - # -r requirements.in - # exhale + # via -r requirements.in certifi==2023.5.7 # via requests charset-normalizer==3.1.0 @@ -28,8 +24,6 @@ docutils==0.18.1 # myst-parser # sphinx # sphinx-rtd-theme -exhale==0.2.4 - # via -r requirements.in idna==3.4 # via requests imagesize==1.4.1 @@ -41,8 +35,6 @@ jinja2==3.1.2 # myst-parser # sphinx # sphinx-tippy -lxml==4.9.2 - # via exhale markdown-it-py==2.2.0 # via # mdit-py-plugins @@ -65,8 +57,6 @@ requests==2.31.0 # via # sphinx # sphinx-tippy -six==1.16.0 - # via exhale snowballstemmer==2.2.0 # via sphinx soupsieve==2.4.1 @@ -75,7 +65,6 @@ sphinx==6.2.1 # via # -r requirements.in # breathe - # exhale # myst-parser # sphinx-rtd-theme # sphinx-tippy From 81481d9af6c1fc7b8ee631f7e93b2f85034921b6 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 14:39:35 -0400 Subject: [PATCH 45/80] Fix systematics boilerplate --- include/emp/Evolve/Systematics.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index fe51211aaf..146d88ee35 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1,9 +1,9 @@ /* - * note: This file is part of Empirical, https://github.com/devosoft/Empirical - * copyright: Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md * date: 2017-2023 - */ - /** +*/ +/** * @file * @brief Track genotypes, species, clades, or lineages of organisms in a world. * From 86e93c35b4b1d5bec48bd73e255535dcf5d2fbd6 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 14:56:13 -0400 Subject: [PATCH 46/80] Fix systematics.cpp boilerplate --- tests/Evolve/Systematics.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/Evolve/Systematics.cpp b/tests/Evolve/Systematics.cpp index 686a7dc58b..b1e5ff4c6d 100644 --- a/tests/Evolve/Systematics.cpp +++ b/tests/Evolve/Systematics.cpp @@ -1,9 +1,10 @@ +/* + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2021 +*/ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2021 - * - * @file Systematics.cpp + * @file */ #include From aeb7ff42dbfbe6f5133052640e4adf290aa2fa52 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 15:02:58 -0400 Subject: [PATCH 47/80] Fix trailing whitespace --- include/emp/prefab/ConfigPanel.hpp | 2 +- include/emp/prefab/ReadoutPanel.hpp | 2 +- include/emp/prefab/ValueBox.hpp | 2 +- include/emp/web/canvas_utils.hpp | 8 ++++---- include/emp/web/js_utils.hpp | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/emp/prefab/ConfigPanel.hpp b/include/emp/prefab/ConfigPanel.hpp index 768164ed30..8376d6d6ba 100644 --- a/include/emp/prefab/ConfigPanel.hpp +++ b/include/emp/prefab/ConfigPanel.hpp @@ -111,7 +111,7 @@ namespace prefab { } inline static std::set numeric_types = {"int", "double", "float", "uint32_t", "uint64_t", "size_t"}; - + #ifndef DOXYGEN_SHOULD_SKIP_THIS // Helper function to get pretty names from config values inline static std::function format_label = []( diff --git a/include/emp/prefab/ReadoutPanel.hpp b/include/emp/prefab/ReadoutPanel.hpp index 162fe875c4..02e6fb4441 100644 --- a/include/emp/prefab/ReadoutPanel.hpp +++ b/include/emp/prefab/ReadoutPanel.hpp @@ -57,7 +57,7 @@ namespace emp::prefab { }; } #endif // DOXYGEN_SHOULD_SKIP_THIS - + /** * Use a ReadoutPanel to display a collection of related live values * in a Card. diff --git a/include/emp/prefab/ValueBox.hpp b/include/emp/prefab/ValueBox.hpp index 161bc653f5..4ebb233630 100644 --- a/include/emp/prefab/ValueBox.hpp +++ b/include/emp/prefab/ValueBox.hpp @@ -191,7 +191,7 @@ namespace emp::prefab { const std::string & label, const std::string & desc, const std::string & value, - const std::function & onChange + const std::function & onChange #ifndef DOXYGEN_SHOULD_SKIP_THIS = [](const std::string &) { ; } #endif // DOXYGEN_SHOULD_SKIP_THIS diff --git a/include/emp/web/canvas_utils.hpp b/include/emp/web/canvas_utils.hpp index 7bcf85f558..2deac45cb4 100644 --- a/include/emp/web/canvas_utils.hpp +++ b/include/emp/web/canvas_utils.hpp @@ -27,7 +27,7 @@ namespace emp { namespace web { - + /// Draw a Circle onto the canvas. /// @param canvas The Canvas to draw on. /// @param circle The circle to draw @@ -42,7 +42,7 @@ namespace web { canvas.Draw(circle, fill, line); #endif // DOXYGEN_SHOULD_SKIP_THIS } - + /// Draw a BitMatrix onto a canvas using black and white squares (can specify cell width and height) /// Draw a Circle onto the canvas. /// @param canvas The Canvas to draw on. @@ -54,7 +54,7 @@ namespace web { void Draw(Canvas canvas, const BitMatrix & matrix, double w, double h) #else void Draw(Canvas canvas, const BitMatrix & matrix, double w, double h) - #endif + #endif { #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(); @@ -324,7 +324,7 @@ namespace web { /// @param line_color The color of the liens on the grid. void DrawGridBG(Canvas canvas, size_t rows, size_t cols, const std::string & bg_color, const std::string & line_color) { - + #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(bg_color); diff --git a/include/emp/web/js_utils.hpp b/include/emp/web/js_utils.hpp index 5f44e496d6..810ce5efa8 100644 --- a/include/emp/web/js_utils.hpp +++ b/include/emp/web/js_utils.hpp @@ -31,13 +31,13 @@ namespace emp { /// /// For example, say we have a templated function that takes a pointer to type /// T. We find out the appropriate string for type T : - /// @code + /// @code /// std::map type_map = GetTypeToStringMap(); /// std::string type_string = type_map[typeid(T).name()]; /// @endcode /// /// Now we can pass type_string.c_str() into MAIN_THREAD_EM_ASM: - /// @code + /// @code /// `MAIN_THREAD_EM_ASM({ /// var value = getValue($0, $1); /// }, pointer, type_string.c_str();` From 5f80461cb2a01c844f25a0e316039ce63644dfd8 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Sun, 2 Jul 2023 15:05:31 -0400 Subject: [PATCH 48/80] Remove unecesary doxygen guards --- include/emp/web/canvas_utils.hpp | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/include/emp/web/canvas_utils.hpp b/include/emp/web/canvas_utils.hpp index 2deac45cb4..d93f2f9321 100644 --- a/include/emp/web/canvas_utils.hpp +++ b/include/emp/web/canvas_utils.hpp @@ -37,10 +37,8 @@ namespace web { const std::string & fill="", const std::string & line="") { - #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(); canvas.Draw(circle, fill, line); - #endif // DOXYGEN_SHOULD_SKIP_THIS } /// Draw a BitMatrix onto a canvas using black and white squares (can specify cell width and height) @@ -49,14 +47,9 @@ namespace web { /// @param matrix The matrix to draw /// @param w The width of the matrix (number of columns) /// @param h The height of the matrix (number of rows) - #ifndef DOXYGEN_SHOULD_SKIP_THIS template void Draw(Canvas canvas, const BitMatrix & matrix, double w, double h) - #else - void Draw(Canvas canvas, const BitMatrix & matrix, double w, double h) - #endif { - #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(); double cell_w = w / (double) COLS; @@ -69,10 +62,8 @@ namespace web { } } } - #endif } - #ifndef DOXYGEN_SHOULD_SKIP_THIS /// Draw a Surface, specifying the full colormap to be used. The surface has a range of circle /// bodies, each with a color id. /// @param canvas The Canvas to draw on. @@ -268,7 +259,7 @@ namespace web { } } } - // #endif // DOXYGEN_SHOULD_SKIP_THIS + /// Draw a state grid onto a canvas. /// @param canvas The Canvas to draw on. /// @param state_grid A StateGrid object. @@ -312,7 +303,6 @@ namespace web { canvas.Rect({cur_x,cur_y}, cell_w, cell_h, cur_color, line_color); } } - #endif // DOXYGEN_SHOULD_SKIP_THIS } /// Draw a grid as the background of a canvas. @@ -325,7 +315,6 @@ namespace web { void DrawGridBG(Canvas canvas, size_t rows, size_t cols, const std::string & bg_color, const std::string & line_color) { - #ifndef DOXYGEN_SHOULD_SKIP_THIS canvas.Clear(bg_color); const double canvas_x = (double) canvas.GetWidth(); @@ -341,7 +330,6 @@ namespace web { double y = cell_height * i; canvas.Line( {0,y}, {canvas_x,y}, line_color); } - #endif // DOXYGEN_SHOULD_SKIP_THIS } template @@ -349,14 +337,12 @@ namespace web { POINT_FUN_T && point_fun, COLOR_FUN_T && color_fun, const std::string & line_color="black") { - #ifndef DOXYGEN_SHOULD_SKIP_THIS // Draw all of the organisms for (auto obj : container) { const auto pos = point_fun(obj); const auto color = color_fun(obj); canvas.Circle(pos, radius, color, line_color); } - #endif // DOXYGEN_SHOULD_SKIP_THIS } From 01ebeb6a129e78dfb69dfd5df8cea36b13a6f757 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 00:56:09 -0400 Subject: [PATCH 49/80] more clean-up; add bibliogrpahy --- doc/bibliography.bib | 191 +++++++++++++++++++++++++++++++++++++++++++ doc/library/index.md | 13 --- 2 files changed, 191 insertions(+), 13 deletions(-) create mode 100644 doc/bibliography.bib delete mode 100644 doc/library/index.md diff --git a/doc/bibliography.bib b/doc/bibliography.bib new file mode 100644 index 0000000000..5eb239760b --- /dev/null +++ b/doc/bibliography.bib @@ -0,0 +1,191 @@ + +@article{collessReviewPhylogeneticsTheory1982, + title = {Review of Phylogenetics: The Theory and Practice of Phylogenetic Systematics.}, + volume = {31}, + issn = {0039-7989}, + url = {https://www.jstor.org/stable/2413420}, + doi = {10.2307/2413420}, + shorttitle = {Review of Phylogenetics}, + pages = {100--104}, + number = {1}, + journal = {Systematic Zoology}, + author = {Colless, Donald H.}, + editora = {Wiley, E. O.}, + editoratype = {collaborator}, + year = {1982} +} + +@article{dolsonInterpretingTapeLife2020, + title = {Interpreting the Tape of Life: Ancestry-based Analyses Provide Insights and Intuition about Evolutionary Dynamics}, + volume = {26}, + rights = {All rights reserved}, + pages = {1--22}, + number = {1}, + journal = {Artificial Life}, + author = {Dolson, Emily and Lalejini, Alexander and Jorgensen, Steven and Ofria, Charles}, + year = {2020}, + doi = {10.1162/artl\_a\_00313}, + url = {https://doi.org/10.1162/artl\_a\_00313} +} + +@article{faithConservationEvaluationPhylogenetic1992, + title = {Conservation evaluation and phylogenetic diversity}, + volume = {61}, + issn = {0006-3207}, + url = {http://www.sciencedirect.com/science/article/pii/0006320792912013}, + doi = {10.1016/0006-3207(92)91201-3}, + abstract = {Protecting biological diversity with limited resources may require placing conservation priorities on different taxa. A system of priorities that reflects the value of taxonomic diversity can be achieved by setting priorities such that the subset of taxa that is protected has maximum underlying feature diversity. Such feature diversity of taxon subsets is difficult to estimate directly, but can be predicted by the cladistic/phylogenetic relationships among the taxa. In this study, a simple measure of phylogenetic diversity is defined based on cladistic information. The measure of phylogenetic diversity, {PD}, is contrasted with a measure of taxic diversity recently developed by Vane-Wright et al. (Biol. Conserv., 55, 1991). In re-examining reserve-selection scenarios based on a phylogeny of bumble bees (Apidae), {PD} produces quite different priorities for species conservation, relative to taxic diversity. The potential application of {PD} at levels below that of the species is then illustrated using a {mtDNA} phylogeny for populations of crested newts Triturus cristatus. Calculation of {PD} for different population subsets shows that protection of populations at either of two extremes of the geographic range of the group can significantly increase the phylogenetic diversity that is protected.}, + pages = {1--10}, + number = {1}, + journal = {Biological Conservation}, + journaltitle = {Biological Conservation}, + shortjournal = {Biological Conservation}, + author = {Faith, Daniel P.}, + year = {1992} +} + +@article{isaacMammalsEDGEConservation2007, + title = {Mammals on the {EDGE}: Conservation Priorities Based on Threat and Phylogeny}, + volume = {2}, + issn = {1932-6203}, + url = {http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0000296}, + doi = {10.1371/journal.pone.0000296}, + shorttitle = {Mammals on the {EDGE}}, + abstract = {Conservation priority setting based on phylogenetic diversity has frequently been proposed but rarely implemented. Here, we define a simple index that measures the contribution made by different species to phylogenetic diversity and show how the index might contribute towards species-based conservation priorities. We describe procedures to control for missing species, incomplete phylogenetic resolution and uncertainty in node ages that make it possible to apply the method in poorly known clades. We also show that the index is independent of clade size in phylogenies of more than 100 species, indicating that scores from unrelated taxonomic groups are likely to be comparable. Similar scores are returned under two different species concepts, suggesting that the index is robust to taxonomic changes. The approach is applied to a near-complete species-level phylogeny of the Mammalia to generate a global priority list incorporating both phylogenetic diversity and extinction risk. The 100 highest-ranking species represent a high proportion of total mammalian diversity and include many species not usually recognised as conservation priorities. Many species that are both evolutionarily distinct and globally endangered ({EDGE} species) do not benefit from existing conservation projects or protected areas. The results suggest that global conservation priorities may have to be reassessed in order to prevent a disproportionately large amount of mammalian evolutionary history becoming extinct in the near future.}, + pages = {e296}, + number = {3}, + journal = {{PLOS} {ONE}}, + shortjournal = {{PLOS} {ONE}}, + author = {Isaac, Nick J. B. and Turvey, Samuel T. and Collen, Ben and Waterman, Carly and Baillie, Jonathan E. M.}, + urldate = {2018-01-09}, + year = {2007}, + langid = {english}, + keywords = {Animal phylogenetics, Conservation genetics, Conservation science, Endangered species, Mammals, Species diversity, Species extinction, Taxonomy} +} + +@article{mirSoundCollesslikeBalance2018, + title = {Sound Colless-like balance indices for multifurcating trees}, + volume = {13}, + issn = {1932-6203}, + url = {https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0203401}, + doi = {10.1371/journal.pone.0203401}, + abstract = {The Colless index is one of the most popular and natural balance indices for bifurcating phylogenetic trees, but it makes no sense for multifurcating trees. In this paper we propose a family of Colless-like balance indices C D , f that generalize the Colless index to multifurcating phylogenetic trees. Each C D , f is determined by the choice of a dissimilarity D and a weight function f : N → R ≥ 0. A balance index is sound when the most balanced phylogenetic trees according to it are exactly the fully symmetric ones. Unfortunately, not every Colless-like balance index is sound in this sense. We prove then that taking f(n) = ln(n + e) or f(n) = en as weight functions, the resulting index C D , f is sound for every dissimilarity D. Next, for each one of these two functions f and for three popular dissimilarities D (the variance, the standard deviation, and the mean deviation from the median), we find the most unbalanced phylogenetic trees according to C D , f with any given number n of leaves. The results show that the growth pace of the function f influences the notion of “balance” measured by the indices it defines. Finally, we introduce our R package “{CollessLike},” which, among other functionalities, allows the computation of Colless-like indices of trees and their comparison to their distribution under Chen-Ford-Winkel’s α-γ-model for multifurcating phylogenetic trees. As an application, we show that the trees in {TreeBASE} do not seem to follow either the uniform model for multifurcating trees or the α-γ-model, for any values of α and γ.}, + pages = {e0203401}, + number = {9}, + journal = {{PLOS} {ONE}}, + shortjournal = {{PLOS} {ONE}}, + author = {Mir, Arnau and Rotger, Lucía and Rosselló, Francesc}, + year = {2018}, + langid = {english} +} + +@article{sackinGoodBadPhenograms1972, + title = {“Good” and “Bad” Phenograms}, + volume = {21}, + issn = {1063-5157}, + url = {https://doi.org/10.1093/sysbio/21.2.225}, + doi = {10.1093/sysbio/21.2.225}, + abstract = {“Good” and “Bad” phenograms. Syst. Zool. 21:225–226.—This paper presents a measure for characterizing a phenogram and measuring its usefulness.}, + pages = {225--226}, + number = {2}, + journal = {Systematic Biology}, + shortjournal = {Systematic Biology}, + author = {Sackin, M. J.}, + year = {1972} +} + +@article{shaoTreeBalance1990, + title = {Tree Balance}, + volume = {39}, + issn = {1063-5157}, + url = {https://academic.oup.com/sysbio/article/39/3/266/1727778}, + doi = {10.2307/2992186}, + abstract = {Abstract. Hierarchic classifications can differ with respect to tree balance—the degree to which branches divide the subtended taxa into subsets of equal size.}, + pages = {266--276}, + number = {3}, + journal = {Systematic Biology}, + shortjournal = {Syst Biol}, + author = {Shao, Kwang-Tsao}, + urldate = {2019-04-11}, + year = {1990}, + langid = {english} +} + +@article{tuckerGuidePhylogeneticMetrics2017, + title = {A guide to phylogenetic metrics for conservation, community ecology and macroecology}, + volume = {92}, + issn = {1469-185X}, + url = {http://onlinelibrary.wiley.com/doi/10.1111/brv.12252/abstract}, + doi = {10.1111/brv.12252}, + abstract = {The use of phylogenies in ecology is increasingly common and has broadened our understanding of biological diversity. Ecological sub-disciplines, particularly conservation, community ecology and macroecology, all recognize the value of evolutionary relationships but the resulting development of phylogenetic approaches has led to a proliferation of phylogenetic diversity metrics. The use of many metrics across the sub-disciplines hampers potential meta-analyses, syntheses, and generalizations of existing results. Further, there is no guide for selecting the appropriate metric for a given question, and different metrics are frequently used to address similar questions. To improve the choice, application, and interpretation of phylo-diversity metrics, we organize existing metrics by expanding on a unifying framework for phylogenetic information. Generally, questions about phylogenetic relationships within or between assemblages tend to ask three types of question: how much; how different; or how regular? We show that these questions reflect three dimensions of a phylogenetic tree: richness, divergence, and regularity. We classify 70 existing phylo-diversity metrics based on their mathematical form within these three dimensions and identify ‘anchor’ representatives: for α-diversity metrics these are {PD} (Faith's phylogenetic diversity), {MPD} (mean pairwise distance), and {VPD} (variation of pairwise distances). By analysing mathematical formulae and using simulations, we use this framework to identify metrics that mix dimensions, and we provide a guide to choosing and using the most appropriate metrics. We show that metric choice requires connecting the research question with the correct dimension of the framework and that there are logical approaches to selecting and interpreting metrics. The guide outlined herein will help researchers navigate the current jungle of indices.}, + pages = {698--715}, + number = {2}, + journal = {Biological Reviews}, + shortjournal = {Biol Rev}, + author = {Tucker, Caroline M. and Cadotte, Marc W. and Carvalho, Silvia B. and Davies, T. Jonathan and Ferrier, Simon and Fritz, Susanne A. and Grenyer, Rich and Helmus, Matthew R. and Jin, Lanna S. and Mooers, Arne O. and Pavoine, Sandrine and Purschke, Oliver and Redding, David W. and Rosauer, Dan F. and Winter, Marten and Mazel, Florent}, + year = {2017}, + langid = {english}, + keywords = {community assembly, biogeography, conservation, range size, biodiversity hotspots, diversity metrics, evolutionary history, phylogenetic diversity, prioritization} +} + +@article{vane-wrightWhatProtectSystematics1991, + title = {What to protect?—Systematics and the agony of choice}, + volume = {55}, + issn = {0006-3207}, + url = {https://www.sciencedirect.com/science/article/pii/000632079190030D}, + doi = {10.1016/0006-3207(91)90030-D}, + shorttitle = {What to protect?}, + abstract = {Politicians and scientists alike now agree that a priority list of global centres for preservationof biological diversity is required. Diversity has generally been measured only in terms of species richness, or in the form of indices combining richness with abundance. Such measures are considered inadequate for the task in hand. A novel index, based on the information content of cladistic classifications and giving a measure of taxonomic distinctness, is introduced. This taxic diversity measure, when coupled with detailed knowledge of distribution, can be used in modified analyses of the type previously developed as ‘critical faunas analysis’ or ‘network analysis’. Central to all such analyses is the concept of complementarity of floras or faunas. By employing complementariry, step-wise procedures can identify optimally efficient, single-site sequences of priority areas for a group, taking existing reserves into account or not, as required. For practical planning it is concluded that two basic rounds of analysis are required: first, recognition of global priority areas by taxic diversity techniques; secondly, within any such area, analysis without taxic weighting (as being developed by Margules and his co-workers) to identify a network of reserves to contain all local taxa and ecosystems. The paper concludes with a brief discussion of some immediate prospects for development of a systematic approach to global conservation evaluation.}, + pages = {235--254}, + number = {3}, + journal = {Biological Conservation}, + shortjournal = {Biological Conservation}, + author = {Vane-Wright, R. I. and Humphries, C. J. and Williams, P. H.}, + year = {1991}, + langid = {english} +} + +@article{warwickTaxonomicDistinctnessEnvironmental1998, + title = {Taxonomic Distinctness and Environmental Assessment}, + volume = {35}, + issn = {0021-8901}, + url = {http://www.jstor.org/stable/2405168}, + abstract = {1. The objectives of this paper are to test the performance of the taxonomic distinctness index, Δ+, in a number of environmental impact scenarios, to examine its relationship with functional diversity and to examine the influence of habitat type and diversity on the index. 2. The index was applied to data on free-living marine nematodes from the coasts of Britain and Chile. 3. The taxonomic distinctness of nematodes from environmentally degraded locations was generally reduced in comparison with that of more pristine locations, often significantly so. 4. Some habitat types may have naturally lower values of taxonomic distinctness than others. However, unless the habitats are degraded in some way the Δ+ values do not generally fall below the lower 95\% confidence limit of the simulated distribution under a null hypothesis that the assemblages behave as if they are a random selection from the regional species pool. This ameliorates the problem encountered with species richness measures of biodiversity, which are much more strongly affected by habitat type and complexity, thus making comparisons difficult between data sets from different habitats or where habitat type is uncontrolled. 5. Taxonomic distinctness in marine nematodes is shown to be related to trophic diversity: a reduction in trophic diversity will lead to a reduction in taxonomic distinctness, although not necessarily to a reduction in species richness. Trophic composition itself is clearly affected by pollution, but is also strongly responsive to the major influence of habitat type. 6. These features of the taxonomic distinctness index, coupled with its lack of dependence on sampling effort or differences in taxonomic rigour between workers and a statistical framework for the assessment of the significance of departure from expectation, suggest that it may prove to be a biologically and ecologically relevant measure of biodiversity. 7. This paper demonstrates that the taxonomic distinctness index has a number of theoretical and logistical advantages over measures of species richness for the purposes of environmental assessment.}, + pages = {532--543}, + number = {4}, + journal = {Journal of Applied Ecology}, + author = {Warwick, R. M. and Clarke, K. R.}, + year = {1998} +} + +@article{webbExploringPhylogeneticStructure2000, + title = {Exploring the Phylogenetic Structure of Ecological Communities: An Example for Rain Forest Trees}, + volume = {156}, + issn = {0003-0147}, + url = {http://www.jstor.org/stable/10.1086/303378}, + doi = {10.1086/303378}, + shorttitle = {Exploring the Phylogenetic Structure of Ecological Communities}, + abstract = {abstract: Because of the correlation expected between the phylogenetic relatedness of two taxa and their net ecological similarity, a measure of the overall phylogenetic relatedness of a community of interacting organisms can be used to investigate the contemporary ecological processes that structure community composition. I describe two indices that use the number of nodes that separate taxa on a phylogeny as a measure of their phylogenetic relatedness. As an example of the use of these indices in community analysis, I compared the mean observed net relatedness of trees (≥10 cm diameter at breast height) in each of 28 plots (each 0.16 ha) in a Bornean rain forest with the net relatedness expected if species were drawn randomly from the species pool (of the 324 species in the 28 plots), using a supertree that I assembled from published sources. I found that the species in plots were more phylogenetically related than expected by chance, a result that was insensitive to various modifications to the basic methodology. I tentatively infer that variation in habitat among plots causes ecologically more similar species to co‐occur within plots. Finally, I suggest a range of applications for phylogenetic relatedness measures in community analysis.}, + pages = {145--155}, + number = {2}, + journal = {The American Naturalist}, + author = {Webb, Campbell O. and Losos, Associate Editor: Jonathan B.}, + year = {2000} +} + +@article{winterPhylogeneticDiversityNature2013, + title = {Phylogenetic diversity and nature conservation: where are we?}, + volume = {28}, + issn = {0169-5347}, + url = {http://www.sciencedirect.com/science/article/pii/S0169534712002881}, + doi = {10.1016/j.tree.2012.10.015}, + shorttitle = {Phylogenetic diversity and nature conservation}, + abstract = {To date, there is little evidence that phylogenetic diversity has contributed to nature conservation. Here, we discuss the scientific justification of using phylogenetic diversity in conservation and the reasons for its neglect. We show that, apart from valuing the rarity and richness aspect, commonly quoted justifications based on the usage of phylogenetic diversity as a proxy for functional diversity or evolutionary potential are still based on uncertainties. We discuss how a missing guideline through the variety of phylogenetic diversity metrics and their relevance for conservation might be responsible for the hesitation to include phylogenetic diversity in conservation practice. We outline research routes that can help to ease uncertainties and bridge gaps between research and conservation with respect to phylogenetic diversity.}, + pages = {199--204}, + number = {4}, + journal = {Trends in Ecology \& Evolution}, + journaltitle = {Trends in Ecology \& Evolution}, + shortjournal = {Trends in Ecology \& Evolution}, + author = {Winter, Marten and Devictor, Vincent and Schweiger, Oliver}, + year = {2013} +} diff --git a/doc/library/index.md b/doc/library/index.md deleted file mode 100644 index b6002c88cf..0000000000 --- a/doc/library/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# Using Empirical - -Contents: - -```{toctree} -:maxdepth: 4 -:glob: - -*/[!_]* -``` - -- {ref}`genindex` -- {ref}`search` From b9499520a394f4e00323a877337542b19346d7d6 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 01:02:29 -0400 Subject: [PATCH 50/80] Actually commit --- doc/bibliography.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 doc/bibliography.md diff --git a/doc/bibliography.md b/doc/bibliography.md new file mode 100644 index 0000000000..f0a4db49cf --- /dev/null +++ b/doc/bibliography.md @@ -0,0 +1,4 @@ +# Bibliography + +```{bibliography} bibliography.bib +``` From e94f5e1198e262f5277a5a8e6219bfab99d3613a Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 01:02:34 -0400 Subject: [PATCH 51/80] Actually commit --- doc/Makefile | 2 +- doc/conf.py | 19 +++- doc/index.md | 23 ++++- doc/library/evolve/evolve.md | 88 ++++++++-------- doc/requirements.in | 1 + doc/requirements.txt | 25 ++++- include/emp/Evolve/Systematics.hpp | 114 ++++++++++++++------- include/emp/Evolve/SystematicsAnalysis.hpp | 35 ++++--- include/emp/bits/BitVector.hpp | 8 +- include/emp/config/ArgManager.hpp | 11 +- include/emp/web/js_utils.hpp | 4 +- 11 files changed, 217 insertions(+), 113 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index 7f97453cb9..a096f1e1d9 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -2,7 +2,7 @@ # # You can set these variables from the command line. -SPHINXOPTS = +SPHINXOPTS = -W --keep-going SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build diff --git a/doc/conf.py b/doc/conf.py index 56f4a9bc5e..a80e325a9c 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -40,11 +40,16 @@ 'sphinx_rtd_theme', 'breathe', 'myst_parser', - 'sphinx_tippy' + 'sphinx_tippy', + 'sphinxcontrib.bibtex' ] myst_heading_anchors = 4 +bibtex_bibfiles = ['bibliography.bib'] +bibtex_reference_style = "author_year" +bibtex_default_style = 'unsrt' + # Setup the breathe extension breathe_projects = { "Empirical": "./doxyoutput/xml" @@ -80,7 +85,7 @@ # General information about the project. project = u'Empirical' -copyright = u"2015, Charles Ofria" +copyright = u"2015-2023, Charles Ofria" author = u"Charles Ofria" # The version info for the project you're documenting, acts as replacement @@ -109,6 +114,14 @@ # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True +nitpick_ignore = [ + ('c:identifier', 'int32_t'), + ('c:identifier', 'uint32_t'), + ('c:identifier', 'int64_t'), + ('c:identifier', 'uint64_t'), + ('c:identifier', 'size_t'), + ('c:identifier', 'bool'), +] # -- Options for HTML output ------------------------------------------- @@ -128,7 +141,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = [] html_copy_source = False # -- Options for HTMLHelp output --------------------------------------- diff --git a/doc/index.md b/doc/index.md index 4cbe6c3852..c9c98d30ac 100644 --- a/doc/index.md +++ b/doc/index.md @@ -22,12 +22,29 @@ Empirical library into their own projects. Contents: ```{toctree} -:caption: Using Empirical +:caption: Getting Started :maxdepth: 2 - BuiltWithEmpiricalGallery/index QuickStartGuides/index -library/index +``` + +```{toctree} +:caption: Using Empirical +:maxdepth: 4 +:glob: + +library/*/[!_]* +``` + +- {ref}`genindex` +- {ref}`search` + + +```{toctree} +:caption: Bibliography +:maxdepth: 2 + +bibliography ``` diff --git a/doc/library/evolve/evolve.md b/doc/library/evolve/evolve.md index 1f95028d02..6d2053fbdc 100644 --- a/doc/library/evolve/evolve.md +++ b/doc/library/evolve/evolve.md @@ -55,21 +55,21 @@ Phylogenies are very information-dense data structures, but it can sometimes be Available statistics include: - Mean/max/min/sum/variance pairwise distance -- Colless-like index (a variant of the Colless index adjusted for trees with multifurcations) -- Sackin index -- Phylogenetic diversity +- Colless-like index (a variant of the Colless index adjusted for trees with multifurcations) {cite:p}`mirSoundCollesslikeBalance2018` +- Sackin index {cite:p}`sackinGoodBadPhenograms1972` +- Phylogenetic diversity {cite:p}`faithConservationEvaluationPhylogenetic1992` #### Efficiency Tracking phylogenies can be computationally expensive. We have sought to keep the computational overhead as low as possible. -We also provide the option to remove all taxa that died before a certain time point (the `remove_before` method). Use this with caution, as it will inhibit the use of many phylogenetic topology metrics. In extreme cases it may be necessary to keep your memory footprint sufficiently low, though. +We also provide the option to remove all taxa that died before a certain time point (the {cpp:func}`Systematics::RemoveBefore` method). Use this with caution, as it will inhibit the use of many phylogenetic topology metrics. In extreme cases it may be necessary to keep your memory footprint sufficiently low, though. If you need substantially higher efficiency (in terms of time or memory) or are working in a distributed computing environment (where having a centralized phylogeny tracker can pose a large bottleneck), check out the [hstrat library](https://github.com/mmore500/hstrat), which lets you sacrifice some precision to achieve lower computational overhead. #### Flexible output options -At any time, you can tell the systematics manager to print out the full contents of its current phylogeny in a "snapshot" file. These files will be formatted according to the [Artificial Life Phylogeny Data Standard format](https://alife-data-standards.github.io/alife-data-standards/phylogeny.html). By default they will contain the following columns for each taxon: 1) unique ID, 2) ancestor list, 3) origin time, and 4) destruction time. However, you can add additional columns with the `add_snapshot_fun` method. +At any time, you can tell the systematics manager to print out the full contents of its current phylogeny in a "snapshot" file. These files will be formatted according to the [Artificial Life Phylogeny Data Standard format](https://alife-data-standards.github.io/alife-data-standards/phylogeny.html). By default they will contain the following columns for each taxon: 1) unique ID, 2) ancestor list, 3) origin time, and 4) destruction time. However, you can add additional columns with the {cpp:func}`Systematics::AddSnapshotFun` method. You can also print information on a single lineage. @@ -146,19 +146,19 @@ sys = emp::Systematics sys([](const MyOrg & org){return org. There are a couple of other decisions that you also need to make at this point. The first is which set of taxa to store in the systematics manager. The defaults here are most likely what you want to use, but in case they aren't, the systematics manager can be told to store or not store the following sets of taxa: -- **active**: the taxa that still currently have living members. You almost certainly want to store these (without them you don't really have a phylogeny), but can technically disable them by setting the `store_active` keyword argument in the constructor to false. -- **ancestors**: the taxa that are ancestors of active taxa. You almost certainly want to store these too (without them you don't really have a phylogeny), but can technically disable them by setting the `store_ancestors` keyword argument in the constructor to false. -- **outside**: the taxa that are not in either of the other two groups (i.e. taxa that have gone extinct and all of their ancestors have gone extinct). If you store these, your phylogeny will get very large very fast, so doing so is generally not recommended. It is occasionally useful, though, so you can enable storing these taxa by setting the `store_all` keyword argument in the constructor to true. +- **active**: the taxa that still currently have living members. You almost certainly want to store these (without them you don't really have a phylogeny), but can technically disable them by setting the `store_active` argument in the constructor to false. +- **ancestors**: the taxa that are ancestors of active taxa. You almost certainly want to store these too (without them you don't really have a phylogeny), but can technically disable them by setting the `store_ancestors` argument in the constructor to false. +- **outside**: the taxa that are not in either of the other two groups (i.e. taxa that have gone extinct and all of their ancestors have gone extinct). If you store these, your phylogeny will get very large very fast, so doing so is generally not recommended. It is occasionally useful, though, so you can enable storing these taxa by setting the `store_all` argument in the constructor to true. -The second decision is slightly trickier. Once you start adding organisms to the systematics manager, it will create `Taxon` objects associated with each one to keep track of which taxon it is part of. You will need to use these taxon objects when adding future organisms, to specify which taxon their parent was part of. If you have control over your organism class, it is likely that the easiest option is to add a `self.taxon` attribute and store the taxon there. However, if you cannot add arbitrary data to your organism class, keeping track of taxon objects can get annoying. For this reason, the systematics manager gives you the option of letting it manage them. To do so, it needs a way to map individuals to taxa (since its possible there are duplicate taxa, simply running the organism to taxon function again won't work). It achieves this mapping by keeping track of each organism's position in the population. Thus, to have the systematics manager keep track of taxon objects itself, you must set the `store_pos` keyword argument in the constructor to true. You must also use the position-based versions of add_org and remove_org, and make sure to notify the systematics manager if any organism ever changes position during its lifetime for any reason. +The second decision is slightly trickier. Once you start adding organisms to the systematics manager, it will create {cpp:class}`Taxon` objects associated with each one to keep track of which taxon it is part of. You will need to use these taxon objects when adding future organisms, to specify which taxon their parent was part of. If you have control over your organism class, it is likely that the easiest option is to add a `taxon` member variable and store the taxon there. However, if you cannot add arbitrary data to your organism class, keeping track of taxon objects can get annoying. For this reason, the systematics manager gives you the option of letting it manage them. To do so, it needs a way to map individuals to taxa (since its possible there are duplicate taxa, simply running the organism to taxon function again won't work). It achieves this mapping by keeping track of each organism's position in the population. Thus, to have the systematics manager keep track of taxon objects itself, you must set the `store_pos` argument in the constructor to true. You must also use the position-based versions of add_org and remove_org, and make sure to notify the systematics manager if any organism ever changes position during its lifetime for any reason. Once you have created the systematics object, you just need to do two things: 1) notify it when something is born, and 2) notify it when something dies. ##### Notifying the systematics object of births -You must notify the systematics manager of births using the `add_org` family of functions. These functions require that you provide the newly born organism as well as either the taxon object of its parent or the position of its parent (if the systematics manager is tracking positions). +You must notify the systematics manager of births using the {cpp:func}`Systematics::AddOrg` family of functions. These functions require that you provide the newly born organism as well as either the taxon object of its parent or the position of its parent (if the systematics manager is tracking positions). -Example of tracking taxa as object attributes (assume we're building on our example above, and already have created a systematics manager called `sys`): +Example of tracking taxa as object attributes (assume we're building on our example above, and already have created a {cpp:class}`Systematics` manager called `sys`): ```cpp // Do whatever you would normally do to create your first organism @@ -188,7 +188,7 @@ An example of tracking positions is coming soon. For now, feel free to contact u ##### Notifying the systematics object of deaths -You must notify the systematics manager of deaths using the `remove_org` family of functions. +You must notify the systematics manager of deaths using the {cpp:func}`Systematics::RemoveOrg` family of functions. As an example (again, building on the previous examples): @@ -198,59 +198,59 @@ As an example (again, building on the previous examples): // We notify the systematics manager that this has happened by calling remove_org // Note that remove_org takes the taxon of the dead organism as an argument, not // the organism itself -sys.remove_org(taxon) +sys.RemoveOrg(taxon) ``` ### Taxon properties -Taxon objects maintain the following information: +{cpp:class}`Taxon` objects maintain the following information: -- taxon ID# ``GetID()`` -- details of organisms in the taxon ``GetInfo()`` -- pointer to the parent group (will return a null pointer if the species was injected) ``GetParent()`` -- how many organisms currently exist in the group and how many total organisms have ever existed in the group ``GetNumOrgs()`` or ``GetTotOrgs()`` -- how many direct offspring groups exist from this group and how many total extant offspring that exist from this taxa ``GetTotalOffspring()`` -- how deep in the tree the node you are examining is ``GetDepth()`` -- when did this taxon first appear in the population ``GetOriginationTime()`` -- when did the taxon leave the population ``GetDestructionTime()`` +- taxon ID {cpp:func}`Taxon::GetID()` +- details of organisms in the taxon {cpp:func}`Taxon::GetInfo()` +- pointer to the parent group (will return a null pointer if the species was injected) {cpp:func}`Taxon::GetParent()` +- how many organisms currently exist in the group and how many total organisms have ever existed in the group {cpp:func}`Taxon::GetNumOrgs()` or {cpp:func}`Taxon::GetTotOrgs()` +- how many direct offspring groups exist from this group and how many total extant offspring that exist from this taxa {cpp:func}`Taxon::GetTotalOffspring()` +- how deep in the tree the node you are examining is {cpp:func}`Taxon::GetDepth()` +- when did this taxon first appear in the population {cpp:func}`Taxon::GetOriginationTime()` +- when did the taxon leave the population {cpp:func}`Taxon::GetDestructionTime()` ### Systematics manager properties -A systematics manager object maintains the following information: +A {cpp:class}`Systematics` manager object maintains the following information (plus the phylogeny itself): -- Are we tracking a synchronous population? ``GetTrackSynchronous()`` ``SetTrackSynchronous()`` -- Are we storing all taxa that are still alive in the population? ``GetStoreActive()`` ``SetStoreActive()`` -- Are we storing all taxa that are ancestors of the living organisms in the population? ``GetStoreAncestors()`` ``SetStoreAncestors()`` -- Are we storing all taxa that have died out, as have all of their descendants? ``GetStoreOutside()`` ``SetStoreOutside()`` -- Are we storing any taxa types that have died out? ``GetArchive()`` ``SetArchive()`` -- Are we storing the positions of taxa? ``GetStorePosition()`` ``SetStorePosition()`` -- How many living organisms are currently being tracked? ``GetTotalOrgs()`` -- How many independent trees are being tracked? ``GetNumRoots()`` -- What ID will the next taxon have? ``GetNextID()`` -- What is the average phylogenetic depth of organisms in the population? ``GetAveDepth()`` -- To find the most recent common ancestor (MRCA) use ``GetMRCA()`` or ``GetMRCADepth()`` to find the distance to the MRCA. +- Are we tracking a synchronous population? {cpp:func}`SystematicsBase::GetTrackSynchronous` {cpp:func}`SystematicsBase::SetTrackSynchronous` +- Are we storing all taxa that are still alive in the population? {cpp:func}`SystematicsBase::GetStoreActive` {cpp:func}`SystematicsBase::SetStoreActive` +- Are we storing all taxa that are ancestors of the living organisms in the population? {cpp:func}`SystematicsBase::GetStoreAncestors()` {cpp:func}`SystematicsBase::SetStoreAncestors()` +- Are we storing all taxa that have died out, as have all of their descendants? {cpp:func}`SystematicsBase::GetStoreOutside()` {cpp:func}`SystematicsBase::SetStoreOutside()` +- Are we storing any taxa types that have died out? {cpp:func}`SystematicsBase::GetArchive()` {cpp:func}`SystematicsBase::SetArchive()` +- Are we storing the positions of taxa? {cpp:func}`SystematicsBase::GetStorePosition()` {cpp:func}`SystematicsBase::SetStorePosition()` +- How many living organisms are currently being tracked? {cpp:func}`SystematicsBase::GetTotalOrgs()` +- How many independent trees are being tracked? {cpp:func}`SystematicsBase::GetNumRoots()` +- What ID will the next taxon have? {cpp:func}`SystematicsBase::GetNextID()` +- What is the average phylogenetic depth of organisms in the population? {cpp:func}`SystematicsBase::GetAveDepth()` +- To find the most recent common ancestor (MRCA) use {cpp:func}`SystematicsBase::GetMRCA()` or {cpp:func}`SystematicsBase::GetMRCADepth()` to find the distance to the MRCA. ### Phylogeny metrics -Many different metrics can be used to quantify th topology of a phylogeny. For more information, see (Winters et al., 2013; Tucker et al. 2017). +Many different metrics can be used to quantify th topology of a phylogeny. For more information, see {cite:p}`winterPhylogeneticDiversityNature2013,tuckerGuidePhylogeneticMetrics2017,dolsonInterpretingTapeLife2020`. The Empirical systematics manager can calculate -- Phylogenetic diversity (Faith, 1992) -- Taxon Distinctiveness (From Vane-Wright et al., 1991) -- Evolutionary Distinctiveness (Isaac, 2007) (mean, sum, and variance) -- Mean pairwise distance (Webb and Losos, 2000), which is equivalent to Average Taxonomic Diversity (Warwick and Clark, 1998, Tucker et al., 2016) +- Phylogenetic diversity {cite:p}`faithConservationEvaluationPhylogenetic1992` +- Taxon Distinctiveness {cite:p}`vane-wrightWhatProtectSystematics1991` +- Evolutionary Distinctiveness {cite:p}`isaacMammalsEDGEConservation2007` (mean, sum, and variance) +- Mean pairwise distance {cite:p}`webbExploringPhylogeneticStructure2000`, which is equivalent to Average Taxonomic Diversity {cite:p}`warwickTaxonomicDistinctnessEnvironmental1998,tuckerGuidePhylogeneticMetrics2017` - Sum pairwise distance - Variance pairwise distance - Out-degree distribution - Average origination time -- Colless-like Index (Mir, 2018, PLoS One) -- Sackin Index (Sackin, 1972; reviewed in Shao, 1990) +- Colless-like Index {cite:p}`mirSoundCollesslikeBalance2018` +- Sackin Index {cite:p}`sackinGoodBadPhenograms1972` (reviewed in {cite:p}`shaoTreeBalance1990`) - Depth of most recent common ancestor -- Phenotypic volatility (Dolson et al., 2019) -- Unique taxa on lineage (Dolson et al., 2019) -- Mutation count along lineage (Dolson et al., 2019) +- Phenotypic volatility {cite:p}`dolsonInterpretingTapeLife2020` +- Unique taxa on lineage {cite:p}`dolsonInterpretingTapeLife2020` +- Mutation count along lineage {cite:p}`dolsonInterpretingTapeLife2020` - Tree size - Maximum depth diff --git a/doc/requirements.in b/doc/requirements.in index 7de83b2f4b..7d6b3fa7de 100644 --- a/doc/requirements.in +++ b/doc/requirements.in @@ -4,3 +4,4 @@ coverxygen breathe myst-parser sphinx-tippy +sphinxcontrib-bibtex diff --git a/doc/requirements.txt b/doc/requirements.txt index 03e6356cd5..4a710734b0 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -22,19 +22,25 @@ docutils==0.18.1 # via # breathe # myst-parser + # pybtex-docutils # sphinx # sphinx-rtd-theme + # sphinxcontrib-bibtex idna==3.4 # via requests imagesize==1.4.1 # via sphinx importlib-metadata==6.6.0 - # via sphinx + # via + # sphinx + # sphinxcontrib-bibtex jinja2==3.1.2 # via # myst-parser # sphinx # sphinx-tippy +latexcodec==2.0.1 + # via pybtex markdown-it-py==2.2.0 # via # mdit-py-plugins @@ -49,14 +55,26 @@ myst-parser==1.0.0 # via -r requirements.in packaging==23.1 # via sphinx +pybtex==0.24.0 + # via + # pybtex-docutils + # sphinxcontrib-bibtex +pybtex-docutils==1.0.2 + # via sphinxcontrib-bibtex pygments==2.15.1 # via sphinx pyyaml==6.0 - # via myst-parser + # via + # myst-parser + # pybtex requests==2.31.0 # via # sphinx # sphinx-tippy +six==1.16.0 + # via + # latexcodec + # pybtex snowballstemmer==2.2.0 # via sphinx soupsieve==2.4.1 @@ -68,6 +86,7 @@ sphinx==6.2.1 # myst-parser # sphinx-rtd-theme # sphinx-tippy + # sphinxcontrib-bibtex # sphinxcontrib-jquery sphinx-rtd-theme==1.2.2 # via -r requirements.in @@ -75,6 +94,8 @@ sphinx-tippy==0.4.1 # via -r requirements.in sphinxcontrib-applehelp==1.0.4 # via sphinx +sphinxcontrib-bibtex==2.5.0 + # via -r requirements.in sphinxcontrib-devhelp==1.0.2 # via sphinx sphinxcontrib-htmlhelp==2.0.1 diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 146d88ee35..25ef9da16c 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -8,15 +8,8 @@ * @brief Track genotypes, species, clades, or lineages of organisms in a world. * * - * @todo Technically, we don't need to keep the ancestors in a set in order to track a lineage... - * If we delete all of their descendants they should automaticaly be deleted. - * @todo We should provide an option to back up systematics data to a file so that it doesn't all - * need to be kept in memory, especially if we're only doing post-analysis. - * @todo This inheritance system makes adding new systematics-related data tracking kind of a pain. - * Over time, this will probably become a maintainability problem. We could make the inheritance - * go away and just use signals, but then the World could not maintain systematics managers. - * @todo This does not currently handle situations where organisms change locations during their - * lifetimes gracefully. + * @todo It would theoretically be possible to + * achieve slight memory savings by not maintaining a set of pointers to ancestors */ #ifndef EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE @@ -80,6 +73,7 @@ namespace emp { /// Track information related to the mutational landscape /// Maps a string representing a type of mutation to a count representing /// the number of that type of mutation that occurred to bring about this taxon. + /// @tparam PHEN_TYPE the type being used to represent the phenotype template struct mut_landscape_info { using phen_t = PHEN_TYPE; @@ -438,13 +432,17 @@ namespace emp { struct CollessStruct; /// @brief A tool to track phylogenetic relationships among organisms. - /// The systematics class tracks the relationships among all organisms based on the INFO_TYPE - /// provided. If an offspring has the same value for INFO_TYPE as its parent, it is grouped into + /// The systematics class tracks the relationships among all organisms based on the ORG_INFO type + /// provided. If an offspring has the same value for ORG_INFO type as its parent, it is grouped into /// the same taxon. Otherwise a new Taxon is created and the old one is used as its parent in - /// the phylogeny. If the provided INFO_TYPE is the organism's genome, a traditional phylogeny + /// the phylogeny. If the provided ORG_INFO type is the organism's genome, a traditional phylogeny /// is formed, with genotypes. If the organism's behavior/task set is used, then organisms are /// grouped by phenotypes. If the organism's position is used, the evolutionary path through /// space is tracked. Any other aspect of organisms can be tracked this way as well. + /// @tparam ORG The type of organisms in your world (i.e. the input to your taxon-calculation function) + /// @tparam ORG_INFO The type being used to represent the piece of information that defines taxa + /// (i.e. the output from your taxon-calculation function) + /// @tparam DATA_STRUCT (optional) The type being used to hold supplemental per-taxon data template class Systematics : public SystematicsBase { private: @@ -475,6 +473,7 @@ namespace emp { public: + #ifndef DOXYGEN_SHOULD_SKIP_THIS using typename parent_t::data_ptr_t; using parent_t::GetNumActive; using parent_t::GetNumAncestors; @@ -507,6 +506,7 @@ namespace emp { using parent_t::AddUniqueTaxaDataNode; using parent_t::AddMutationCountDataNode; using parent_t::GetMaxDepth; + #endif // DOXYGEN_SHOULD_SHIP_THIS /// Struct for keeping track of what information to print out in snapshot files struct SnapshotInfo { @@ -594,7 +594,6 @@ namespace emp { /// and population positions in synchronous generation worlds. void Update(); - ///@{ /// Add information about a new organism, including its stored info and parent's taxon; /// If you would like the systematics manager to track taxon age, you can also supply /// the update at which the taxon is being added. @@ -614,7 +613,6 @@ namespace emp { void AddOrg(ORG & org, WorldPosition pos, WorldPosition parent); Ptr AddOrg(ORG & org, WorldPosition pos, Ptr parent); Ptr AddOrg(ORG & org, Ptr parent=nullptr); - ///@} /// Remove an instance of an organism; track when it's gone. /// @param pos the world position of the individual being removed @@ -623,23 +621,33 @@ namespace emp { /// @param taxon a pointer to the taxon of the individual being removed bool RemoveOrg(Ptr taxon); - ///@{ /// Mark an instance of a taxon to be removed; track when it's gone. /// This is a work-around to deal with steady state/non-synchronous /// populations in which an organism might die as its offspring is born /// (e.g. in a spatial world where the offspring replaces the parent). /// If the bookkeeping is not handled correctly, we could accidentally - /// mark the taxon as extinct when it is actually continuing. + /// mark the taxon as extinct when it is actually continuing to exist. /// By using this method, the taxon won't be removed until after the /// next org is added or the next time an org is marked for removal. - /// Individual can either be specified as the world position of the individual being removed - /// or as a pointer to the taxon of the individual being removed + /// Use this version of the function if you're tracking systematics based + /// on the positions of individuals in the population. + /// @param pos Specifies the location in the world of the individual to + /// be removed after the next reproduction event. void RemoveOrgAfterRepro(WorldPosition pos); + /// Mark an instance of a taxon to be removed; track when it's gone. + /// This is a work-around to deal with steady state/non-synchronous + /// populations in which an organism might die as its offspring is born + /// (e.g. in a spatial world where the offspring replaces the parent). + /// If the bookkeeping is not handled correctly, we could accidentally + /// mark the taxon as extinct when it is actually continuing to exist. + /// By using this method, the taxon won't be removed until after the + /// next org is added or the next time an org is marked for removal. + /// Use this version of the function if you aren't tracking the positions + /// of individuals in the population. + /// @param taxon The taxon of the individual to be removed after the + /// the next reproduction event void RemoveOrgAfterRepro(Ptr taxon); - ///@} - - ///@{ /// Tell systematics manager that the parent of the next taxon added /// will be the one specified by this function (either at the specified /// position or the one pointed to by the given pointer) @@ -658,7 +666,6 @@ namespace emp { void SetNextParent(Ptr p) { next_parent = p; } - ///@} /// Set function used to calculate taxons from organisms void SetCalcInfoFun(fun_calc_info_t f) {calc_info_fun = f;} @@ -881,7 +888,11 @@ namespace emp { // ===== Functions for calculating phylogeny topology metrics ==== - /** From (Faith 1992, reviewed in Winters et al., 2013), phylogenetic diversity is + /** From + * @verbatim embed:rst:inline :cite:p:`faithConservationEvaluationPhylogenetic1992` @endverbatim + * , reviewed in + * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim + * phylogenetic diversity is * the sum of edges in the minimal spanning tree connected the taxa you're * calculating diversity of. * @@ -912,10 +923,18 @@ namespace emp { /** This is a metric of how distinct \c tax is from the rest of the population. * - * (From Vane-Wright et al., 1991; reviewed in Winter et al., 2013) */ + * (From + * @verbatim embed:rst:inline :cite:p:`wrightWhatProtectSystematics1991` @endverbatim + * ; reviewed in + * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim + * */ double GetTaxonDistinctiveness(Ptr tax) const {return 1.0/GetDistanceToRoot(tax);} - /** This metric (from Isaac, 2007; reviewed in Winter et al., 2013) measures how + /** This metric (from + * @verbatim embed:rst:inline :cite:p:`isaacMammalsEDGEConservation2007` @endverbatim + * ; reviewed in + * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim + * ) measures how * distinct \c tax is from the rest of the population, weighted for the amount of * unique evolutionary history that it represents. * @@ -927,9 +946,14 @@ namespace emp { * Assumes the tree is all connected. Will return -1 if this assumption isn't met.*/ double GetEvolutionaryDistinctiveness(Ptr tax, double time) const; - /** Calculates mean pairwise distance between extant taxa (Webb and Losos, 2000). - * This measurement is also called Average Taxonomic Diversity (Warwick and Clark, 1998) - * (for demonstration of equivalence see Tucker et al, 2016). This measurement tells + /** Calculates mean pairwise distance between extant taxa + * @verbatim embed:rst:inline :cite:p:`webbExploringPhylogeneticStructure2000` @endverbatim + * . + * This measurement is also called Average Taxonomic Diversity + * @verbatim embed:rst:inline :cite:p:`warwickTaxonomicDistinctnessEnvironmental1998` @endverbatim + * (for demonstration of equivalence see + * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim + * ). This measurement tells * you about the amount of distinctness in the community as a whole. * * This measurement assumes that the tree is fully connected. Will return -1 @@ -943,8 +967,9 @@ namespace emp { return (double)Sum(dists)/dists.size(); } - /** Calculates summed pairwise distance between extant taxa. Tucker et al 2017 points - * out that this is a measure of phylogenetic richness. + /** Calculates summed pairwise distance between extant taxa. + * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim + * points out that this is a measure of phylogenetic richness. * * This measurement assumes that the tree is fully connected. Will return -1 * if this is not the case. @@ -957,8 +982,9 @@ namespace emp { return Sum(v); } - /** Calculates variance of pairwise distance between extant taxa. Tucker et al 2017 points - * out that this is a measure of phylogenetic regularity. + /** Calculates variance of pairwise distance between extant taxa. + * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim + * points out that this is a measure of phylogenetic regularity. * * This measurement assumes that the tree is fully connected. Will return -1 * if this is not the case. @@ -991,19 +1017,23 @@ namespace emp { std::set> GetCanopyExtantRoots(int time_point = 0) const; - /** Counts the total number of ancestors between @param tax and MRCA, if there is one. If + /** Counts the total number of ancestors between \c tax and MRCA, if there is one. If * there is no common ancestor, distance to the root of this tree is calculated instead.*/ int GetDistanceToRoot(Ptr tax) const ; /** Counts the number of branching points leading to multiple extant taxa - * between @param tax and the most-recent common ancestor (or the root of its subtree, + * between \c tax and the most-recent common ancestor (or the root of its subtree, * if no MRCA exists). This is useful because a lot * of stats for phylogenies are designed for phylogenies reconstructed from extant taxa. * These phylogenies generally only contain branching points, rather than every ancestor * along the way to the current taxon.*/ int GetBranchesToRoot(Ptr tax) const; - /** Calculate Sackin Index of this tree (Sackin, 1972; reviewed in Shao, 1990). + /** Calculate Sackin Index of this tree ( + * @verbatim embed:rst:inline :cite:p:`sackinGoodBadPhenograms1972` @endverbatim + * ; reviewed in + * @verbatim embed:rst:inline :cite:p:`shaoTreeBalance1990` @endverbatim + * ). * Measures tree balance*/ int SackinIndex() const { int sackin = 0; @@ -1013,10 +1043,18 @@ namespace emp { return sackin; } - /** Calculate Colless Index of this tree (Colless, 1982; reviewed in Shao, 1990). + /** Calculate Colless-Like Index of this tree (based on + * @verbatim embed:rst:inline :cite:p:`collessReviewPhylogeneticsTheory1982` @endverbatim + * ; reviewed in + * @verbatim embed:rst:inline :cite:p:`shaoTreeBalance1990` @endverbatim + * ; refined by + * @verbatim embed:rst:inline :cite:p:`mirSoundCollesslikeBalance2018` @endverbatim + * ). + * * Measures tree balance. The standard Colless index only works for bifurcating trees, - * so this will be a Colless-like Index, as suggested in - * "Sound Colless-like balance indices for multifurcating trees" (Mir, 2018, PLoS One)*/ + * so this will be a Colless-like Index + * @verbatim embed:rst:inline :cite:p:`mirSoundCollesslikeBalance2018` @endverbatim + * */ double CollessLikeIndex() const { GetMRCA(); return RecursiveCollessStep(mrca).total; diff --git a/include/emp/Evolve/SystematicsAnalysis.hpp b/include/emp/Evolve/SystematicsAnalysis.hpp index 029448d194..bf6ccc70f5 100644 --- a/include/emp/Evolve/SystematicsAnalysis.hpp +++ b/include/emp/Evolve/SystematicsAnalysis.hpp @@ -1,11 +1,13 @@ /* * This file is part of Empirical, https://github.com/devosoft/Empirical * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2018 + * date: 2018-2023 */ /** * @file - * @brief TODO. + * @brief Functions to assist in phylogeny and lineage analysis. + * Unlike methods of the @ref Systematics class, these methods take + * a single taxon (which is part of the systematics manager) to act on. */ #ifndef EMP_EVOLVE_SYSTEMATICSANALYSIS_HPP_INCLUDE @@ -13,11 +15,6 @@ #include "../base/Ptr.hpp" -// Mutation info functions. Assumes each taxon has a struct containing an unordered map -// with keys that are strings indicating types of mutations and keys that are numbers -// indicating the number of that type of mutation that occurred to make this taxon from -// the parent. - namespace emp { /// @returns the taxon with the highest fitness out of any active taxon @@ -58,9 +55,13 @@ namespace emp { /// occurred along \c taxon 's lineage. (Different from CountMuts in /// that CountMuts sums them whereas CountMutSteps would count two /// simultaneous mutations of the same type as one event) + /// Assumes each taxon has a struct containing an unordered map + /// with keys that are strings indicating types of mutations and keys that are numbers + /// indicating the number of that type of mutation that occurred to make this taxon from + /// the parent. /// @param type string corresponding to a type of mutation. /// Must be in the mut_counts dictionary (i.e. the dictionary - /// passed in when \ref datastruct::mut_landscape_info::RecordMutation was called) + /// passed in when datastruct::mut_landscape_info::RecordMutation was called) /// @param taxon a pointer to a taxon to count mutation steps for. /// Must have a DATA_TYPE that supports mutation tracking /// (e.g. mut_landscape_info) @@ -76,8 +77,8 @@ namespace emp { return count; } - /// Returns the total number of times a mutation of the types @param types - /// that along @param taxon 's lineage. (Different from CountMuts in + /// Returns the total number of times a mutation of the types \c types + /// that along the given taxon 's lineage. (Different from CountMuts in /// that CountMuts sums them whereas CountMutSteps would count two /// simultaneous mutations of the same type as one event) template @@ -94,8 +95,8 @@ namespace emp { return count; } - /// Returns the total number of mutations of type @param type that occurred - /// along @param taxon 's lineage. + /// Returns the total number of mutations of type \c type that occurred + /// along \c taxon 's lineage. template int CountMuts(Ptr taxon, std::string type="substitution") { int count = 0; @@ -108,8 +109,8 @@ namespace emp { return count; } - /// Returns the total number of mutations of the types @param types that occurred - /// along @param taxon 's lineage. + /// Returns the total number of mutations of the types in \c types that occurred + /// along the given taxon 's lineage. template int CountMuts(Ptr taxon, emp::vector types) { int count = 0; @@ -125,7 +126,7 @@ namespace emp { } /// Returns the total number of deleterious mutational steps that occurred - /// along @param taxon 's lineage. (a change from parent to child taxon counts + /// along the given taxon's lineage. (a change from parent to child taxon counts /// as a single step, regardless of the number of mutations that happened at /// that time point) template @@ -145,7 +146,7 @@ namespace emp { } /// Returns the total number of changes in phenotype that occurred - /// along @param taxon 's lineage. + /// along the given taxon's lineage. template int CountPhenotypeChanges(Ptr taxon) { int count = 0; // Start with current phenotype @@ -163,7 +164,7 @@ namespace emp { } /// Returns the total number of unique phenotypes that occurred - /// along @param taxon 's lineage. + /// along the given taxon's lineage. template int CountUniquePhenotypes(Ptr taxon) { std::setGetData().phenotype)> seen; diff --git a/include/emp/bits/BitVector.hpp b/include/emp/bits/BitVector.hpp index fc3d76bb16..c96d101d94 100644 --- a/include/emp/bits/BitVector.hpp +++ b/include/emp/bits/BitVector.hpp @@ -2273,14 +2273,20 @@ namespace emp { // ---------------------- Implementations to work with standard library ---------------------- +#ifndef DOXYGEN_SHOULD_SKIP_THIS namespace std { - /// Hash function to allow BitVector to be used with maps and sets (must be in std). +#endif // DOXYGEN_SHOULD_SKIP_THIS + /// Hash function to allow BitVector to be used with maps and sets. + /// This is added to the std namespace so that BitVectors can be used + /// in data structures that require hashing (such as unordered_map) template <> struct hash { std::size_t operator()(const emp::BitVector & bv) const { return bv.Hash(); } }; +#ifndef DOXYGEN_SHOULD_SKIP_THIS } +#endif #endif // #ifndef EMP_BITS_BITVECTOR_HPP_INCLUDE diff --git a/include/emp/config/ArgManager.hpp b/include/emp/config/ArgManager.hpp index 2d3fdee2e0..9abdb9dc23 100644 --- a/include/emp/config/ArgManager.hpp +++ b/include/emp/config/ArgManager.hpp @@ -684,11 +684,17 @@ namespace emp { }; + #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace cl { + #endif // DOXYGEN_SHOULD_SKIP_THIS /// A simple class to manage command-line arguments that were passed in. /// Derived from emp::vector, but with added functionality for argument handling. - class ArgManager : public emp::vector { + class + #ifdef DOXYGEN_SHOULD_SKIP_THIS + cl:: + #endif + ArgManager : public emp::vector { private: using parent_t = emp::vector; emp::vector arg_names; @@ -796,8 +802,9 @@ namespace emp { }; - + #ifndef DOXYGEN_SHOULD_SKIP_THIS } + #endif // DOXYGEN_SHOULD_SKIP_THIS } #endif // #ifndef EMP_CONFIG_ARGMANAGER_HPP_INCLUDE diff --git a/include/emp/web/js_utils.hpp b/include/emp/web/js_utils.hpp index 810ce5efa8..53e5723fcd 100644 --- a/include/emp/web/js_utils.hpp +++ b/include/emp/web/js_utils.hpp @@ -38,9 +38,9 @@ namespace emp { /// /// Now we can pass type_string.c_str() into MAIN_THREAD_EM_ASM: /// @code - /// `MAIN_THREAD_EM_ASM({ + /// MAIN_THREAD_EM_ASM({ /// var value = getValue($0, $1); - /// }, pointer, type_string.c_str();` + /// }, pointer, type_string.c_str(); /// @endcode std::map get_type_to_string_map() { From e36d8c003a3687270285f2713fce42ed9eb8e11b Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 01:05:13 -0400 Subject: [PATCH 52/80] exlude bibliography from replace_tabs --- ci/impl/replace_tabs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/impl/replace_tabs.sh b/ci/impl/replace_tabs.sh index 4407a66287..5772a20646 100755 --- a/ci/impl/replace_tabs.sh +++ b/ci/impl/replace_tabs.sh @@ -6,7 +6,7 @@ set -e # greq -qI tests if file is binary # adapted from https://stackoverflow.com/a/29689345 -TARGETS=$(find . -type f ! -path "./third-party/*" ! -path "./.git/*" ! -path "*/assets/*" ! -path "*Makefile" ! -path "*Maketemplate*" ! -path "./node_modules/*" -exec grep -qI . {} ';' -print) +TARGETS=$(find . -type f ! -path "./third-party/*" ! -path "./.git/*" ! -path "*/assets/*" ! -path "*Makefile" ! -path "*Maketemplate*" ! -path "./node_modules/*" ! -path ./doc/bibliography.bib -exec grep -qI . {} ';' -print) for filename in ${TARGETS} do From f016027f87d00ac86f4f4d5923374cd684191f2a Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 01:08:41 -0400 Subject: [PATCH 53/80] Fix formatting --- include/emp/Evolve/Systematics.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 25ef9da16c..36dd9f64ec 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -948,8 +948,7 @@ namespace emp { /** Calculates mean pairwise distance between extant taxa * @verbatim embed:rst:inline :cite:p:`webbExploringPhylogeneticStructure2000` @endverbatim - * . - * This measurement is also called Average Taxonomic Diversity + * This measurement is also called Average Taxonomic Diversity * @verbatim embed:rst:inline :cite:p:`warwickTaxonomicDistinctnessEnvironmental1998` @endverbatim * (for demonstration of equivalence see * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim From 5d6b83bd74c6eea810c22db69b7d37947b5e8168 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 01:09:41 -0400 Subject: [PATCH 54/80] Fix tidy --- include/emp/Evolve/Systematics.hpp | 46 +++++++++++++++--------------- include/emp/config/ArgManager.hpp | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 36dd9f64ec..74ef87a864 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -8,8 +8,8 @@ * @brief Track genotypes, species, clades, or lineages of organisms in a world. * * - * @todo It would theoretically be possible to - * achieve slight memory savings by not maintaining a set of pointers to ancestors + * @todo It would theoretically be possible to + * achieve slight memory savings by not maintaining a set of pointers to ancestors */ #ifndef EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE @@ -440,7 +440,7 @@ namespace emp { /// grouped by phenotypes. If the organism's position is used, the evolutionary path through /// space is tracked. Any other aspect of organisms can be tracked this way as well. /// @tparam ORG The type of organisms in your world (i.e. the input to your taxon-calculation function) - /// @tparam ORG_INFO The type being used to represent the piece of information that defines taxa + /// @tparam ORG_INFO The type being used to represent the piece of information that defines taxa /// (i.e. the output from your taxon-calculation function) /// @tparam DATA_STRUCT (optional) The type being used to hold supplemental per-taxon data template @@ -631,7 +631,7 @@ namespace emp { /// next org is added or the next time an org is marked for removal. /// Use this version of the function if you're tracking systematics based /// on the positions of individuals in the population. - /// @param pos Specifies the location in the world of the individual to + /// @param pos Specifies the location in the world of the individual to /// be removed after the next reproduction event. void RemoveOrgAfterRepro(WorldPosition pos); /// Mark an instance of a taxon to be removed; track when it's gone. @@ -888,10 +888,10 @@ namespace emp { // ===== Functions for calculating phylogeny topology metrics ==== - /** From + /** From * @verbatim embed:rst:inline :cite:p:`faithConservationEvaluationPhylogenetic1992` @endverbatim - * , reviewed in - * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim + * , reviewed in + * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim * phylogenetic diversity is * the sum of edges in the minimal spanning tree connected the taxa you're * calculating diversity of. @@ -923,17 +923,17 @@ namespace emp { /** This is a metric of how distinct \c tax is from the rest of the population. * - * (From + * (From * @verbatim embed:rst:inline :cite:p:`wrightWhatProtectSystematics1991` @endverbatim - * ; reviewed in - * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim + * ; reviewed in + * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim * */ double GetTaxonDistinctiveness(Ptr tax) const {return 1.0/GetDistanceToRoot(tax);} - /** This metric (from - * @verbatim embed:rst:inline :cite:p:`isaacMammalsEDGEConservation2007` @endverbatim - * ; reviewed in - * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim + /** This metric (from + * @verbatim embed:rst:inline :cite:p:`isaacMammalsEDGEConservation2007` @endverbatim + * ; reviewed in + * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim * ) measures how * distinct \c tax is from the rest of the population, weighted for the amount of * unique evolutionary history that it represents. @@ -946,11 +946,11 @@ namespace emp { * Assumes the tree is all connected. Will return -1 if this assumption isn't met.*/ double GetEvolutionaryDistinctiveness(Ptr tax, double time) const; - /** Calculates mean pairwise distance between extant taxa + /** Calculates mean pairwise distance between extant taxa * @verbatim embed:rst:inline :cite:p:`webbExploringPhylogeneticStructure2000` @endverbatim * This measurement is also called Average Taxonomic Diversity * @verbatim embed:rst:inline :cite:p:`warwickTaxonomicDistinctnessEnvironmental1998` @endverbatim - * (for demonstration of equivalence see + * (for demonstration of equivalence see * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim * ). This measurement tells * you about the amount of distinctness in the community as a whole. @@ -981,8 +981,8 @@ namespace emp { return Sum(v); } - /** Calculates variance of pairwise distance between extant taxa. - * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim + /** Calculates variance of pairwise distance between extant taxa. + * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim * points out that this is a measure of phylogenetic regularity. * * This measurement assumes that the tree is fully connected. Will return -1 @@ -1030,7 +1030,7 @@ namespace emp { /** Calculate Sackin Index of this tree ( * @verbatim embed:rst:inline :cite:p:`sackinGoodBadPhenograms1972` @endverbatim - * ; reviewed in + * ; reviewed in * @verbatim embed:rst:inline :cite:p:`shaoTreeBalance1990` @endverbatim * ). * Measures tree balance*/ @@ -1042,16 +1042,16 @@ namespace emp { return sackin; } - /** Calculate Colless-Like Index of this tree (based on + /** Calculate Colless-Like Index of this tree (based on * @verbatim embed:rst:inline :cite:p:`collessReviewPhylogeneticsTheory1982` @endverbatim - * ; reviewed in + * ; reviewed in * @verbatim embed:rst:inline :cite:p:`shaoTreeBalance1990` @endverbatim * ; refined by * @verbatim embed:rst:inline :cite:p:`mirSoundCollesslikeBalance2018` @endverbatim * ). - * + * * Measures tree balance. The standard Colless index only works for bifurcating trees, - * so this will be a Colless-like Index + * so this will be a Colless-like Index * @verbatim embed:rst:inline :cite:p:`mirSoundCollesslikeBalance2018` @endverbatim * */ double CollessLikeIndex() const { diff --git a/include/emp/config/ArgManager.hpp b/include/emp/config/ArgManager.hpp index 9abdb9dc23..a06c7ca254 100644 --- a/include/emp/config/ArgManager.hpp +++ b/include/emp/config/ArgManager.hpp @@ -690,7 +690,7 @@ namespace emp { /// A simple class to manage command-line arguments that were passed in. /// Derived from emp::vector, but with added functionality for argument handling. - class + class #ifdef DOXYGEN_SHOULD_SKIP_THIS cl:: #endif From ed30ec4754655bf10c1f9008ed15b51c1f99797b Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 01:57:11 -0400 Subject: [PATCH 55/80] Fix doc erros --- doc/bibliography.bib | 2 -- doc/library/evolve/evolve.md | 2 +- include/emp/Evolve/Systematics.hpp | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/bibliography.bib b/doc/bibliography.bib index 5eb239760b..ad279a42c6 100644 --- a/doc/bibliography.bib +++ b/doc/bibliography.bib @@ -24,7 +24,6 @@ @article{dolsonInterpretingTapeLife2020 journal = {Artificial Life}, author = {Dolson, Emily and Lalejini, Alexander and Jorgensen, Steven and Ofria, Charles}, year = {2020}, - doi = {10.1162/artl\_a\_00313}, url = {https://doi.org/10.1162/artl\_a\_00313} } @@ -34,7 +33,6 @@ @article{faithConservationEvaluationPhylogenetic1992 issn = {0006-3207}, url = {http://www.sciencedirect.com/science/article/pii/0006320792912013}, doi = {10.1016/0006-3207(92)91201-3}, - abstract = {Protecting biological diversity with limited resources may require placing conservation priorities on different taxa. A system of priorities that reflects the value of taxonomic diversity can be achieved by setting priorities such that the subset of taxa that is protected has maximum underlying feature diversity. Such feature diversity of taxon subsets is difficult to estimate directly, but can be predicted by the cladistic/phylogenetic relationships among the taxa. In this study, a simple measure of phylogenetic diversity is defined based on cladistic information. The measure of phylogenetic diversity, {PD}, is contrasted with a measure of taxic diversity recently developed by Vane-Wright et al. (Biol. Conserv., 55, 1991). In re-examining reserve-selection scenarios based on a phylogeny of bumble bees (Apidae), {PD} produces quite different priorities for species conservation, relative to taxic diversity. The potential application of {PD} at levels below that of the species is then illustrated using a {mtDNA} phylogeny for populations of crested newts Triturus cristatus. Calculation of {PD} for different population subsets shows that protection of populations at either of two extremes of the geographic range of the group can significantly increase the phylogenetic diversity that is protected.}, pages = {1--10}, number = {1}, journal = {Biological Conservation}, diff --git a/doc/library/evolve/evolve.md b/doc/library/evolve/evolve.md index 6d2053fbdc..289b837e5a 100644 --- a/doc/library/evolve/evolve.md +++ b/doc/library/evolve/evolve.md @@ -195,7 +195,7 @@ As an example (again, building on the previous examples): ```cpp // Assume stuff happens that causes my_org to die -// We notify the systematics manager that this has happened by calling remove_org +// We notify the systematics manager that this has happened by calling RemoveOrg // Note that remove_org takes the taxon of the dead organism as an argument, not // the organism itself sys.RemoveOrg(taxon) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 74ef87a864..d8ddb57c90 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -924,7 +924,7 @@ namespace emp { /** This is a metric of how distinct \c tax is from the rest of the population. * * (From - * @verbatim embed:rst:inline :cite:p:`wrightWhatProtectSystematics1991` @endverbatim + * @verbatim embed:rst:inline :cite:p:`vane-wrightWhatProtectSystematics1991` @endverbatim * ; reviewed in * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim * */ From 3d708a819e4125dce8ba384c707081c2b5d94245 Mon Sep 17 00:00:00 2001 From: Emily Dolson Date: Tue, 4 Jul 2023 02:20:55 -0400 Subject: [PATCH 56/80] Fix link --- LICENSE.md | 4 ++++ doc/bibliography.bib | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index 1e0fc700e9..4ad7f8c871 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -10,9 +10,13 @@ Contributors: Charles Ofria, Alex Lalejini, Robin Miller, Matthew Moreno, + Austin Ferguson, + Jose Guadalupe Hernandez, Katherine Perry, Santiago Rodriguez-Papa, Oliver Baldwin Edwards, + Sarah Boyd, + Tait Weicht, Jason Stredwick, Raheem Clemons, Anya Vostinar, diff --git a/doc/bibliography.bib b/doc/bibliography.bib index ad279a42c6..83dae8b6aa 100644 --- a/doc/bibliography.bib +++ b/doc/bibliography.bib @@ -24,7 +24,7 @@ @article{dolsonInterpretingTapeLife2020 journal = {Artificial Life}, author = {Dolson, Emily and Lalejini, Alexander and Jorgensen, Steven and Ofria, Charles}, year = {2020}, - url = {https://doi.org/10.1162/artl\_a\_00313} + url = {https://direct.mit.edu/artl/article/26/1/58/93272/Interpreting-the-Tape-of-Life-Ancestry-Based} } @article{faithConservationEvaluationPhylogenetic1992, From 1b7d397e156a68d15a30682f39ebac79c52d68a7 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 15:47:06 -0500 Subject: [PATCH 57/80] Strip off-topic diffs from World.hpp --- include/emp/Evolve/World.hpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/include/emp/Evolve/World.hpp b/include/emp/Evolve/World.hpp index e0b62ac9bd..762ddca409 100644 --- a/include/emp/Evolve/World.hpp +++ b/include/emp/Evolve/World.hpp @@ -972,7 +972,7 @@ namespace emp { // Track the new systematics info for (Ptr > s : systematics) { - s->AddOrg(*new_org, pos); + s->AddOrg(*new_org, pos, (int) update); } SetupOrg(*new_org, pos, *random_ptr); @@ -996,7 +996,7 @@ namespace emp { } for (Ptr > s : systematics) { - s->RemoveOrgAfterRepro(pos); // Notify systematics about organism removal + s->RemoveOrgAfterRepro(pos, update); // Notify systematics about organism removal } } @@ -1489,13 +1489,6 @@ namespace emp { pop.resize(0); std::swap(pops[0], pops[1]); // Move next pop into place. - // Tell systematics manager to swap next population and population - // Needs to happen here so that you can refer to systematics in - // OnPlacement functions - for (Ptr> s : systematics) { - s->Update(); - } - // Update the active population. num_orgs = 0; for (size_t i = 0; i < pop.size(); i++) { @@ -1505,7 +1498,12 @@ namespace emp { } } - // 3. Handle any data files that need to be printed this update. + // 3. Handle systematics and any data files that need to be printed this update. + + // Tell systematics manager to swap next population and population + for (Ptr> s : systematics) { + s->Update(); + } for (auto file : files) file->Update(update); From 05d6ca8dcd0222509334980b51a64cb32ec6567c Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 15:50:59 -0500 Subject: [PATCH 58/80] Strip off-topic diffs from SystematicsAnalysis.hpp --- include/emp/Evolve/SystematicsAnalysis.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/emp/Evolve/SystematicsAnalysis.hpp b/include/emp/Evolve/SystematicsAnalysis.hpp index bf6ccc70f5..e6a975d9ff 100644 --- a/include/emp/Evolve/SystematicsAnalysis.hpp +++ b/include/emp/Evolve/SystematicsAnalysis.hpp @@ -23,9 +23,8 @@ namespace emp { /// @param s the systematics manager to search in. Must have more than 0 active taxa. template Ptr FindDominant(systematics_t & s) { - emp_assert(s.GetNumActive() > 0 && "Trying to call FindDominant on empty population"); - double best = (*(s.GetActive().begin()))->GetData().GetFitness(); - Ptr best_tax = (*(s.GetActive().begin())); + double best = -999999; + Ptr best_tax = nullptr; for (Ptr tax : s.GetActive()) { double f = tax->GetData().GetFitness(); if (f > best) { From d366721fe180a5f287909b4c2c6f076b201da5a8 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 15:54:49 -0500 Subject: [PATCH 59/80] Remove off-topic diffs from Evolve/Systematics.cpp --- tests/Evolve/Systematics.cpp | 926 +++++++++++------------------------ 1 file changed, 285 insertions(+), 641 deletions(-) diff --git a/tests/Evolve/Systematics.cpp b/tests/Evolve/Systematics.cpp index b1e5ff4c6d..c5c73ad631 100644 --- a/tests/Evolve/Systematics.cpp +++ b/tests/Evolve/Systematics.cpp @@ -15,7 +15,6 @@ #ifndef NDEBUG #define TDEBUG #endif - #include "emp/base/vector.hpp" #include "emp/Evolve/SystematicsAnalysis.hpp" #include "emp/Evolve/Systematics.hpp" @@ -23,88 +22,83 @@ #include "emp/Evolve/World_output.hpp" #include "emp/hardware/AvidaGP.hpp" -TEST_CASE("Test Systematics", "[Evolve]") { + +TEST_CASE("Test Systematics", "[Evolve]") +{ + // Taxon emp::Taxon tx(0, "a"); - CHECK(tx.GetID() == 0); - CHECK(tx.GetParent() == nullptr); - CHECK(tx.GetInfo() == "a"); - CHECK(tx.GetNumOrgs() == 0); - CHECK(tx.GetTotOrgs() == 0); + REQUIRE(tx.GetID() == 0); + REQUIRE(tx.GetParent() == nullptr); + REQUIRE(tx.GetInfo() == "a"); + REQUIRE(tx.GetNumOrgs() == 0); + REQUIRE(tx.GetTotOrgs() == 0); tx.AddOrg(); - CHECK(tx.GetNumOrgs() == 1); + REQUIRE(tx.GetNumOrgs() == 1); tx.RemoveOrg(); - CHECK(tx.GetNumOrgs() == 0); - CHECK(tx.GetTotOrgs() == 1); - CHECK(tx.GetTotalOffspring() == 0); + REQUIRE(tx.GetNumOrgs() == 0); + REQUIRE(tx.GetTotOrgs() == 1); + REQUIRE(tx.GetTotalOffspring() == 0); emp::Ptr< emp::Taxon > parentPtr(&tx); emp::Taxon tx_1(1, "b", parentPtr); - CHECK(tx_1.GetParent() == parentPtr); + REQUIRE(tx_1.GetParent() == parentPtr); tx_1.AddTotalOffspring(); - CHECK(tx_1.GetTotalOffspring() == 1); - CHECK(tx.GetTotalOffspring() == 1); + REQUIRE(tx_1.GetTotalOffspring() == 1); + REQUIRE(tx.GetTotalOffspring() == 1); // Systematics std::function calc_taxon = [](double & o){ return o > 50.0 ? "large" : "small"; }; emp::Systematics sys1(calc_taxon); - CHECK(sys1.GetTrackSynchronous() == false); - CHECK(sys1.GetNumAncestors() == 0); - CHECK(sys1.GetNumActive() == 0); - CHECK(sys1.GetNumOutside() == 0); - CHECK(sys1.GetTreeSize() == 0); - CHECK(sys1.GetNumTaxa() == 0); + REQUIRE(sys1.GetTrackSynchronous() == false); + REQUIRE(sys1.GetNumAncestors() == 0); + REQUIRE(sys1.GetNumActive() == 0); + REQUIRE(sys1.GetNumOutside() == 0); + REQUIRE(sys1.GetTreeSize() == 0); + REQUIRE(sys1.GetNumTaxa() == 0); sys1.SetTrackSynchronous(true); - CHECK(sys1.GetTrackSynchronous() == true); - sys1.AddOrg(15.0, {0,0}); - CHECK(sys1.GetNumActive() == 1); - CHECK(sys1.GetTaxonAt({0,0})->GetInfo() == "small"); - CHECK(sys1.IsTaxonAt({0,0})); - sys1.AddOrg(56.0, {1,1}); - CHECK(sys1.GetNumActive() == 2); - CHECK(sys1.GetTaxonAt({1,1})->GetInfo() == "large"); - CHECK(sys1.IsTaxonAt({1,1})); + sys1.AddOrg(15.0, {0,0}, 0); + REQUIRE(sys1.GetNumActive() == 1); + REQUIRE(sys1.GetTaxonAt(0)->GetInfo() == "small"); + sys1.AddOrg(56.0, {1,1}, 0); + REQUIRE(sys1.GetNumActive() == 2); + REQUIRE(sys1.GetNextTaxonAt(1)->GetInfo() == "large"); sys1.RemoveOrg({1,1}); - CHECK(!sys1.IsTaxonAt({1,1})); - CHECK(sys1.GetNumActive() == 1); - sys1.AddOrg(56.0, {1,0}); - CHECK(sys1.IsTaxonAt({1,0})); - CHECK(!sys1.RemoveOrg({1,0})); - CHECK(!sys1.IsTaxonAt({1,0})); + REQUIRE(sys1.GetNumActive() == 1); // Base setters and getters - CHECK(sys1.GetStoreActive() == true); - CHECK(sys1.GetStoreAncestors() == true); - CHECK(sys1.GetStoreOutside() == false); - CHECK(sys1.GetArchive() == true); - CHECK(sys1.GetStorePosition() == true); + REQUIRE(sys1.GetStoreActive() == true); + REQUIRE(sys1.GetStoreAncestors() == true); + REQUIRE(sys1.GetStoreOutside() == false); + REQUIRE(sys1.GetArchive() == true); + REQUIRE(sys1.GetStorePosition() == true); sys1.SetStoreActive(false); - CHECK(sys1.GetStoreActive() == false); + REQUIRE(sys1.GetStoreActive() == false); sys1.SetStoreAncestors(false); - CHECK(sys1.GetStoreAncestors() == false); + REQUIRE(sys1.GetStoreAncestors() == false); sys1.SetStoreOutside(true); - CHECK(sys1.GetStoreOutside() == true); + REQUIRE(sys1.GetStoreOutside() == true); sys1.SetArchive(false); - CHECK(sys1.GetArchive() == false); + REQUIRE(sys1.GetArchive() == false); sys1.SetStorePosition(false); - CHECK(sys1.GetStorePosition() == false); + REQUIRE(sys1.GetStorePosition() == false); #ifndef NDEBUG - sys1.AddDeleteriousStepDataNode(); - CHECK(emp::assert_last_fail); + sys1.AddDeleteriousStepDataNodeImpl(true); + REQUIRE(emp::assert_last_fail); emp::assert_clear(); - sys1.AddVolatilityDataNode(); - CHECK(emp::assert_last_fail); + sys1.AddVolatilityDataNodeImpl(true); + REQUIRE(emp::assert_last_fail); emp::assert_clear(); - sys1.AddUniqueTaxaDataNode(); - CHECK(emp::assert_last_fail); + sys1.AddUniqueTaxaDataNodeImpl(true); + REQUIRE(emp::assert_last_fail); emp::assert_clear(); - sys1.AddMutationCountDataNode(); - CHECK(emp::assert_last_fail); + sys1.AddMutationCountDataNodeImpl(true); + REQUIRE(emp::assert_last_fail); emp::assert_clear(); #endif @@ -113,157 +107,138 @@ TEST_CASE("Test Systematics", "[Evolve]") { //emp::Systematics sys2(calc_taxon) my_taxon taxon1(1, "medium"); emp::Ptr ptr1 = &taxon1; - CHECK(emp::LineageLength(ptr1) == 1); + REQUIRE(emp::LineageLength(ptr1) == 1); my_taxon taxon2(1, "medium", ptr1); emp::Ptr ptr2 = &taxon2; - CHECK(emp::LineageLength(ptr1) == 1); - CHECK(emp::LineageLength(ptr2) == 2); + REQUIRE(emp::LineageLength(ptr1) == 1); + REQUIRE(emp::LineageLength(ptr2) == 2); std::unordered_map muts; muts["short"] = 12; muts["tall"] = 3; taxon2.GetData().RecordMutation(muts); - CHECK(taxon2.GetData().mut_counts.size() == 2); - CHECK(taxon2.GetData().mut_counts["tall"] == 3); + REQUIRE(taxon2.GetData().mut_counts.size() == 2); + REQUIRE(taxon2.GetData().mut_counts["tall"] == 3); emp::vector types; types.push_back("tall"); types.push_back("short"); - CHECK(emp::CountMuts(ptr2, types) == 15); - CHECK(emp::CountMutSteps(ptr2, types) == 2); - CHECK(emp::CountMutSteps(ptr2, "short") == 1); + REQUIRE(emp::CountMuts(ptr2, types) == 15); + REQUIRE(emp::CountMutSteps(ptr2, types) == 2); + REQUIRE(emp::CountMutSteps(ptr2, "short") == 1); muts["short"] = 4; taxon1.GetData().RecordMutation(muts); - CHECK(emp::CountMuts(ptr1, "short") == 4); - CHECK(emp::CountMuts(ptr2, "short") == 16); - CHECK(emp::CountMutSteps(ptr1, "short") == 1); - CHECK(emp::CountMutSteps(ptr2, "short") == 2); - - emp::Systematics sys([](const int & i){return i;}, true, true, true, false); - - // std::cout << "\nAddOrg 25 (id1, no parent)\n"; - sys.SetUpdate(0); - auto id1 = sys.AddOrg(25, nullptr); - // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; - sys.SetUpdate(6); - auto id2 = sys.AddOrg(-10, id1); - // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; - sys.SetUpdate(10); - auto id3 = sys.AddOrg(26, id1); - // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; - sys.SetUpdate(25); - auto id4 = sys.AddOrg(27, id2); - // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; - sys.SetUpdate(32); - auto id5 = sys.AddOrg(28, id2); - // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; - sys.SetUpdate(39); - auto id6 = sys.AddOrg(29, id5); - // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; - sys.SetUpdate(6); - auto id7 = sys.AddOrg(30, id1); - - CHECK(*id1 < *id2); - CHECK(sys.Parent(id2) == id1); - - // std::cout << "\nRemoveOrg (id2)\n"; + REQUIRE(emp::CountMuts(ptr1, "short") == 4); + REQUIRE(emp::CountMuts(ptr2, "short") == 16); + REQUIRE(emp::CountMutSteps(ptr1, "short") == 1); + REQUIRE(emp::CountMutSteps(ptr2, "short") == 2); + + emp::Systematics sys([](const int & i){return i;}, true, true, true, false); + + std::cout << "\nAddOrg 25 (id1, no parent)\n"; + auto id1 = sys.AddOrg(25, nullptr, 0); + std::cout << "\nAddOrg -10 (id2; parent id1)\n"; + auto id2 = sys.AddOrg(-10, id1, 6); + std::cout << "\nAddOrg 26 (id3; parent id1)\n"; + auto id3 = sys.AddOrg(26, id1, 10); + std::cout << "\nAddOrg 27 (id4; parent id2)\n"; + auto id4 = sys.AddOrg(27, id2, 25); + std::cout << "\nAddOrg 28 (id5; parent id2)\n"; + auto id5 = sys.AddOrg(28, id2, 32); + std::cout << "\nAddOrg 29 (id6; parent id5)\n"; + auto id6 = sys.AddOrg(29, id5, 39); + std::cout << "\nAddOrg 30 (id7; parent id1)\n"; + auto id7 = sys.AddOrg(30, id1, 6); + + + std::cout << "\nRemoveOrg (id2)\n"; sys.RemoveOrg(id1); sys.RemoveOrg(id2); double mpd = sys.GetMeanPairwiseDistance(); - // std::cout << "MPD: " << mpd <GetNumOff() == 0); CHECK(outside_taxon->GetParent()->GetID() == 8); - CHECK(sys.GetMaxDepth() == 8); - auto active = sys.GetActive(); emp::vector>> active_vec(active.begin(), active.end()); emp::Sort(active_vec, [](emp::Ptr> & a, emp::Ptr> & b){ @@ -396,92 +369,80 @@ TEST_CASE("Test Systematics", "[Evolve]") { CHECK(active_vec[10]->GetNumOrgs() == 1); CHECK(active_vec[10]->GetNumOff() == 0); CHECK(active_vec[10]->GetParent()->GetID() == 17); + } -TEST_CASE("Test not tracking ancestors", "[Evolve]") { +TEST_CASE("Test not tracking ancestors", "[Evolve]") +{ emp::Systematics sys([](const int & i){return i;}, true, false, false, false); - // std::cout << "\nAddOrg 25 (id1, no parent)\n"; - sys.SetUpdate(0); - auto id1 = sys.AddOrg(25, nullptr); - // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; - sys.SetUpdate(6); - auto id2 = sys.AddOrg(-10, id1); - // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; - sys.SetUpdate(10); - auto id3 = sys.AddOrg(26, id1); - // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; - sys.SetUpdate(25); - auto id4 = sys.AddOrg(27, id2); - // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; - sys.SetUpdate(32); - auto id5 = sys.AddOrg(28, id2); - // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; - sys.SetUpdate(39); - auto id6 = sys.AddOrg(29, id5); - // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; - sys.SetUpdate(6); - auto id7 = sys.AddOrg(30, id1); - - - // std::cout << "\nRemoveOrg (id2)\n"; + std::cout << "\nAddOrg 25 (id1, no parent)\n"; + auto id1 = sys.AddOrg(25, nullptr, 0); + std::cout << "\nAddOrg -10 (id2; parent id1)\n"; + auto id2 = sys.AddOrg(-10, id1, 6); + std::cout << "\nAddOrg 26 (id3; parent id1)\n"; + auto id3 = sys.AddOrg(26, id1, 10); + std::cout << "\nAddOrg 27 (id4; parent id2)\n"; + auto id4 = sys.AddOrg(27, id2, 25); + std::cout << "\nAddOrg 28 (id5; parent id2)\n"; + auto id5 = sys.AddOrg(28, id2, 32); + std::cout << "\nAddOrg 29 (id6; parent id5)\n"; + auto id6 = sys.AddOrg(29, id5, 39); + std::cout << "\nAddOrg 30 (id7; parent id1)\n"; + auto id7 = sys.AddOrg(30, id1, 6); + + + std::cout << "\nRemoveOrg (id2)\n"; sys.RemoveOrg(id1); sys.RemoveOrg(id2); - // std::cout << "\nAddOrg 31 (id8; parent id7)\n"; - sys.SetUpdate(11); - auto id8 = sys.AddOrg(31, id7); - // std::cout << "\nAddOrg 32 (id9; parent id8)\n"; - sys.SetUpdate(19); - auto id9 = sys.AddOrg(32, id8); + double mpd = sys.GetMeanPairwiseDistance(); + std::cout << "Mean Pairwise Distance = " << mpd << "\n"; + + std::cout << "\nAddOrg 31 (id8; parent id7)\n"; + auto id8 = sys.AddOrg(31, id7, 11); + std::cout << "\nAddOrg 32 (id9; parent id8)\n"; + auto id9 = sys.AddOrg(32, id8, 19); - // std::cout << "\nAddOrg 33 (id10; parent id8)\n"; - auto id10 = sys.AddOrg(33, id8); + std::cout << "\nAddOrg 33 (id10; parent id8)\n"; + auto id10 = sys.AddOrg(33, id8, 19); sys.RemoveOrg(id7); sys.RemoveOrg(id8); sys.RemoveOrg(id10); - // std::cout << "\nAddOrg 34 (id11; parent id9)\n"; - sys.SetUpdate(22); - auto id11 = sys.AddOrg(34, id9); - // std::cout << "\nAddOrg 35 (id12; parent id10)\n"; - sys.SetUpdate(23); - auto id12 = sys.AddOrg(35, id11); + + std::cout << "\nAddOrg 34 (id11; parent id9)\n"; + auto id11 = sys.AddOrg(34, id9, 22); + std::cout << "\nAddOrg 35 (id12; parent id10)\n"; + auto id12 = sys.AddOrg(35, id11, 23); sys.RemoveOrg(id9); - // std::cout << "\nAddOrg 36 (id13; parent id12)\n"; - sys.SetUpdate(27); - auto id13 = sys.AddOrg(36, id12); - // std::cout << "\nAddOrg 37 (id14; parent id13)\n"; - sys.SetUpdate(30); - auto id14 = sys.AddOrg(37, id13); + std::cout << "\nAddOrg 36 (id13; parent id12)\n"; + auto id13 = sys.AddOrg(36, id12, 27); + std::cout << "\nAddOrg 37 (id14; parent id13)\n"; + auto id14 = sys.AddOrg(37, id13, 30); sys.RemoveOrg(id13); - // std::cout << "\nAddOrg 38 (id15; parent id14)\n"; - sys.SetUpdate(33); - auto id15 = sys.AddOrg(38, id14); + std::cout << "\nAddOrg 38 (id15; parent id14)\n"; + auto id15 = sys.AddOrg(38, id14, 33); sys.RemoveOrg(id14); - // std::cout << "\nAddOrg 39 (id16; parent id11)\n"; - sys.SetUpdate(35); - auto id16 = sys.AddOrg(39, id11); - // std::cout << "\nAddOrg 40 (id17; parent id11)\n"; - auto id17 = sys.AddOrg(40, id11); + std::cout << "\nAddOrg 39 (id16; parent id11)\n"; + auto id16 = sys.AddOrg(39, id11, 35); + std::cout << "\nAddOrg 40 (id17; parent id11)\n"; + auto id17 = sys.AddOrg(40, id11, 35); - // std::cout << "\nAddOrg 41 (id18; parent id17)\n"; - sys.SetUpdate(36); - auto id18 = sys.AddOrg(41, id17); + std::cout << "\nAddOrg 41 (id18; parent id17)\n"; + auto id18 = sys.AddOrg(41, id17, 36); std::cout << "\nAddOrg 42 (id19; parent id17)\n"; - sys.SetUpdate(37); - auto id19 = sys.AddOrg(42, id17); - - CHECK(id17->GetTotalOffspring() > 0); + auto id19 = sys.AddOrg(42, id17, 37); + REQUIRE(id17->GetTotalOffspring() > 0); std::cout << "id3 = " << id3 << std::endl; std::cout << "id4 = " << id4 << std::endl; @@ -571,14 +532,11 @@ TEST_CASE("Pointer to systematics", "[evo]") { sys.Delete(); } -TEST_CASE("Test Data Struct", "[evo]") { +TEST_CASE("Test Data Struct", "[evo]") +{ emp::Ptr >> sys; sys.New([](const int & i){return i;}, true, true, true, false); - sys->AddMutationCountDataNode(); - sys->AddVolatilityDataNode(); - sys->AddUniqueTaxaDataNode(); - auto id1 = sys->AddOrg(1, nullptr); id1->GetData().fitness.Add(2); id1->GetData().phenotype = 6; @@ -600,79 +558,36 @@ TEST_CASE("Test Data Struct", "[evo]") { id4->GetData().phenotype = 3; auto id5 = sys->AddOrg(5, id4); - std::unordered_map muts; - muts["substitution"] = 1; - id5->GetData().RecordMutation(muts); - id5->GetData().RecordFitness(2); - id5->GetData().RecordPhenotype(6); + id5->GetData().mut_counts["substitution"] = 1; + id5->GetData().fitness.Add(2); + id5->GetData().phenotype = 6; - CHECK(id5->GetData().GetPhenotype() == 6); - CHECK(id5->GetData().GetFitness() == 2); CHECK(CountMuts(id4) == 3); CHECK(CountDeleteriousSteps(id4) == 1); CHECK(CountPhenotypeChanges(id4) == 1); CHECK(CountUniquePhenotypes(id4) == 2); - CHECK(LineageLength(id4) == 3); CHECK(CountMuts(id3) == 5); CHECK(CountDeleteriousSteps(id3) == 1); CHECK(CountPhenotypeChanges(id3) == 0); CHECK(CountUniquePhenotypes(id3) == 1); - CHECK(LineageLength(id3) == 2); CHECK(CountMuts(id5) == 4); CHECK(CountDeleteriousSteps(id5) == 2); CHECK(CountPhenotypeChanges(id5) == 2); CHECK(CountUniquePhenotypes(id5) == 2); - CHECK(LineageLength(id5) == 4); - - CHECK(FindDominant(*sys) == id4); - - sys->GetDataNode("mutation_count")->PullData(); - CHECK(sys->GetDataNode("mutation_count")->GetMean() == Approx(2.8)); - - sys->GetDataNode("volatility")->PullData(); - CHECK(sys->GetDataNode("volatility")->GetMean() == Approx(0.6)); - - sys->GetDataNode("unique_taxa")->PullData(); - CHECK(sys->GetDataNode("unique_taxa")->GetMean() == Approx(1.4)); - sys.Delete(); - emp::Ptr> sys2; - sys2.New([](const int & i){return i;}, true, true, true, false); - sys2->AddDeleteriousStepDataNode(); - - auto new_tax = sys2->AddOrg(1, nullptr); - new_tax->GetData().RecordFitness(2); - CHECK(new_tax->GetData().GetFitness() == 2); - new_tax->GetData().RecordFitness(4); - CHECK(new_tax->GetData().GetFitness() == 3); - - emp::datastruct::fitness fit_data; - fit_data.RecordFitness(5); - new_tax->SetData(fit_data); - CHECK(new_tax->GetData().GetFitness() == 5); - - auto tax2 = sys2->AddOrg(2, new_tax); - tax2->GetData().RecordFitness(1); - - sys->GetDataNode("deleterious_steps")->PullData(); - CHECK(sys->GetDataNode("deleterious_steps")->GetMean() == Approx(.5)); - - - sys2.Delete(); - - } + TEST_CASE("World systematics integration", "[evo]") { - std::function, emp::datastruct::mut_landscape_info>>, emp::vector &)> setup_phenotype = [](emp::Ptr, emp::datastruct::mut_landscape_info>> tax, emp::vector & org){ - tax->GetData().phenotype = emp::Sum(tax->GetInfo()); - }; + // std::function, emp::datastruct::mut_landscape_info>>)> setup_phenotype = [](emp::Ptr, emp::datastruct::mut_landscape_info>> tax){ + // tax->GetData().phenotype = emp::Sum(tax->GetInfo()); + // }; using systematics_t = emp::Systematics< emp::vector, @@ -687,15 +602,14 @@ TEST_CASE("World systematics integration", "[evo]") { world.SetMutFun([](emp::vector & org, emp::Random & r){return 0;}); - sys->OnNew(setup_phenotype); + // world.GetSystematics().OnNew(setup_phenotype); world.InjectAt(emp::vector({1,2,3}), 0); - CHECK(sys->GetTaxonAt(0)->GetData().phenotype == 6); - sys->GetTaxonAt(0)->GetData().RecordPhenotype(10); - CHECK(sys->GetTaxonAt(0)->GetData().phenotype == 10); - + sys->GetTaxonAt(0)->GetData().RecordPhenotype(6); sys->GetTaxonAt(0)->GetData().RecordFitness(2); + REQUIRE(sys->GetTaxonAt(0)->GetData().phenotype == 6); + std::unordered_map mut_counts; mut_counts["substitution"] = 3; @@ -703,10 +617,10 @@ TEST_CASE("World systematics integration", "[evo]") { auto old_taxon = sys->GetTaxonAt(0); world.DoBirth(new_org,0); - CHECK(old_taxon->GetNumOrgs() == 0); - CHECK(old_taxon->GetNumOff() == 1); - CHECK(sys->GetTaxonAt(0)->GetParent()->GetData().phenotype == 10); - CHECK((*sys->GetActive().begin())->GetNumOrgs() == 1); + REQUIRE(old_taxon->GetNumOrgs() == 0); + REQUIRE(old_taxon->GetNumOff() == 1); + REQUIRE(sys->GetTaxonAt(0)->GetParent()->GetData().phenotype == 6); + REQUIRE((*sys->GetActive().begin())->GetNumOrgs() == 1); } @@ -715,64 +629,35 @@ emp::DataFile AddDominantFile(WORLD_TYPE & world){ using mut_count_t [[maybe_unused]] = std::unordered_map; using data_t = emp::datastruct::mut_landscape_info>; using org_t = emp::AvidaGP; - using systematics_t = emp::Systematics; + using systematics_t = emp::Systematics; - auto & file = world.SetupFile("dominant.csv"); + auto & file = world.SetupFile("dominant.csv"); - std::function get_update = [&world](){return world.GetUpdate();}; - std::function dom_mut_count = [&world](){ - emp::Ptr> sys = world.GetSystematics(0); - emp::Ptr full_sys = sys.DynamicCast(); - if (full_sys->GetNumActive() > 0) { - return emp::CountMuts(emp::FindDominant(*full_sys)); - } - return 0; - }; - std::function dom_del_step = [&world](){ - emp::Ptr> sys = world.GetSystematics(0); - emp::Ptr full_sys = sys.DynamicCast(); - if (full_sys->GetNumActive() > 0) { - return emp::CountDeleteriousSteps(emp::FindDominant(*full_sys)); - } - return 0; - }; - std::function dom_phen_vol = [&world](){ - emp::Ptr> sys = world.GetSystematics(0); - emp::Ptr full_sys = sys.DynamicCast(); - if (full_sys->GetNumActive() > 0) { - return emp::CountPhenotypeChanges(emp::FindDominant(*full_sys)); - } - return 0; - }; - std::function dom_unique_phen = [&world](){ - emp::Ptr> sys = world.GetSystematics(0); - emp::Ptr full_sys = sys.DynamicCast(); - if (full_sys->GetNumActive() > 0) { - return emp::CountUniquePhenotypes(emp::FindDominant(*full_sys)); - } - return 0; - }; - std::function lin_len = [&world](){ - emp::Ptr> sys = world.GetSystematics(0); - emp::Ptr full_sys = sys.DynamicCast(); - if (full_sys->GetNumActive() > 0) { - return emp::LineageLength(emp::FindDominant(*full_sys)); - } - return 0; - }; - - file.AddFun(get_update, "update", "Update"); - file.AddFun(dom_mut_count, "dominant_mutation_count", "sum of mutations along dominant organism's lineage"); - file.AddFun(dom_del_step, "dominant_deleterious_steps", "count of deleterious steps along dominant organism's lineage"); - file.AddFun(dom_phen_vol, "dominant_phenotypic_volatility", "count of changes in phenotype along dominant organism's lineage"); - file.AddFun(dom_unique_phen, "dominant_unique_phenotypes", "count of unique phenotypes along dominant organism's lineage"); - file.AddFun(lin_len, "lineage_length", "number of taxa dominant organism's lineage"); - file.PrintHeaderKeys(); - return file; + std::function get_update = [&world](){return world.GetUpdate();}; + std::function dom_mut_count = [&world](){ + return CountMuts(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); + }; + std::function dom_del_step = [&world](){ + return CountDeleteriousSteps(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); + }; + std::function dom_phen_vol = [&world](){ + return CountPhenotypeChanges(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); + }; + std::function dom_unique_phen = [&world](){ + return CountUniquePhenotypes(dynamic_cast>(world.GetSystematics(0))->GetTaxonAt(0)); + }; + + + file.AddFun(get_update, "update", "Update"); + file.AddFun(dom_mut_count, "dominant_mutation_count", "sum of mutations along dominant organism's lineage"); + file.AddFun(dom_del_step, "dominant_deleterious_steps", "count of deleterious steps along dominant organism's lineage"); + file.AddFun(dom_phen_vol, "dominant_phenotypic_volatility", "count of changes in phenotype along dominant organism's lineage"); + file.AddFun(dom_unique_phen, "dominant_unique_phenotypes", "count of unique phenotypes along dominant organism's lineage"); + file.PrintHeaderKeys(); + return file; } -// Integration test for using multiple systematics managers in a world and recording data TEST_CASE("Run world", "[evo]") { using mut_count_t = std::unordered_map; using data_t = emp::datastruct::mut_landscape_info>; @@ -810,32 +695,6 @@ TEST_CASE("Run world", "[evo]") { world.AddSystematics(gene_sys); world.AddSystematics(phen_sys); - std::function, emp::AvidaGP&)> check_update = [&gene_sys, &world](emp::Ptr tax, emp::AvidaGP & org){ - CHECK(tax->GetOriginationTime() == gene_sys->GetUpdate()); - CHECK(tax->GetOriginationTime() == world.GetUpdate()); - CHECK(tax->GetNumOff() == 0); - }; - - gene_sys->OnNew(check_update); - - std::function)> extinction_checks = [&gene_sys, &world](emp::Ptr tax){ - CHECK(tax->GetDestructionTime() == gene_sys->GetUpdate()); - CHECK(tax->GetDestructionTime() == world.GetUpdate()); - CHECK(tax->GetNumOrgs() == 0); - }; - - gene_sys->OnExtinct(extinction_checks); - - std::function)> prune_checks = [&world](emp::Ptr tax){ - CHECK(tax->GetNumOrgs() == 0); - CHECK(tax->GetNumOff() == 0); - CHECK(tax->GetOriginationTime() <= world.GetUpdate()); - CHECK(tax->GetDestructionTime() <= world.GetUpdate()); - }; - - gene_sys->OnPrune(prune_checks); - - emp::Signal on_mutate_sig; ///< Trigger signal before organism gives birth. emp::Signal record_fit_sig; ///< Trigger signal before organism gives birth. emp::Signal)> record_phen_sig; ///< Trigger signal before organism gives birth. @@ -852,12 +711,9 @@ TEST_CASE("Run world", "[evo]") { world.GetSystematics(1).Cast()->GetTaxonAt(pos)->GetData().RecordPhenotype(phen); }); - emp::Ptr> sys0 = world.GetSystematics(0); - emp::Ptr sys0_cast = sys0.DynamicCast(); - std::function, emp::AvidaGP&)> capture_mut_fun = [&last_mutation](emp::Ptr tax, emp::AvidaGP & org){ - tax->GetData().RecordMutation(last_mutation); - }; - sys0_cast->OnNew(capture_mut_fun); + // world.OnOrgPlacement([&last_mutation, &world](size_t pos){ + // world.GetSystematics(0).Cast()->GetTaxonAt(pos)->GetData().RecordMutation(last_mutation); + // }); world.SetupSystematicsFile().SetTimingRepeat(1); world.SetupFitnessFile().SetTimingRepeat(1); @@ -865,7 +721,7 @@ TEST_CASE("Run world", "[evo]") { emp::AddPhylodiversityFile(world, 0, "genotype_phylodiversity.csv").SetTimingRepeat(1); emp::AddPhylodiversityFile(world, 1, "phenotype_phylodiversity.csv").SetTimingRepeat(1); emp::AddLineageMutationFile(world).SetTimingRepeat(1); - AddDominantFile(world).SetTimingRepeat(1); + // AddDominantFile(world).SetTimingRepeat(1); // emp::AddMullerPlotFile(world).SetTimingOnce(1); @@ -904,7 +760,15 @@ TEST_CASE("Run world", "[evo]") { world.SetFitFun(fit_fun); - // Build a random initial population. + // emp::vector< std::function > fit_set(16); + // for (size_t out_id = 0; out_id < 16; out_id++) { + // // Setup the fitness function. + // fit_set[out_id] = [out_id](const emp::AvidaGP & org) { + // return (double) -std::abs(org.GetOutput((int)out_id) - (double) (out_id * out_id)); + // }; + // } + + // Build a random initial popoulation. for (size_t i = 0; i < 1; i++) { emp::AvidaGP cpu; cpu.PushRandom(random, 20); @@ -921,34 +785,47 @@ TEST_CASE("Run world", "[evo]") { // Update the status of all organisms. world.ResetHardware(); world.Process(200); - TournamentSelect(world, 2, 100); + double fit0 = world.CalcFitnessID(0); + std::cout << (ud+1) << " : " << 0 << " : " << fit0 << std::endl; + // Keep the best individual. + EliteSelect(world, 1, 1); + + // Run a tournament for the rest... + TournamentSelect(world, 2, 99); + // LexicaseSelect(world, fit_set, POP_SIZE-1); + // EcoSelect(world, fit_fun, fit_set, 100, 5, POP_SIZE-1); for (size_t i = 0; i < world.GetSize(); i++) { record_fit_sig.Trigger(i, world.CalcFitnessID(i)); record_phen_sig.Trigger(i, phen_fun(world.GetOrg(i))); } world.Update(); - CHECK(world.GetUpdate() == gene_sys->GetUpdate()); - CHECK(world.GetUpdate() == phen_sys->GetUpdate()); - CHECK(gene_sys->GetTaxonAt(0)->GetOriginationTime() <= world.GetUpdate()); + } + + // std::cout << std::endl; + // world[0].PrintGenome(); + // std::cout << std::endl; + // for (int i = 0; i < 16; i++) { + // std::cout << i << ":" << world[0].GetOutput(i) << " "; + // } + // std::cout << std::endl; } -TEST_CASE("Test GetCanopy", "[evo]") { + + +TEST_CASE("Test GetCanopy", "[evo]") +{ emp::Systematics sys([](const int & i){return i;}, true, true, true, false); - sys.SetUpdate(0); - auto id1 = sys.AddOrg(1, nullptr); - sys.SetUpdate(2); - auto id2 = sys.AddOrg(2, id1); - sys.SetUpdate(3); - auto id3 = sys.AddOrg(3, id1); - auto id4 = sys.AddOrg(4, id2); + auto id1 = sys.AddOrg(1, nullptr, 0); + auto id2 = sys.AddOrg(2, id1, 2); + auto id3 = sys.AddOrg(3, id1, 3); + auto id4 = sys.AddOrg(4, id2, 3); - sys.RemoveOrg(id1); - sys.SetUpdate(5); - sys.RemoveOrg(id2); + sys.RemoveOrg(id1, 3); + sys.RemoveOrg(id2, 5); auto can_set = sys.GetCanopyExtantRoots(4); @@ -965,8 +842,7 @@ TEST_CASE("Test GetCanopy", "[evo]") { CHECK(Has(can_set, id1)); CHECK(Has(can_set, id2)); - sys.SetUpdate(7); - sys.RemoveOrg(id3); + sys.RemoveOrg(id3, 7); can_set = sys.GetCanopyExtantRoots(2); @@ -976,14 +852,10 @@ TEST_CASE("Test GetCanopy", "[evo]") { CHECK(can_set.size() == 1); CHECK(Has(can_set, id2)); - sys.SetUpdate(8); - auto id5 = sys.AddOrg(5, id4); - sys.SetUpdate(9); - sys.RemoveOrg(id4); - sys.SetUpdate(10); - auto id6 = sys.AddOrg(6, id5); - sys.SetUpdate(11); - sys.RemoveOrg(id5); + auto id5 = sys.AddOrg(5, id4, 8); + sys.RemoveOrg(id4, 9); + auto id6 = sys.AddOrg(6, id5, 10); + sys.RemoveOrg(id5, 11); can_set = sys.GetCanopyExtantRoots(7); // Should only be 4 @@ -995,20 +867,16 @@ TEST_CASE("Test GetCanopy", "[evo]") { CHECK(can_set.size() == 1); CHECK(Has(can_set, id5)); - sys.SetUpdate(12); - auto id7 = sys.AddOrg(7, id6); - sys.SetUpdate(13); - auto id8 = sys.AddOrg(8, id7); - sys.SetUpdate(14); - auto id9 = sys.AddOrg(9, id8); - sys.SetUpdate(15); - auto id10 = sys.AddOrg(10, id9); - - sys.SetUpdate(20); - sys.RemoveOrg(id6); - sys.RemoveOrg(id7); - sys.RemoveOrg(id8); - sys.RemoveOrg(id9); + + auto id7 = sys.AddOrg(7, id6, 12); + auto id8 = sys.AddOrg(8, id7, 13); + auto id9 = sys.AddOrg(9, id8, 14); + auto id10 = sys.AddOrg(10, id9, 15); + + sys.RemoveOrg(id6, 20); + sys.RemoveOrg(id7, 20); + sys.RemoveOrg(id8, 20); + sys.RemoveOrg(id9, 20); can_set = sys.GetCanopyExtantRoots(22); // Should only be 10 @@ -1037,6 +905,13 @@ TEST_CASE("Test GetCanopy", "[evo]") { CHECK(can_set.size() == 1); CHECK(Has(can_set, id5)); + + // auto id5 = sys.AddOrg(28, id2, 32); + // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; + // auto id6 = sys.AddOrg(29, id5, 39); + // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; + // auto id7 = sys.AddOrg(30, id1, 6); + } // Tests from Shao 1990 tree balance paper @@ -1206,234 +1081,3 @@ TEST_CASE("Tree balance", "[evo]") { CHECK(treecl.SackinIndex() == 18); CHECK(treecl.CollessLikeIndex() == Approx(1.746074)); } - -// Test that MRCA is properly updated when the MRCA is alive and then dies, -// causing a new taxon to be MRCA -TEST_CASE("Dieing MRCA", "[evo]") { - emp::Systematics tree([](const int & i){return i;}, true, true, false, false); - CHECK(!tree.GetTrackSynchronous()); - - // std::cout << "\nAddOrg 25 (id1, no parent)\n"; - tree.SetUpdate(0); - auto id1 = tree.AddOrg(25, nullptr); - // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; - tree.SetUpdate(6); - auto id2 = tree.AddOrg(-10, id1); - // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; - tree.SetUpdate(10); - auto id3 = tree.AddOrg(26, id1); - // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; - tree.SetUpdate(25); - auto id4 = tree.AddOrg(27, id2); - // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; - tree.SetUpdate(32); - auto id5 = tree.AddOrg(28, id2); - // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; - tree.SetUpdate(39); - auto id6 = tree.AddOrg(29, id5); - // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; - tree.SetUpdate(6); - auto id7 = tree.AddOrg(30, id1); - - CHECK(tree.GetMRCA() == id1); - tree.RemoveOrg(id7); - tree.RemoveOrg(id3); - tree.RemoveOrg(id2); - CHECK(tree.GetMRCA() == id1); - tree.RemoveOrg(id1); - CHECK(tree.GetMRCA() == id2); - tree.RemoveOrg(id4); - CHECK(tree.GetMRCA() == id5); - tree.RemoveOrg(id5); - CHECK(tree.GetMRCA() == id6); -} - -TEST_CASE("Test RemoveBefore", "[Evolve]") { - emp::Systematics sys([](const int & i){return i;}, true, true, false, false); - - // std::cout << "\nAddOrg 25 (id1, no parent)\n"; - sys.SetUpdate(0); - auto id1 = sys.AddOrg(25, nullptr); - // std::cout << "\nAddOrg -10 (id2; parent id1)\n"; - sys.SetUpdate(6); - auto id2 = sys.AddOrg(-10, id1); - // std::cout << "\nAddOrg 26 (id3; parent id1)\n"; - sys.SetUpdate(10); - auto id3 = sys.AddOrg(26, id1); - // std::cout << "\nAddOrg 27 (id4; parent id2)\n"; - sys.SetUpdate(25); - auto id4 = sys.AddOrg(27, id2); - // std::cout << "\nAddOrg 28 (id5; parent id2)\n"; - sys.SetUpdate(32); - auto id5 = sys.AddOrg(28, id2); - // std::cout << "\nAddOrg 29 (id6; parent id5)\n"; - sys.SetUpdate(39); - auto id6 = sys.AddOrg(29, id5); - // std::cout << "\nAddOrg 30 (id7; parent id1)\n"; - sys.SetUpdate(6); - auto id7 = sys.AddOrg(30, id1); - sys.SetUpdate(33); - auto id8 = sys.AddOrg(2, id3); - auto id9 = sys.AddOrg(4, id8); - sys.SetUpdate(34); - auto id10 = sys.AddOrg(5, id9); - - sys.SetUpdate(40); - sys.RemoveOrg(id1); - sys.SetUpdate(41); - sys.RemoveOrg(id2); - sys.SetUpdate(40); - sys.RemoveOrg(id9); - sys.SetUpdate(60); - sys.RemoveOrg(id8); - - CHECK(emp::Has(sys.GetAncestors(), id1)); - CHECK(emp::Has(sys.GetAncestors(), id2)); - - sys.RemoveBefore(50); - - CHECK(!emp::Has(sys.GetAncestors(), id1)); - CHECK(!emp::Has(sys.GetAncestors(), id2)); - CHECK(emp::Has(sys.GetAncestors(), id9)); - CHECK(emp::Has(sys.GetActive(), id3)); - CHECK(emp::Has(sys.GetActive(), id4)); - CHECK(emp::Has(sys.GetActive(), id5)); - CHECK(emp::Has(sys.GetActive(), id6)); - CHECK(emp::Has(sys.GetActive(), id7)); - CHECK(emp::Has(sys.GetAncestors(), id8)); - - sys.RemoveBefore(70); - CHECK(!emp::Has(sys.GetActive(), id8)); - CHECK(!emp::Has(sys.GetActive(), id9)); - -} - -TEST_CASE("Test Snapshot", "[Evolve]") { - emp::Systematics sys([](const int & i){return i;}, true, true, true, false); - - sys.SetUpdate(0); - auto id1 = sys.AddOrg(25, nullptr); - sys.SetUpdate(6); - auto id2 = sys.AddOrg(-10, id1); - sys.SetUpdate(10); - auto id3 = sys.AddOrg(26, id1); - sys.SetUpdate(25); - auto id4 = sys.AddOrg(27, id2); - sys.SetUpdate(32); - auto id5 = sys.AddOrg(28, id2); - sys.SetUpdate(39); - auto id6 = sys.AddOrg(29, id5); - sys.SetUpdate(6); - auto id7 = sys.AddOrg(30, id1); - sys.SetUpdate(33); - auto id8 = sys.AddOrg(2, id3); - auto id9 = sys.AddOrg(4, id8); - sys.SetUpdate(34); - auto id10 = sys.AddOrg(5, id9); - - sys.SetUpdate(40); - sys.RemoveOrg(id1); - sys.SetUpdate(41); - sys.RemoveOrg(id2); - sys.SetUpdate(40); - sys.RemoveOrg(id9); - sys.SetUpdate(60); - sys.RemoveOrg(id8); - sys.RemoveOrg(id10); - - sys.AddSnapshotFun([](const emp::Taxon & t){return std::to_string(t.GetInfo());}, "genome", "genome"); - sys.Snapshot("systematics_snapshot.csv"); - - // TODO: Would be nice to compare this to existing snapshot file, but lines could be in any order -} - -TEST_CASE("Test Prune", "[Evolve]") { - emp::Systematics sys([](const int & i){return i;}, true, true, false, false); - - int prunes = 0; - std::function >)> prune_fun = [&prunes](emp::Ptr> tax){prunes++;}; - sys.OnPrune(prune_fun); - - sys.SetUpdate(0); - auto id1 = sys.AddOrg(25, nullptr); - sys.SetUpdate(6); - auto id2 = sys.AddOrg(-10, id1); - sys.SetUpdate(10); - auto id3 = sys.AddOrg(26, id1); - sys.SetUpdate(25); - auto id4 = sys.AddOrg(27, id2); - sys.SetUpdate(32); - auto id5 = sys.AddOrg(28, id2); - sys.SetUpdate(39); - auto id6 = sys.AddOrg(29, id5); - sys.SetUpdate(6); - auto id7 = sys.AddOrg(30, id1); - sys.SetUpdate(33); - auto id8 = sys.AddOrg(2, id3); - auto id9 = sys.AddOrg(4, id8); - sys.SetUpdate(34); - auto id10 = sys.AddOrg(5, id9); - auto id11 = sys.AddOrg(5, id3); - - sys.SetUpdate(40); - sys.RemoveOrg(id1); - sys.RemoveOrg(id2); - sys.RemoveOrg(id3); - sys.RemoveOrg(id8); - sys.RemoveOrg(id9); - - CHECK(sys.GetMRCA() == id1); - - CHECK(prunes == 0); - CHECK(Has(sys.GetAncestors(), id9)); - sys.RemoveOrg(id10); - CHECK(prunes == 3); - CHECK(!Has(sys.GetAncestors(), id9)); - CHECK(Has(sys.GetAncestors(), id3)); - - sys.RemoveOrg(id11); - CHECK(prunes == 5); - CHECK(!Has(sys.GetAncestors(), id3)); - CHECK(sys.GetMRCA() == id1); - - sys.RemoveOrg(id7); - CHECK(prunes == 6); - CHECK(sys.GetMRCA() == id2); -} - -TEST_CASE("Test tracking position", "[Evolve]") { - emp::Systematics sys([](const int & i){return i;}, true, true, true, true); - - sys.SetUpdate(0); - auto id1 = sys.AddOrg(25, {0,0}, nullptr); - sys.SetUpdate(6); - auto id2 = sys.AddOrg(-10, {1,0}, id1); - CHECK(sys.Parent(id2) == id1); - sys.SetNextParent(id1); - sys.SetUpdate(10); - sys.AddOrg(26, {2,0}); - auto id3 = sys.GetMostRecent(); - CHECK(id3->GetParent() == id1); - CHECK(id3->GetInfo() == 26); - CHECK(id3->GetOriginationTime() == 10); - sys.SetNextParent({1,0}); - sys.SetUpdate(25); - sys.AddOrg(27, {3,0}); - auto id4 = sys.GetMostRecent(); - CHECK(id4->GetParent() == id2); - CHECK(id4->GetInfo() == 27); - CHECK(id4->GetOriginationTime() == 25); - - sys.SetUpdate(40); - sys.RemoveOrg({0,0}); - CHECK(id1->GetDestructionTime() == 40); - CHECK(id1->GetNumOrgs() == 0); - - sys.RemoveOrgAfterRepro(id4); - CHECK(!Has(sys.GetAncestors(), id4)); - sys.SetUpdate(34); - auto id5 = sys.AddOrg(88, {4,0}, id4); - CHECK(id4->GetNumOrgs() == 0); - CHECK(id4->GetNumOff() == 1); - CHECK(Has(sys.GetAncestors(), id4)); -} From 3f156a9e4ab9572bbb47c7a8c343bd0be44dbacd Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 15:57:30 -0500 Subject: [PATCH 60/80] Use idiomatic exist_ok --- doc/make_md.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/make_md.py b/doc/make_md.py index 0671084089..0ebf74aca9 100644 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -33,8 +33,7 @@ def format_heading(level, text): new_dir = "library/" + just_dir + "/api" print(new_dir) toc_text = "\n\n" + format_heading(2, "API") + "```{eval-rst}\n.. toctree::\n :glob:\n\n api/*\n```\n" - if not os.path.exists(new_dir): - os.makedirs(new_dir) + os.makedirs(new_dir, exist_ok=True) toc_file_name = f"library/{just_dir}/{last_dir}.md" if not os.path.exists(toc_file_name): toc_text = format_heading(1, last_dir.capitalize()) + toc_text From a06b4fa6317f0f86cf020a4a130937d0f48e317d Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 16:00:07 -0500 Subject: [PATCH 61/80] Systematize make_md prefix exclusion --- doc/make_md.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/make_md.py b/doc/make_md.py index 0ebf74aca9..fb58752d16 100644 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -24,11 +24,13 @@ def format_heading(level, text): just_dir = "/".join(h.split("/")[:-1]).lower() last_dir = just_dir.split("/")[-1] just_file = h.split("/")[-1] - if just_file.startswith("_"): - continue - if just_dir.startswith("in_progress"): - continue - if just_dir.startswith("polyfill"): + + excluded_prefixes = [ + "_", + "in_progress", + "polyfill", + ] + if any(just_file.startswith(prefix) for prefix in excluded_prefixes): continue new_dir = "library/" + just_dir + "/api" print(new_dir) From 69a2b9bfaff8f9a9c64b54618b63109f5d8ce438 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 17:24:14 -0500 Subject: [PATCH 62/80] Strip illegal characters --- ci/impl/replace_tabs.sh | 2 +- doc/bibliography.bib | 300 ++++++++++++++++++++-------------------- 2 files changed, 151 insertions(+), 151 deletions(-) diff --git a/ci/impl/replace_tabs.sh b/ci/impl/replace_tabs.sh index 5772a20646..4407a66287 100755 --- a/ci/impl/replace_tabs.sh +++ b/ci/impl/replace_tabs.sh @@ -6,7 +6,7 @@ set -e # greq -qI tests if file is binary # adapted from https://stackoverflow.com/a/29689345 -TARGETS=$(find . -type f ! -path "./third-party/*" ! -path "./.git/*" ! -path "*/assets/*" ! -path "*Makefile" ! -path "*Maketemplate*" ! -path "./node_modules/*" ! -path ./doc/bibliography.bib -exec grep -qI . {} ';' -print) +TARGETS=$(find . -type f ! -path "./third-party/*" ! -path "./.git/*" ! -path "*/assets/*" ! -path "*Makefile" ! -path "*Maketemplate*" ! -path "./node_modules/*" -exec grep -qI . {} ';' -print) for filename in ${TARGETS} do diff --git a/doc/bibliography.bib b/doc/bibliography.bib index 83dae8b6aa..8ccc44609a 100644 --- a/doc/bibliography.bib +++ b/doc/bibliography.bib @@ -1,189 +1,189 @@ @article{collessReviewPhylogeneticsTheory1982, - title = {Review of Phylogenetics: The Theory and Practice of Phylogenetic Systematics.}, - volume = {31}, - issn = {0039-7989}, - url = {https://www.jstor.org/stable/2413420}, - doi = {10.2307/2413420}, - shorttitle = {Review of Phylogenetics}, - pages = {100--104}, - number = {1}, - journal = {Systematic Zoology}, - author = {Colless, Donald H.}, - editora = {Wiley, E. O.}, - editoratype = {collaborator}, - year = {1982} + title = {Review of Phylogenetics: The Theory and Practice of Phylogenetic Systematics.}, + volume = {31}, + issn = {0039-7989}, + url = {https://www.jstor.org/stable/2413420}, + doi = {10.2307/2413420}, + shorttitle = {Review of Phylogenetics}, + pages = {100--104}, + number = {1}, + journal = {Systematic Zoology}, + author = {Colless, Donald H.}, + editora = {Wiley, E. O.}, + editoratype = {collaborator}, + year = {1982} } @article{dolsonInterpretingTapeLife2020, - title = {Interpreting the Tape of Life: Ancestry-based Analyses Provide Insights and Intuition about Evolutionary Dynamics}, - volume = {26}, - rights = {All rights reserved}, - pages = {1--22}, - number = {1}, - journal = {Artificial Life}, - author = {Dolson, Emily and Lalejini, Alexander and Jorgensen, Steven and Ofria, Charles}, - year = {2020}, + title = {Interpreting the Tape of Life: Ancestry-based Analyses Provide Insights and Intuition about Evolutionary Dynamics}, + volume = {26}, + rights = {All rights reserved}, + pages = {1--22}, + number = {1}, + journal = {Artificial Life}, + author = {Dolson, Emily and Lalejini, Alexander and Jorgensen, Steven and Ofria, Charles}, + year = {2020}, url = {https://direct.mit.edu/artl/article/26/1/58/93272/Interpreting-the-Tape-of-Life-Ancestry-Based} } @article{faithConservationEvaluationPhylogenetic1992, - title = {Conservation evaluation and phylogenetic diversity}, - volume = {61}, - issn = {0006-3207}, - url = {http://www.sciencedirect.com/science/article/pii/0006320792912013}, - doi = {10.1016/0006-3207(92)91201-3}, - pages = {1--10}, - number = {1}, - journal = {Biological Conservation}, + title = {Conservation evaluation and phylogenetic diversity}, + volume = {61}, + issn = {0006-3207}, + url = {http://www.sciencedirect.com/science/article/pii/0006320792912013}, + doi = {10.1016/0006-3207(92)91201-3}, + pages = {1--10}, + number = {1}, + journal = {Biological Conservation}, journaltitle = {Biological Conservation}, - shortjournal = {Biological Conservation}, - author = {Faith, Daniel P.}, - year = {1992} + shortjournal = {Biological Conservation}, + author = {Faith, Daniel P.}, + year = {1992} } @article{isaacMammalsEDGEConservation2007, - title = {Mammals on the {EDGE}: Conservation Priorities Based on Threat and Phylogeny}, - volume = {2}, - issn = {1932-6203}, - url = {http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0000296}, - doi = {10.1371/journal.pone.0000296}, - shorttitle = {Mammals on the {EDGE}}, - abstract = {Conservation priority setting based on phylogenetic diversity has frequently been proposed but rarely implemented. Here, we define a simple index that measures the contribution made by different species to phylogenetic diversity and show how the index might contribute towards species-based conservation priorities. We describe procedures to control for missing species, incomplete phylogenetic resolution and uncertainty in node ages that make it possible to apply the method in poorly known clades. We also show that the index is independent of clade size in phylogenies of more than 100 species, indicating that scores from unrelated taxonomic groups are likely to be comparable. Similar scores are returned under two different species concepts, suggesting that the index is robust to taxonomic changes. The approach is applied to a near-complete species-level phylogeny of the Mammalia to generate a global priority list incorporating both phylogenetic diversity and extinction risk. The 100 highest-ranking species represent a high proportion of total mammalian diversity and include many species not usually recognised as conservation priorities. Many species that are both evolutionarily distinct and globally endangered ({EDGE} species) do not benefit from existing conservation projects or protected areas. The results suggest that global conservation priorities may have to be reassessed in order to prevent a disproportionately large amount of mammalian evolutionary history becoming extinct in the near future.}, - pages = {e296}, - number = {3}, - journal = {{PLOS} {ONE}}, - shortjournal = {{PLOS} {ONE}}, - author = {Isaac, Nick J. B. and Turvey, Samuel T. and Collen, Ben and Waterman, Carly and Baillie, Jonathan E. M.}, - urldate = {2018-01-09}, - year = {2007}, - langid = {english}, - keywords = {Animal phylogenetics, Conservation genetics, Conservation science, Endangered species, Mammals, Species diversity, Species extinction, Taxonomy} + title = {Mammals on the {EDGE}: Conservation Priorities Based on Threat and Phylogeny}, + volume = {2}, + issn = {1932-6203}, + url = {http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0000296}, + doi = {10.1371/journal.pone.0000296}, + shorttitle = {Mammals on the {EDGE}}, + abstract = {Conservation priority setting based on phylogenetic diversity has frequently been proposed but rarely implemented. Here, we define a simple index that measures the contribution made by different species to phylogenetic diversity and show how the index might contribute towards species-based conservation priorities. We describe procedures to control for missing species, incomplete phylogenetic resolution and uncertainty in node ages that make it possible to apply the method in poorly known clades. We also show that the index is independent of clade size in phylogenies of more than 100 species, indicating that scores from unrelated taxonomic groups are likely to be comparable. Similar scores are returned under two different species concepts, suggesting that the index is robust to taxonomic changes. The approach is applied to a near-complete species-level phylogeny of the Mammalia to generate a global priority list incorporating both phylogenetic diversity and extinction risk. The 100 highest-ranking species represent a high proportion of total mammalian diversity and include many species not usually recognised as conservation priorities. Many species that are both evolutionarily distinct and globally endangered ({EDGE} species) do not benefit from existing conservation projects or protected areas. The results suggest that global conservation priorities may have to be reassessed in order to prevent a disproportionately large amount of mammalian evolutionary history becoming extinct in the near future.}, + pages = {e296}, + number = {3}, + journal = {{PLOS} {ONE}}, + shortjournal = {{PLOS} {ONE}}, + author = {Isaac, Nick J. B. and Turvey, Samuel T. and Collen, Ben and Waterman, Carly and Baillie, Jonathan E. M.}, + urldate = {2018-01-09}, + year = {2007}, + langid = {english}, + keywords = {Animal phylogenetics, Conservation genetics, Conservation science, Endangered species, Mammals, Species diversity, Species extinction, Taxonomy} } @article{mirSoundCollesslikeBalance2018, - title = {Sound Colless-like balance indices for multifurcating trees}, - volume = {13}, - issn = {1932-6203}, - url = {https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0203401}, - doi = {10.1371/journal.pone.0203401}, - abstract = {The Colless index is one of the most popular and natural balance indices for bifurcating phylogenetic trees, but it makes no sense for multifurcating trees. In this paper we propose a family of Colless-like balance indices C D , f that generalize the Colless index to multifurcating phylogenetic trees. Each C D , f is determined by the choice of a dissimilarity D and a weight function f : N → R ≥ 0. A balance index is sound when the most balanced phylogenetic trees according to it are exactly the fully symmetric ones. Unfortunately, not every Colless-like balance index is sound in this sense. We prove then that taking f(n) = ln(n + e) or f(n) = en as weight functions, the resulting index C D , f is sound for every dissimilarity D. Next, for each one of these two functions f and for three popular dissimilarities D (the variance, the standard deviation, and the mean deviation from the median), we find the most unbalanced phylogenetic trees according to C D , f with any given number n of leaves. The results show that the growth pace of the function f influences the notion of “balance” measured by the indices it defines. Finally, we introduce our R package “{CollessLike},” which, among other functionalities, allows the computation of Colless-like indices of trees and their comparison to their distribution under Chen-Ford-Winkel’s α-γ-model for multifurcating phylogenetic trees. As an application, we show that the trees in {TreeBASE} do not seem to follow either the uniform model for multifurcating trees or the α-γ-model, for any values of α and γ.}, - pages = {e0203401}, - number = {9}, - journal = {{PLOS} {ONE}}, - shortjournal = {{PLOS} {ONE}}, - author = {Mir, Arnau and Rotger, Lucía and Rosselló, Francesc}, - year = {2018}, - langid = {english} + title = {Sound Colless-like balance indices for multifurcating trees}, + volume = {13}, + issn = {1932-6203}, + url = {https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0203401}, + doi = {10.1371/journal.pone.0203401}, + abstract = {The Colless index is one of the most popular and natural balance indices for bifurcating phylogenetic trees, but it makes no sense for multifurcating trees. In this paper we propose a family of Colless-like balance indices C D , f that generalize the Colless index to multifurcating phylogenetic trees. Each C D , f is determined by the choice of a dissimilarity D and a weight function f : N → R ≥ 0. A balance index is sound when the most balanced phylogenetic trees according to it are exactly the fully symmetric ones. Unfortunately, not every Colless-like balance index is sound in this sense. We prove then that taking f(n) = ln(n + e) or f(n) = en as weight functions, the resulting index C D , f is sound for every dissimilarity D. Next, for each one of these two functions f and for three popular dissimilarities D (the variance, the standard deviation, and the mean deviation from the median), we find the most unbalanced phylogenetic trees according to C D , f with any given number n of leaves. The results show that the growth pace of the function f influences the notion of “balance” measured by the indices it defines. Finally, we introduce our R package “{CollessLike},” which, among other functionalities, allows the computation of Colless-like indices of trees and their comparison to their distribution under Chen-Ford-Winkel's α-γ-model for multifurcating phylogenetic trees. As an application, we show that the trees in {TreeBASE} do not seem to follow either the uniform model for multifurcating trees or the α-γ-model, for any values of α and γ.}, + pages = {e0203401}, + number = {9}, + journal = {{PLOS} {ONE}}, + shortjournal = {{PLOS} {ONE}}, + author = {Mir, Arnau and Rotger, Lucía and Rosselló, Francesc}, + year = {2018}, + langid = {english} } @article{sackinGoodBadPhenograms1972, - title = {“Good” and “Bad” Phenograms}, - volume = {21}, - issn = {1063-5157}, - url = {https://doi.org/10.1093/sysbio/21.2.225}, - doi = {10.1093/sysbio/21.2.225}, - abstract = {“Good” and “Bad” phenograms. Syst. Zool. 21:225–226.—This paper presents a measure for characterizing a phenogram and measuring its usefulness.}, - pages = {225--226}, - number = {2}, - journal = {Systematic Biology}, - shortjournal = {Systematic Biology}, - author = {Sackin, M. J.}, - year = {1972} + title = {“Good” and “Bad” Phenograms}, + volume = {21}, + issn = {1063-5157}, + url = {https://doi.org/10.1093/sysbio/21.2.225}, + doi = {10.1093/sysbio/21.2.225}, + abstract = {“Good” and “Bad” phenograms. Syst. Zool. 21:225-226.—This paper presents a measure for characterizing a phenogram and measuring its usefulness.}, + pages = {225--226}, + number = {2}, + journal = {Systematic Biology}, + shortjournal = {Systematic Biology}, + author = {Sackin, M. J.}, + year = {1972} } @article{shaoTreeBalance1990, - title = {Tree Balance}, - volume = {39}, - issn = {1063-5157}, - url = {https://academic.oup.com/sysbio/article/39/3/266/1727778}, - doi = {10.2307/2992186}, - abstract = {Abstract. Hierarchic classifications can differ with respect to tree balance—the degree to which branches divide the subtended taxa into subsets of equal size.}, - pages = {266--276}, - number = {3}, - journal = {Systematic Biology}, - shortjournal = {Syst Biol}, - author = {Shao, Kwang-Tsao}, - urldate = {2019-04-11}, - year = {1990}, - langid = {english} + title = {Tree Balance}, + volume = {39}, + issn = {1063-5157}, + url = {https://academic.oup.com/sysbio/article/39/3/266/1727778}, + doi = {10.2307/2992186}, + abstract = {Abstract. Hierarchic classifications can differ with respect to tree balance—the degree to which branches divide the subtended taxa into subsets of equal size.}, + pages = {266--276}, + number = {3}, + journal = {Systematic Biology}, + shortjournal = {Syst Biol}, + author = {Shao, Kwang-Tsao}, + urldate = {2019-04-11}, + year = {1990}, + langid = {english} } @article{tuckerGuidePhylogeneticMetrics2017, - title = {A guide to phylogenetic metrics for conservation, community ecology and macroecology}, - volume = {92}, - issn = {1469-185X}, - url = {http://onlinelibrary.wiley.com/doi/10.1111/brv.12252/abstract}, - doi = {10.1111/brv.12252}, - abstract = {The use of phylogenies in ecology is increasingly common and has broadened our understanding of biological diversity. Ecological sub-disciplines, particularly conservation, community ecology and macroecology, all recognize the value of evolutionary relationships but the resulting development of phylogenetic approaches has led to a proliferation of phylogenetic diversity metrics. The use of many metrics across the sub-disciplines hampers potential meta-analyses, syntheses, and generalizations of existing results. Further, there is no guide for selecting the appropriate metric for a given question, and different metrics are frequently used to address similar questions. To improve the choice, application, and interpretation of phylo-diversity metrics, we organize existing metrics by expanding on a unifying framework for phylogenetic information. Generally, questions about phylogenetic relationships within or between assemblages tend to ask three types of question: how much; how different; or how regular? We show that these questions reflect three dimensions of a phylogenetic tree: richness, divergence, and regularity. We classify 70 existing phylo-diversity metrics based on their mathematical form within these three dimensions and identify ‘anchor’ representatives: for α-diversity metrics these are {PD} (Faith's phylogenetic diversity), {MPD} (mean pairwise distance), and {VPD} (variation of pairwise distances). By analysing mathematical formulae and using simulations, we use this framework to identify metrics that mix dimensions, and we provide a guide to choosing and using the most appropriate metrics. We show that metric choice requires connecting the research question with the correct dimension of the framework and that there are logical approaches to selecting and interpreting metrics. The guide outlined herein will help researchers navigate the current jungle of indices.}, - pages = {698--715}, - number = {2}, - journal = {Biological Reviews}, - shortjournal = {Biol Rev}, - author = {Tucker, Caroline M. and Cadotte, Marc W. and Carvalho, Silvia B. and Davies, T. Jonathan and Ferrier, Simon and Fritz, Susanne A. and Grenyer, Rich and Helmus, Matthew R. and Jin, Lanna S. and Mooers, Arne O. and Pavoine, Sandrine and Purschke, Oliver and Redding, David W. and Rosauer, Dan F. and Winter, Marten and Mazel, Florent}, - year = {2017}, - langid = {english}, - keywords = {community assembly, biogeography, conservation, range size, biodiversity hotspots, diversity metrics, evolutionary history, phylogenetic diversity, prioritization} + title = {A guide to phylogenetic metrics for conservation, community ecology and macroecology}, + volume = {92}, + issn = {1469-185X}, + url = {http://onlinelibrary.wiley.com/doi/10.1111/brv.12252/abstract}, + doi = {10.1111/brv.12252}, + abstract = {The use of phylogenies in ecology is increasingly common and has broadened our understanding of biological diversity. Ecological sub-disciplines, particularly conservation, community ecology and macroecology, all recognize the value of evolutionary relationships but the resulting development of phylogenetic approaches has led to a proliferation of phylogenetic diversity metrics. The use of many metrics across the sub-disciplines hampers potential meta-analyses, syntheses, and generalizations of existing results. Further, there is no guide for selecting the appropriate metric for a given question, and different metrics are frequently used to address similar questions. To improve the choice, application, and interpretation of phylo-diversity metrics, we organize existing metrics by expanding on a unifying framework for phylogenetic information. Generally, questions about phylogenetic relationships within or between assemblages tend to ask three types of question: how much; how different; or how regular? We show that these questions reflect three dimensions of a phylogenetic tree: richness, divergence, and regularity. We classify 70 existing phylo-diversity metrics based on their mathematical form within these three dimensions and identify 'anchor' representatives: for α-diversity metrics these are {PD} (Faith's phylogenetic diversity), {MPD} (mean pairwise distance), and {VPD} (variation of pairwise distances). By analysing mathematical formulae and using simulations, we use this framework to identify metrics that mix dimensions, and we provide a guide to choosing and using the most appropriate metrics. We show that metric choice requires connecting the research question with the correct dimension of the framework and that there are logical approaches to selecting and interpreting metrics. The guide outlined herein will help researchers navigate the current jungle of indices.}, + pages = {698--715}, + number = {2}, + journal = {Biological Reviews}, + shortjournal = {Biol Rev}, + author = {Tucker, Caroline M. and Cadotte, Marc W. and Carvalho, Silvia B. and Davies, T. Jonathan and Ferrier, Simon and Fritz, Susanne A. and Grenyer, Rich and Helmus, Matthew R. and Jin, Lanna S. and Mooers, Arne O. and Pavoine, Sandrine and Purschke, Oliver and Redding, David W. and Rosauer, Dan F. and Winter, Marten and Mazel, Florent}, + year = {2017}, + langid = {english}, + keywords = {community assembly, biogeography, conservation, range size, biodiversity hotspots, diversity metrics, evolutionary history, phylogenetic diversity, prioritization} } @article{vane-wrightWhatProtectSystematics1991, - title = {What to protect?—Systematics and the agony of choice}, - volume = {55}, - issn = {0006-3207}, - url = {https://www.sciencedirect.com/science/article/pii/000632079190030D}, - doi = {10.1016/0006-3207(91)90030-D}, - shorttitle = {What to protect?}, - abstract = {Politicians and scientists alike now agree that a priority list of global centres for preservationof biological diversity is required. Diversity has generally been measured only in terms of species richness, or in the form of indices combining richness with abundance. Such measures are considered inadequate for the task in hand. A novel index, based on the information content of cladistic classifications and giving a measure of taxonomic distinctness, is introduced. This taxic diversity measure, when coupled with detailed knowledge of distribution, can be used in modified analyses of the type previously developed as ‘critical faunas analysis’ or ‘network analysis’. Central to all such analyses is the concept of complementarity of floras or faunas. By employing complementariry, step-wise procedures can identify optimally efficient, single-site sequences of priority areas for a group, taking existing reserves into account or not, as required. For practical planning it is concluded that two basic rounds of analysis are required: first, recognition of global priority areas by taxic diversity techniques; secondly, within any such area, analysis without taxic weighting (as being developed by Margules and his co-workers) to identify a network of reserves to contain all local taxa and ecosystems. The paper concludes with a brief discussion of some immediate prospects for development of a systematic approach to global conservation evaluation.}, - pages = {235--254}, - number = {3}, - journal = {Biological Conservation}, - shortjournal = {Biological Conservation}, - author = {Vane-Wright, R. I. and Humphries, C. J. and Williams, P. H.}, - year = {1991}, - langid = {english} + title = {What to protect?—Systematics and the agony of choice}, + volume = {55}, + issn = {0006-3207}, + url = {https://www.sciencedirect.com/science/article/pii/000632079190030D}, + doi = {10.1016/0006-3207(91)90030-D}, + shorttitle = {What to protect?}, + abstract = {Politicians and scientists alike now agree that a priority list of global centres for preservationof biological diversity is required. Diversity has generally been measured only in terms of species richness, or in the form of indices combining richness with abundance. Such measures are considered inadequate for the task in hand. A novel index, based on the information content of cladistic classifications and giving a measure of taxonomic distinctness, is introduced. This taxic diversity measure, when coupled with detailed knowledge of distribution, can be used in modified analyses of the type previously developed as 'critical faunas analysis' or 'network analysis'. Central to all such analyses is the concept of complementarity of floras or faunas. By employing complementariry, step-wise procedures can identify optimally efficient, single-site sequences of priority areas for a group, taking existing reserves into account or not, as required. For practical planning it is concluded that two basic rounds of analysis are required: first, recognition of global priority areas by taxic diversity techniques; secondly, within any such area, analysis without taxic weighting (as being developed by Margules and his co-workers) to identify a network of reserves to contain all local taxa and ecosystems. The paper concludes with a brief discussion of some immediate prospects for development of a systematic approach to global conservation evaluation.}, + pages = {235--254}, + number = {3}, + journal = {Biological Conservation}, + shortjournal = {Biological Conservation}, + author = {Vane-Wright, R. I. and Humphries, C. J. and Williams, P. H.}, + year = {1991}, + langid = {english} } @article{warwickTaxonomicDistinctnessEnvironmental1998, - title = {Taxonomic Distinctness and Environmental Assessment}, - volume = {35}, - issn = {0021-8901}, - url = {http://www.jstor.org/stable/2405168}, - abstract = {1. The objectives of this paper are to test the performance of the taxonomic distinctness index, Δ+, in a number of environmental impact scenarios, to examine its relationship with functional diversity and to examine the influence of habitat type and diversity on the index. 2. The index was applied to data on free-living marine nematodes from the coasts of Britain and Chile. 3. The taxonomic distinctness of nematodes from environmentally degraded locations was generally reduced in comparison with that of more pristine locations, often significantly so. 4. Some habitat types may have naturally lower values of taxonomic distinctness than others. However, unless the habitats are degraded in some way the Δ+ values do not generally fall below the lower 95\% confidence limit of the simulated distribution under a null hypothesis that the assemblages behave as if they are a random selection from the regional species pool. This ameliorates the problem encountered with species richness measures of biodiversity, which are much more strongly affected by habitat type and complexity, thus making comparisons difficult between data sets from different habitats or where habitat type is uncontrolled. 5. Taxonomic distinctness in marine nematodes is shown to be related to trophic diversity: a reduction in trophic diversity will lead to a reduction in taxonomic distinctness, although not necessarily to a reduction in species richness. Trophic composition itself is clearly affected by pollution, but is also strongly responsive to the major influence of habitat type. 6. These features of the taxonomic distinctness index, coupled with its lack of dependence on sampling effort or differences in taxonomic rigour between workers and a statistical framework for the assessment of the significance of departure from expectation, suggest that it may prove to be a biologically and ecologically relevant measure of biodiversity. 7. This paper demonstrates that the taxonomic distinctness index has a number of theoretical and logistical advantages over measures of species richness for the purposes of environmental assessment.}, - pages = {532--543}, - number = {4}, - journal = {Journal of Applied Ecology}, - author = {Warwick, R. M. and Clarke, K. R.}, - year = {1998} + title = {Taxonomic Distinctness and Environmental Assessment}, + volume = {35}, + issn = {0021-8901}, + url = {http://www.jstor.org/stable/2405168}, + abstract = {1. The objectives of this paper are to test the performance of the taxonomic distinctness index, Δ+, in a number of environmental impact scenarios, to examine its relationship with functional diversity and to examine the influence of habitat type and diversity on the index. 2. The index was applied to data on free-living marine nematodes from the coasts of Britain and Chile. 3. The taxonomic distinctness of nematodes from environmentally degraded locations was generally reduced in comparison with that of more pristine locations, often significantly so. 4. Some habitat types may have naturally lower values of taxonomic distinctness than others. However, unless the habitats are degraded in some way the Δ+ values do not generally fall below the lower 95\% confidence limit of the simulated distribution under a null hypothesis that the assemblages behave as if they are a random selection from the regional species pool. This ameliorates the problem encountered with species richness measures of biodiversity, which are much more strongly affected by habitat type and complexity, thus making comparisons difficult between data sets from different habitats or where habitat type is uncontrolled. 5. Taxonomic distinctness in marine nematodes is shown to be related to trophic diversity: a reduction in trophic diversity will lead to a reduction in taxonomic distinctness, although not necessarily to a reduction in species richness. Trophic composition itself is clearly affected by pollution, but is also strongly responsive to the major influence of habitat type. 6. These features of the taxonomic distinctness index, coupled with its lack of dependence on sampling effort or differences in taxonomic rigour between workers and a statistical framework for the assessment of the significance of departure from expectation, suggest that it may prove to be a biologically and ecologically relevant measure of biodiversity. 7. This paper demonstrates that the taxonomic distinctness index has a number of theoretical and logistical advantages over measures of species richness for the purposes of environmental assessment.}, + pages = {532--543}, + number = {4}, + journal = {Journal of Applied Ecology}, + author = {Warwick, R. M. and Clarke, K. R.}, + year = {1998} } @article{webbExploringPhylogeneticStructure2000, - title = {Exploring the Phylogenetic Structure of Ecological Communities: An Example for Rain Forest Trees}, - volume = {156}, - issn = {0003-0147}, - url = {http://www.jstor.org/stable/10.1086/303378}, - doi = {10.1086/303378}, - shorttitle = {Exploring the Phylogenetic Structure of Ecological Communities}, - abstract = {abstract: Because of the correlation expected between the phylogenetic relatedness of two taxa and their net ecological similarity, a measure of the overall phylogenetic relatedness of a community of interacting organisms can be used to investigate the contemporary ecological processes that structure community composition. I describe two indices that use the number of nodes that separate taxa on a phylogeny as a measure of their phylogenetic relatedness. As an example of the use of these indices in community analysis, I compared the mean observed net relatedness of trees (≥10 cm diameter at breast height) in each of 28 plots (each 0.16 ha) in a Bornean rain forest with the net relatedness expected if species were drawn randomly from the species pool (of the 324 species in the 28 plots), using a supertree that I assembled from published sources. I found that the species in plots were more phylogenetically related than expected by chance, a result that was insensitive to various modifications to the basic methodology. I tentatively infer that variation in habitat among plots causes ecologically more similar species to co‐occur within plots. Finally, I suggest a range of applications for phylogenetic relatedness measures in community analysis.}, - pages = {145--155}, - number = {2}, - journal = {The American Naturalist}, - author = {Webb, Campbell O. and Losos, Associate Editor: Jonathan B.}, - year = {2000} + title = {Exploring the Phylogenetic Structure of Ecological Communities: An Example for Rain Forest Trees}, + volume = {156}, + issn = {0003-0147}, + url = {http://www.jstor.org/stable/10.1086/303378}, + doi = {10.1086/303378}, + shorttitle = {Exploring the Phylogenetic Structure of Ecological Communities}, + abstract = {abstract: Because of the correlation expected between the phylogenetic relatedness of two taxa and their net ecological similarity, a measure of the overall phylogenetic relatedness of a community of interacting organisms can be used to investigate the contemporary ecological processes that structure community composition. I describe two indices that use the number of nodes that separate taxa on a phylogeny as a measure of their phylogenetic relatedness. As an example of the use of these indices in community analysis, I compared the mean observed net relatedness of trees (≥10 cm diameter at breast height) in each of 28 plots (each 0.16 ha) in a Bornean rain forest with the net relatedness expected if species were drawn randomly from the species pool (of the 324 species in the 28 plots), using a supertree that I assembled from published sources. I found that the species in plots were more phylogenetically related than expected by chance, a result that was insensitive to various modifications to the basic methodology. I tentatively infer that variation in habitat among plots causes ecologically more similar species to co-occur within plots. Finally, I suggest a range of applications for phylogenetic relatedness measures in community analysis.}, + pages = {145--155}, + number = {2}, + journal = {The American Naturalist}, + author = {Webb, Campbell O. and Losos, Associate Editor: Jonathan B.}, + year = {2000} } @article{winterPhylogeneticDiversityNature2013, - title = {Phylogenetic diversity and nature conservation: where are we?}, - volume = {28}, - issn = {0169-5347}, - url = {http://www.sciencedirect.com/science/article/pii/S0169534712002881}, - doi = {10.1016/j.tree.2012.10.015}, - shorttitle = {Phylogenetic diversity and nature conservation}, - abstract = {To date, there is little evidence that phylogenetic diversity has contributed to nature conservation. Here, we discuss the scientific justification of using phylogenetic diversity in conservation and the reasons for its neglect. We show that, apart from valuing the rarity and richness aspect, commonly quoted justifications based on the usage of phylogenetic diversity as a proxy for functional diversity or evolutionary potential are still based on uncertainties. We discuss how a missing guideline through the variety of phylogenetic diversity metrics and their relevance for conservation might be responsible for the hesitation to include phylogenetic diversity in conservation practice. We outline research routes that can help to ease uncertainties and bridge gaps between research and conservation with respect to phylogenetic diversity.}, - pages = {199--204}, - number = {4}, + title = {Phylogenetic diversity and nature conservation: where are we?}, + volume = {28}, + issn = {0169-5347}, + url = {http://www.sciencedirect.com/science/article/pii/S0169534712002881}, + doi = {10.1016/j.tree.2012.10.015}, + shorttitle = {Phylogenetic diversity and nature conservation}, + abstract = {To date, there is little evidence that phylogenetic diversity has contributed to nature conservation. Here, we discuss the scientific justification of using phylogenetic diversity in conservation and the reasons for its neglect. We show that, apart from valuing the rarity and richness aspect, commonly quoted justifications based on the usage of phylogenetic diversity as a proxy for functional diversity or evolutionary potential are still based on uncertainties. We discuss how a missing guideline through the variety of phylogenetic diversity metrics and their relevance for conservation might be responsible for the hesitation to include phylogenetic diversity in conservation practice. We outline research routes that can help to ease uncertainties and bridge gaps between research and conservation with respect to phylogenetic diversity.}, + pages = {199--204}, + number = {4}, journal = {Trends in Ecology \& Evolution}, - journaltitle = {Trends in Ecology \& Evolution}, - shortjournal = {Trends in Ecology \& Evolution}, - author = {Winter, Marten and Devictor, Vincent and Schweiger, Oliver}, - year = {2013} + journaltitle = {Trends in Ecology \& Evolution}, + shortjournal = {Trends in Ecology \& Evolution}, + author = {Winter, Marten and Devictor, Vincent and Schweiger, Oliver}, + year = {2013} } From ac4b72e9099363696e0d18501cb57e755768f205 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 17:42:51 -0500 Subject: [PATCH 63/80] Add header comment for make_md.py --- doc/make_md.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/make_md.py b/doc/make_md.py index fb58752d16..4d628bdbbb 100644 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -1,6 +1,17 @@ import glob import os +# This script performs preprocessing for the Empirical documentation +# build process, manually filling in the folder tree `library` with stub +# markdown files for the documentation of Empirical header files to be built +# onto. +# +# The script scans the "../include/emp" directory for all ".hpp" files (with +# several explicit exclusions). For each header `emp/subname/filename.hpp` +# it creates a stub `library/subname/api/file.md`. Note that the `library` +# folder already contains skeleton content (i.e., stub pages for each of +# Emprical's subdirectories. Note also that some Empirical subdirectories +# not intended for external use are explicitly excluded. def format_directive(filename): """Create the breathe directive and add the options.""" From dfb8a8e66c0d405993af78aead124dc2735d68c1 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 17:43:40 -0500 Subject: [PATCH 64/80] Bugfix: ensure intended recursive glob --- doc/make_md.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/make_md.py b/doc/make_md.py index 4d628bdbbb..1b497624aa 100644 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -27,7 +27,7 @@ def format_heading(level, text): return symbol + text + "\n\n" -header_files = glob.glob("../include/emp/**/*.hpp") +header_files = glob.glob("../include/emp/**/*.hpp", recursive=True) for h in header_files: print(h) From 9af0c202c7314f50fc82f019cd2d35969ea28684 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 17:44:35 -0500 Subject: [PATCH 65/80] Make make_md.py executable --- doc/make_md.py | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 doc/make_md.py diff --git a/doc/make_md.py b/doc/make_md.py old mode 100644 new mode 100755 index 1b497624aa..75408f30ad --- a/doc/make_md.py +++ b/doc/make_md.py @@ -1,3 +1,5 @@ +#!/usr/bin/python + import glob import os From 631e9f8c1374ec7cf06140a33c9b3c02e756c95f Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 17:46:30 -0500 Subject: [PATCH 66/80] Ensure make_md runs in doc/ folder --- doc/make_md.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/make_md.py b/doc/make_md.py index 75408f30ad..bb7fe3f466 100755 --- a/doc/make_md.py +++ b/doc/make_md.py @@ -28,6 +28,9 @@ def format_heading(level, text): ] return symbol + text + "\n\n" +# Ensure execution inside of doc/ +script_directory = os.path.dirname(os.path.abspath(__file__)) +os.chdir(script_directory) header_files = glob.glob("../include/emp/**/*.hpp", recursive=True) From a773e9a1e18aecbf32e59900b5e2f829e3de1f93 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 18:09:25 -0500 Subject: [PATCH 67/80] Only provide python10 in the Docker container --- Dockerfile | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6879625359..4dc0cb933a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,10 +61,6 @@ RUN \ lsb-release \ xdg-utils \ cmake \ - python3-distutils \ - python3-setuptools \ - python3-virtualenv \ - python3-pip \ 'python3\.10' \ 'python3\.10-distutils' \ 'python3\.10-venv' \ @@ -170,32 +166,18 @@ RUN \ echo "finalized set up dependency versions" RUN \ - curl -sS https://bootstrap.pypa.io/get-pip.py | python3 \ - && \ - curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10 \ + python3.10 --version \ && \ - pip install --upgrade --force-reinstall pip virtualenv \ + python3 --version \ && \ - pip3 install --upgrade --force-reinstall pip virtualenv \ + curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10 \ && \ python3.10 -m pip install --upgrade --force-reinstall pip virtualenv \ && \ - python3 -m pip install --upgrade --force-reinstall pip virtualenv \ - && \ - pip install wheel==0.30.0 six==1.16.0 \ - && \ - pip3 install wheel==0.30.0 six==1.16.0 \ - && \ python3.10 -m pip install wheel==0.30.0 six==1.16.0 \ && \ - python3 -m pip install wheel==0.30.0 six==1.16.0 \ - && \ - pip3 install -r /opt/Empirical/doc/requirements.txt \ - && \ python3.10 -m pip install -r /opt/Empirical/doc/requirements.txt \ && \ - python3 -m pip install -r /opt/Empirical/doc/requirements.txt \ - && \ echo "installed documentation build requirements" RUN \ From cfd38b14915e20787fc31470d03f2937599dd077 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 18:18:45 -0500 Subject: [PATCH 68/80] Set Python310 as default in container --- Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index 4dc0cb933a..82823d381a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -93,6 +93,12 @@ RUN \ && \ echo "installed apt packages" +# Set Python 3.10 as the default version of Python 3 +RUN \ + update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 \ + && \ + update-alternatives --set python3 /usr/bin/python3.10 + RUN \ echo $' \n\ XVFB=/usr/bin/Xvfb \n\ From 2eedef03d740cee8418b4605690e1981e12166bc Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 18:47:09 -0500 Subject: [PATCH 69/80] Strip off-topic changes Will fix in merge commit to mabe devel --- include/emp/Evolve/Systematics.hpp | 1804 +++++++++++++--------------- 1 file changed, 830 insertions(+), 974 deletions(-) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index 59cf8c05f9..c7f220ba84 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1,29 +1,32 @@ -/* - * This file is part of Empirical, https://github.com/devosoft/Empirical - * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * date: 2017-2023 -*/ /** - * @file + * @note This file is part of Empirical, https://github.com/devosoft/Empirical + * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * @date 2017-2018 + * + * @file Systematics.hpp * @brief Track genotypes, species, clades, or lineages of organisms in a world. * * - * @todo It would theoretically be possible to - * achieve slight memory savings by not maintaining a set of pointers to ancestors + * @todo Technically, we don't need to keep the ancestors in a set in order to track a lineage... + * If we delete all of their descendants they should automaticaly be deleted. + * @todo We should provide an option to back up systematics data to a file so that it doesn't all + * need to be kept in memory, especially if we're only doing post-analysis. + * @todo This inheritance system makes adding new systematics-related data tracking kind of a pain. + * Over time, this will probably become a maintainability problem. We can probably make the + * whole inheritance thing go away through judicious use of signals. + * @todo This does not currently handle situations where organisms change locations during their + * lifetimes gracefully. */ #ifndef EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE #define EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE -#include -#include + #include #include #include #include -#include #include -#include #include #include "../base/Ptr.hpp" @@ -33,7 +36,6 @@ #include "../data/DataNode.hpp" #include "../datastructs/map_utils.hpp" #include "../datastructs/set_utils.hpp" -#include "../io/File.hpp" #include "../math/info_theory.hpp" #include "../math/stats.hpp" #include "../tools/string_utils.hpp" @@ -66,43 +68,34 @@ namespace emp { fitness.Add(fit); } - double GetFitness() const { + const double GetFitness() const { return fitness.GetMean(); } }; - /// Track information related to the mutational landscape - /// Maps a string representing a type of mutation to a count representing - /// the number of that type of mutation that occurred to bring about this taxon. - /// @tparam PHEN_TYPE the type being used to represent the phenotype template - struct mut_landscape_info { + struct mut_landscape_info { /// Track information related to the mutational landscape + /// Maps a string representing a type of mutation to a count representing + /// the number of that type of mutation that occurred to bring about this taxon. using phen_t = PHEN_TYPE; using has_phen_t = std::true_type; using has_mutations_t = std::true_type; using has_fitness_t = std::true_type; // using has_phenotype_t = true; - public: - std::unordered_map mut_counts = {}; /// The number of mutations of each type that occurred to make this taxon + std::unordered_map mut_counts; DataNode fitness; /// This taxon's fitness (for assessing deleterious mutational steps) PHEN_TYPE phenotype; /// This taxon's phenotype (for assessing phenotypic change) - /// @returns this taxon's phenotype const PHEN_TYPE & GetPhenotype() const { return phenotype; } - /// @returns this taxon's fitness - double GetFitness() const { + const double GetFitness() const { return fitness.GetMean(); } - /// Adds mutations to the list of mutations that occurred to make this taxon - /// @param muts can contain as many strings (types of mutation) as desired, each accompanied - /// by a number indicating how many of that mutation occurred - /// Example: {"point_mutation":2, "insertion":1} - void RecordMutation(std::unordered_map & muts) { + void RecordMutation(std::unordered_map muts) { for (auto mut : muts) { if (Has(mut_counts, mut.first)) { mut_counts[mut.first] += mut.second; @@ -112,14 +105,10 @@ namespace emp { } } - /// Record the fitness of this taxon - /// @param fit the fitness void RecordFitness(double fit) { fitness.Add(fit); } - /// Record the phenotype of this taxon - /// @param phen the phenotype void RecordPhenotype(PHEN_TYPE phen) { phenotype = phen; } @@ -128,7 +117,7 @@ namespace emp { } /// @brief A Taxon represents a type of organism in a phylogeny. - /// @tparam ORG_INFO The information type associated with an organism, used to categorize it. + /// @param ORG_INFO The information type associated with an organism, used to categorize it. /// /// Genotypes are the most commonly used Taxon; in general taxa can be anything from a shared /// genome sequence, a phenotypic trait, or a even a position in the world (if you want to @@ -193,25 +182,17 @@ namespace emp { /// Get the number of taxanomic steps since the ancestral organism was injected into the World. size_t GetDepth() const { return depth; } - /// Get data struct associated with this taxon data_t & GetData() {return data;} - /// Get data struct associated with this taxon const data_t & GetData() const {return data;} - /// Get pointers to this taxon's offspring std::set > GetOffspring() {return offspring;} - /// Set this taxon's data struct to the given value void SetData(data_t d) {data = d;} - /// @returns this taxon's origination time double GetOriginationTime() const {return origination_time;} - /// Set this taxon's origination time void SetOriginationTime(double time) {origination_time = time;} - /// @returns this taxon's destruction time double GetDestructionTime() const {return destruction_time;} - /// Sets this taxon's destruction time void SetDestructionTime(double time) {destruction_time = time;} /// Add a new organism to this Taxon. @@ -247,7 +228,6 @@ namespace emp { return num_orgs; } - /// Remove specified taxon from this taxon's offspring list void RemoveFromOffspring(Ptr offspring_tax) { offspring.erase(offspring_tax); } @@ -274,8 +254,8 @@ namespace emp { /// A base class for Systematics, maintaining information common to all systematics managers - /// and providing virtual functions. You probably don't want to instantiate this. It just - /// exists so that you can make containers of Systematics managers of different types. + /// and providing virtual functions. + template class SystematicsBase { protected: @@ -289,7 +269,7 @@ namespace emp { // Stats about active taxa... (totals are across orgs, not taxa) size_t org_count; ///< How many organisms are currently active? size_t total_depth; ///< Sum of taxa depths for calculating average. - size_t num_roots; ///< How many distinct injected ancestors are currently in population? + size_t num_roots; ///< How many distint injected ancestors are currently in population? int max_depth; ///< Depth of deepest taxon. -1 means needs to be recalculated size_t next_id; ///< What ID value should the next new taxon have? @@ -338,9 +318,6 @@ namespace emp { /// What is the average phylogenetic depth of organisms in the population? double GetAveDepth() const { return ((double) total_depth) / (double) org_count; } - /// @returns current update/time step - size_t GetUpdate() const {return curr_update;} - /// Are we tracking organisms evolving in synchronous generations? void SetTrackSynchronous(bool new_val) {track_synchronous = new_val; } @@ -359,19 +336,14 @@ namespace emp { /// Are we storing the location of taxa? void SetStorePosition(bool new_val) { store_position = new_val; } - /// Sets the current update/time step - void SetUpdate(size_t ud) {curr_update = ud;} - - /// Add a data node to this systematics manager - /// @param name the name of the data node (so it can be found later) + // Returns a reference so that capturing it in a lambda to call on update + // is less confusing. It's possible we should change it to be consistent + // with GetFitnessDataNode, though. data_ptr_t AddDataNode(const std::string & name) { emp_assert(!data_nodes.HasNode(name)); return &(data_nodes.New(name)); } - /// Add a data node to this systematics manager - /// @param name the name of the data node (so it can be found later) - /// @param pull_set_fun a function to run when the data node is requested to pull data (returns vector of values) data_ptr_t AddDataNode(std::function()> pull_set_fun, const std::string & name) { emp_assert(!data_nodes.HasNode(name)); auto node = AddDataNode(name); @@ -379,9 +351,6 @@ namespace emp { return node; } - /// Add a data node to this systematics manager - /// @param name the name of the data node (so it can be found later) - /// @param pull_fun a function to run when the data node is requested to pull data (returns single value) data_ptr_t AddDataNode(std::function pull_fun, const std::string & name) { emp_assert(!data_nodes.HasNode(name)); auto node = AddDataNode(name); @@ -389,7 +358,7 @@ namespace emp { return node; } - /// @returns a pointer to the data node with the specified name + data_ptr_t GetDataNode(const std::string & name) { return &(data_nodes.Get(name)); } @@ -416,34 +385,26 @@ namespace emp { virtual int SackinIndex() const = 0; virtual double CollessLikeIndex() const = 0; virtual int GetMRCADepth() const = 0; - virtual void AddOrg(ORG && org, WorldPosition pos) = 0; - virtual void AddOrg(ORG & org, WorldPosition pos) = 0; - virtual void AddOrg(ORG && org, WorldPosition pos, WorldPosition parent) = 0; - virtual void AddOrg(ORG & org, WorldPosition pos, WorldPosition parent) = 0; - virtual bool RemoveOrg(WorldPosition pos) = 0; - virtual void RemoveOrgAfterRepro(WorldPosition pos) = 0; + virtual void AddOrg(ORG && org, WorldPosition pos, int update) = 0; + virtual void AddOrg(ORG & org, WorldPosition pos, int update) = 0; + virtual bool RemoveOrg(WorldPosition pos, int time=-1) = 0; + virtual void RemoveOrgAfterRepro(WorldPosition pos, int time=-1) = 0; + // virtual bool RemoveNextOrg(WorldPosition pos, int time=-1) = 0; virtual void PrintStatus(std::ostream & os) const = 0; virtual double CalcDiversity() const = 0; virtual void Update() = 0; - virtual void SetNextParent(WorldPosition pos) = 0; - virtual void SwapPositions(WorldPosition p1, WorldPosition p2) = 0; + virtual void SetNextParent(int pos) = 0; + virtual void SetNextParent(WorldPosition & pos) = 0; }; - // Forward-declare CollessStruct for use in calculating Colless metric - struct CollessStruct; - /// @brief A tool to track phylogenetic relationships among organisms. - /// The systematics class tracks the relationships among all organisms based on the ORG_INFO type - /// provided. If an offspring has the same value for ORG_INFO type as its parent, it is grouped into + /// The systematics class tracks the relationships among all organisms based on the INFO_TYPE + /// provided. If an offspring has the same value for INFO_TYPE as its parent, it is grouped into /// the same taxon. Otherwise a new Taxon is created and the old one is used as its parent in - /// the phylogeny. If the provided ORG_INFO type is the organism's genome, a traditional phylogeny + /// the phylogeny. If the provided INFO_TYPE is the organsism's genome, a traditional phylogeny /// is formed, with genotypes. If the organism's behavior/task set is used, then organisms are - /// grouped by phenotypes. If the organism's position is used, the evolutionary path through + /// grouped by phenotypes. If the organsims's position is used, the evolutionary path through /// space is tracked. Any other aspect of organisms can be tracked this way as well. - /// @tparam ORG The type of organisms in your world (i.e. the input to your taxon-calculation function) - /// @tparam ORG_INFO The type being used to represent the piece of information that defines taxa - /// (i.e. the output from your taxon-calculation function) - /// @tparam DATA_STRUCT (optional) The type being used to hold supplemental per-taxon data template class Systematics : public SystematicsBase { private: @@ -455,9 +416,9 @@ namespace emp { using hash_t = typename Ptr::hash_t; using fun_calc_info_t = std::function; - fun_calc_info_t calc_info_fun; ///< Function that takes an organism and returns the unit being tracked by systematics - Ptr next_parent; ///< The taxon that has been marked as parent for next new org - Ptr most_recent; ///< The most-recently added taxon + fun_calc_info_t calc_info_fun; + Ptr next_parent; + Ptr most_recent; using parent_t::store_active; using parent_t::store_ancestors; @@ -474,27 +435,34 @@ namespace emp { public: - #ifndef DOXYGEN_SHOULD_SKIP_THIS using typename parent_t::data_ptr_t; using parent_t::GetNumActive; using parent_t::GetNumAncestors; using parent_t::GetNumOutside; using parent_t::GetTreeSize; using parent_t::GetNumTaxa; + // using parent_t::OnNew; + // using parent_t::OnPrune; using parent_t::GetPhylogeneticDiversity; + // using parent_t::GetTaxonDistinctiveness; + // using parent_t::GetEvolutionaryDistinctiveness; using parent_t::GetMeanPairwiseDistance; using parent_t::GetSumPairwiseDistance; using parent_t::GetVariancePairwiseDistance; using parent_t::GetPairwiseDistances; + // using parent_t::GetDistanceToRoot; + // using parent_t::GetBranchesToRoot; + // using parent_t::GetMRCA; using parent_t::GetMRCADepth; using parent_t::AddOrg; using parent_t::RemoveOrg; using parent_t::RemoveOrgAfterRepro; + // using parent_t::RemoveNextOrg; + // using parent_t::Parent; using parent_t::PrintStatus; + // using parent_t::PrintLineage; using parent_t::CalcDiversity; using parent_t::Update; - using parent_t::GetUpdate; - using parent_t::SetUpdate; using parent_t::SetNextParent; using parent_t::GetDataNode; @@ -507,14 +475,12 @@ namespace emp { using parent_t::AddUniqueTaxaDataNode; using parent_t::AddMutationCountDataNode; using parent_t::GetMaxDepth; - #endif // DOXYGEN_SHOULD_SHIP_THIS - /// Struct for keeping track of what information to print out in snapshot files struct SnapshotInfo { using snapshot_fun_t = std::function; - snapshot_fun_t fun; ///< Function for converting taxon to string containing desired data - std::string key; ///< Column name for data calculated with this function - std::string desc; ///< Description of data in this function + snapshot_fun_t fun; + std::string key; + std::string desc; SnapshotInfo(const snapshot_fun_t & _fun, const std::string & _key, const std::string & _desc="") : fun(_fun), @@ -523,40 +489,32 @@ namespace emp { { ; } }; - emp::vector user_snapshot_funs; ///< Collection of all desired snapshot file columns + emp::vector user_snapshot_funs; std::unordered_set< Ptr, hash_t > active_taxa; ///< A set of all living taxa. std::unordered_set< Ptr, hash_t > ancestor_taxa; ///< A set of all dead, ancestral taxa. std::unordered_set< Ptr, hash_t > outside_taxa; ///< A set of all dead taxa w/o descendants. - Ptr to_be_removed = nullptr; ///< Taxon to remove org from after next call to AddOrg - emp::WorldPosition removal_pos = {0, 0}; ///< Position of taxon to next be removed + Ptr to_be_removed = nullptr; + int removal_time = -1; + int removal_pos = -1; - emp::vector > > taxon_locations; ///< Positions in this vector indicate taxon positions in world + emp::vector > taxon_locations; + emp::vector > next_taxon_locations; - Signal, ORG & org)> on_new_sig; ///< Trigger when a new taxon is created - Signal)> on_extinct_sig; ///< Trigger when a taxon goes extinct + Signal, ORG & org)> on_new_sig; ///< Trigger when any organism is pruned from tree Signal)> on_prune_sig; ///< Trigger when any organism is pruned from tree mutable Ptr mrca; ///< Most recent common ancestor in the population. - /// Called whenever a taxon has no organisms AND no descendants. + /// Called wheneven a taxon has no organisms AND no descendants. void Prune(Ptr taxon); /// Called when an offspring taxa has been deleted. void RemoveOffspring(Ptr offspring, Ptr taxon); /// Called when there are no more living members of a taxon. There may be descendants. - void MarkExtinct(Ptr taxon); - - #ifndef DOXYGEN_SHOULD_SKIP_THIS - /// Helper function for RemoveBefore - /// @returns true if a a taxon can safely be - /// removed by RemoveBefore - bool CanRemove(Ptr t, int ud); - // Helper for Colless function calculation - CollessStruct RecursiveCollessStep(Ptr curr) const; - #endif // DOXYGEN_SHOULD_SKIP_THIS + void MarkExtinct(Ptr taxon, int time=-1); @@ -564,7 +522,6 @@ namespace emp { /** * Contructor for Systematics; controls what information should be stored. - * @param calc_taxon Function that should be run on organism to determine which taxon it belongs to * @param store_active Should living organisms' taxa be tracked? (typically yes!) * @param store_ancestors Should ancestral organisms' taxa be maintained? (yes for lineages!) * @param store_all Should all dead taxa be maintained? (typically no; it gets BIG!) @@ -588,105 +545,30 @@ namespace emp { outside_taxa.clear(); } - // ===== Functions for modifying phylogeny/systematics manager internal state ==== - /// Switch to next update/time step - /// Useful for keeping track of taxon survival times - /// and population positions in synchronous generation worlds. - void Update(); + void Update() { + ++curr_update; + if (track_synchronous) { - /// Add information about a new organism, including its stored info and parent's taxon; - /// If you would like the systematics manager to track taxon age, you can also supply - /// the update at which the taxon is being added. - /// The new organism is always passed as a reference to the organism being added. - /// If positions are being tracked, the new organism's position in the world should - /// be passed as the second argument. - /// The parent can either be passed as a world position (if positions are being tracked), - /// or as a pointer to the organism's parent. - /// Versions of AddOrg that take a pointer to a parent return a pointer for the taxon associated - /// with the new organism. - void AddOrg(ORG && org, WorldPosition pos); - void AddOrg(ORG && org, WorldPosition pos, WorldPosition parent); - Ptr AddOrg(ORG && org, WorldPosition pos, Ptr parent); - Ptr AddOrg(ORG && org, Ptr parent=nullptr); - - void AddOrg(ORG & org, WorldPosition pos); - void AddOrg(ORG & org, WorldPosition pos, WorldPosition parent); - Ptr AddOrg(ORG & org, WorldPosition pos, Ptr parent); - Ptr AddOrg(ORG & org, Ptr parent=nullptr); + // Clear pending removal + if (to_be_removed != nullptr) { + RemoveOrg(to_be_removed, removal_time); + taxon_locations[removal_pos] = nullptr; + to_be_removed = nullptr; + removal_pos = -1; + } - /// Remove an instance of an organism; track when it's gone. - /// @param pos the world position of the individual being removed - bool RemoveOrg(WorldPosition pos); - /// Remove an instance of an organism; track when it's gone. - /// @param taxon a pointer to the taxon of the individual being removed - bool RemoveOrg(Ptr taxon); - - /// Mark an instance of a taxon to be removed; track when it's gone. - /// This is a work-around to deal with steady state/non-synchronous - /// populations in which an organism might die as its offspring is born - /// (e.g. in a spatial world where the offspring replaces the parent). - /// If the bookkeeping is not handled correctly, we could accidentally - /// mark the taxon as extinct when it is actually continuing to exist. - /// By using this method, the taxon won't be removed until after the - /// next org is added or the next time an org is marked for removal. - /// Use this version of the function if you're tracking systematics based - /// on the positions of individuals in the population. - /// @param pos Specifies the location in the world of the individual to - /// be removed after the next reproduction event. - void RemoveOrgAfterRepro(WorldPosition pos); - /// Mark an instance of a taxon to be removed; track when it's gone. - /// This is a work-around to deal with steady state/non-synchronous - /// populations in which an organism might die as its offspring is born - /// (e.g. in a spatial world where the offspring replaces the parent). - /// If the bookkeeping is not handled correctly, we could accidentally - /// mark the taxon as extinct when it is actually continuing to exist. - /// By using this method, the taxon won't be removed until after the - /// next org is added or the next time an org is marked for removal. - /// Use this version of the function if you aren't tracking the positions - /// of individuals in the population. - /// @param taxon The taxon of the individual to be removed after the - /// the next reproduction event - void RemoveOrgAfterRepro(Ptr taxon); - - /// Tell systematics manager that the parent of the next taxon added - /// will be the one specified by this function (either at the specified - /// position or the one pointed to by the given pointer) - /// Works with version of AddOrg that only takes org, position, and - /// update. - /// Will be set to null after being assigned as the parent of a taxon - void SetNextParent(WorldPosition pos) { - emp_assert(pos.IsActive() || !pos.IsValid()); - if (!pos.IsValid()) { - next_parent = nullptr; - } else { - next_parent = taxon_locations[pos.GetPopID()][pos.GetIndex()]; + std::swap(taxon_locations, next_taxon_locations); + next_taxon_locations.resize(0); } } - void SetNextParent(Ptr p) { - next_parent = p; - } - - /// Set function used to calculate taxons from organisms void SetCalcInfoFun(fun_calc_info_t f) {calc_info_fun = f;} - /// Remove all taxa that 1) went extinct before the specified update/time step, - /// and 2) only have ancestors that went extinct before the specified update/time step. - /// Warning: this function invalidates most measurements you could make about tree topology. - /// It is useful in select situations where you need to store ancestors for some period of time, - /// but cannot computationally afford to store all ancestors for your entire run. - void RemoveBefore(int ud); - - // ===== Functions for querying phylogeny/systematics manager internal state ==== - - // Currently using raw pointer because of a weird bug in emp::Ptr. Should switch when fixed. + // Currently using raw pointers because of a weird bug in emp::Ptr. Should switch when fixed. std::unordered_set< Ptr, hash_t > * GetActivePtr() { return &active_taxa; } - /// @returns set of active (extant/living) taxa0 const std::unordered_set< Ptr, hash_t > & GetActive() const { return active_taxa; } - /// @returns set of ancestor taxa (extinct, but have active descendants) const std::unordered_set< Ptr, hash_t > & GetAncestors() const { return ancestor_taxa; } - /// @returns set of outside taxa (extinct, with no active descendants) const std::unordered_set< Ptr, hash_t > & GetOutside() const { return outside_taxa; } /// How many taxa are still active in the population? @@ -704,60 +586,59 @@ namespace emp { /// How many taxa are stored in total? size_t GetNumTaxa() const { return GetTreeSize() + GetNumOutside(); } - /// @returns the phylogenetic depth (lineage length) of the taxon with - /// the longest lineage out of all active taxa - int GetMaxDepth(); + int GetMaxDepth() { + if (max_depth != -1) { + return max_depth; + } - /// @returns the taxon that will be used as the parent - /// of the next taxon created via the version of AddOrg - /// that does not accept a parent - Ptr GetNextParent() { - return next_parent; + for (auto tax : active_taxa) { + int depth = tax->GetDepth(); + if (depth > max_depth) { + max_depth = depth; + } + } + return max_depth; } - /// @returns the most recently created taxon - Ptr GetMostRecent() { - return most_recent; + void SetNextParent(WorldPosition & pos) { + emp_assert(pos.IsActive() || !pos.IsValid()); + if (!pos.IsValid()) { + next_parent = nullptr; + } else { + next_parent = taxon_locations[pos.GetIndex()]; + } } - /// @returns a pointer to the parent of a given taxon - Ptr Parent(Ptr taxon) const; - - /// @returns true if there is a taxon at specified location - bool IsTaxonAt(WorldPosition id) { - emp_assert(id.GetPopID() < taxon_locations.size(), "Invalid population id", id, taxon_locations.size()); - emp_assert(id.GetIndex() < taxon_locations[id.GetPopID()].size(), "Invalid taxon location", id, taxon_locations[id.GetPopID()].size()); - return taxon_locations[id.GetPopID()][id.GetIndex()] != nullptr; + void SetNextParent(int pos) { + emp_assert(pos < (int)taxon_locations.size(), "Invalid parent", pos, taxon_locations.size()); + if (pos == -1) { + next_parent = nullptr; + } else { + emp_assert(pos >= 0, "Invalid parent", pos); + emp_assert(taxon_locations[pos], pos); + next_parent = taxon_locations[pos]; + } } - /// @returns pointer to taxon at specified location - Ptr GetTaxonAt(WorldPosition id) { - emp_assert(id.GetPopID() < taxon_locations.size(), "Invalid population id", id, taxon_locations.size()); - emp_assert(id.GetIndex() < taxon_locations[id.GetPopID()].size(), "Invalid taxon location", id, taxon_locations[id.GetPopID()].size()); - return taxon_locations[id.GetPopID()][id.GetIndex()]; + void SetNextParent(Ptr p) { + next_parent = p; } - // ===== Functions for adding actions to systematics manager signals ==== + Ptr GetNextParent() { + return next_parent; + } - /// Provide a function for Systematics to call each time a new taxon is created. - /// Trigger: New taxon is made - /// Argument: Pointer to taxon, reference to org taxon was created from - SignalKey OnNew(std::function t, ORG & org)> & fun) { return on_new_sig.AddAction(fun); } + Ptr GetMostRecent() { + return most_recent; + } - /// Provide a function for Systematics to call each time a taxon goes extinct. - /// Trigger: Taxon is going extinct - /// Argument: Pointer to taxon - SignalKey OnExtinct(std::function t)> & fun) { return on_extinct_sig.AddAction(fun); } + SignalKey OnNew(std::function, ORG & org)> & fun) { return on_new_sig.AddAction(fun); } - /// Provide a function for Systematics to call each time a taxon is about to be pruned (removed from ancestors). + /// Privide a function for Systematics to call each time a taxon is about to be pruned. /// Trigger: Taxon is about to be killed /// Argument: Pointer to taxon SignalKey OnPrune(std::function)> & fun) { return on_prune_sig.AddAction(fun); } - // ===== Functions for adding data nodes to systematics manager ==== - - /// Add data node that records evolutionary distinctiveness when requested to pull. - /// Used by AddPhylodiversityFile in World_output.hpp virtual data_ptr_t AddEvolutionaryDistinctivenessDataNode(const std::string & name = "evolutionary_distinctiveness") { auto node = AddDataNode(name); @@ -772,8 +653,6 @@ namespace emp { return node; } - /// Add data node that records pairwise distance when requested to pull. - /// Used by AddPhylodiversityFile in World_output.hpp virtual data_ptr_t AddPairwiseDistanceDataNode(const std::string & name = "pairwise_distance") { auto node = AddDataNode(name); node->AddPullSet([this](){ @@ -782,8 +661,6 @@ namespace emp { return node; } - /// Add data node that records phylogenetic distinctiveness when requested to pull. - /// Used by AddPhylodiversityFile in World_output.hpp virtual data_ptr_t AddPhylogeneticDiversityDataNode(const std::string & name = "phylogenetic_diversity") { auto node = AddDataNode(name); node->AddPull([this](){ @@ -792,108 +669,135 @@ namespace emp { return node; } - /// Add data node that records counts of deleterious steps along - /// lineages in this systematics manager when requested to pull. - /// Used by AddLineageMutationFile in World_output.hpp + virtual data_ptr_t AddDeleteriousStepDataNode(const std::string & name = "deleterious_steps") { + return AddDeleteriousStepDataNodeImpl(1, name); + } + + data_ptr_t AddDeleteriousStepDataNodeImpl(bool decoy, const std::string & name = "deleterious_steps") { + emp_assert(false, "Calculating deleterious steps requires suitable DATA_STRUCT"); + return AddDataNode(name); + } + + template + data_ptr_t + AddDeleteriousStepDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "deleterious_steps") { auto node = AddDataNode(name); + node->AddPullSet([this](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountDeleteriousSteps(tax)); + } + return result; + }); - if constexpr (!DATA_STRUCT::has_fitness_t::value) { - emp_assert(false && - "Error: Trying to track deleterious steps in Systematics manager that doesn't track fitness" && - "Please use a DATA_STRUCT type that supports fitness tracking."); - } else { - node->AddPullSet([this](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountDeleteriousSteps(tax)); - } - return result; - }); - } return node; } - /// Add data node that phenotypic volatility (changes in phenotype) along - /// lineages in this systematics manager when requested to pull. - /// Used by AddLineageMutationFile in World_output.hpp virtual data_ptr_t AddVolatilityDataNode(const std::string & name = "volatility") { + return AddVolatilityDataNodeImpl(1, name); + } + + data_ptr_t AddVolatilityDataNodeImpl(bool decoy, const std::string & name = "volatility") { + emp_assert(false, "Calculating taxon volatility requires suitable DATA_STRUCT"); + return AddDataNode(name); + } + + template + data_ptr_t + AddVolatilityDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "volatility") { auto node = AddDataNode(name); + node->AddPullSet([this](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountPhenotypeChanges(tax)); + } + return result; + }); - if constexpr (!DATA_STRUCT::has_phen_t::value) { - emp_assert(false && - "Error: Trying to track phenotypic volatility in Systematics manager that doesn't track fitness" && - "Please use a DATA_STRUCT type that supports phenotype tracking."); - } else { - node->AddPullSet([this](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountPhenotypeChanges(tax)); - } - return result; - }); - } return node; } - /// Add data node that records counts of unique taxa along - /// lineages in this systematics manager when requested to pull. - /// Used by AddLineageMutationFile in World_output.hpp virtual data_ptr_t AddUniqueTaxaDataNode(const std::string & name = "unique_taxa") { - auto node = AddDataNode(name); + return AddUniqueTaxaDataNodeImpl(1, name); + } - if constexpr (!DATA_STRUCT::has_phen_t::value) { - emp_assert(false && - "Error: Trying to track phenotypic volatility in Systematics manager that doesn't track fitness" && - "Please use a DATA_STRUCT type that supports phenotype tracking."); - } else { + data_ptr_t AddUniqueTaxaDataNodeImpl(bool decoy, const std::string & name = "unique_taxa") { + emp_assert(false, "Calculating unique taxa requires suitable DATA_STRUCT"); + return AddDataNode(name); + } - node->AddPullSet([this](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountUniquePhenotypes(tax)); - } - return result; - }); - } + template + data_ptr_t + AddUniqueTaxaDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "unique_taxa") { + auto node = AddDataNode(name); + node->AddPullSet([this](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountUniquePhenotypes(tax)); + } + return result; + }); return node; } - /// Add data node that records counts of mutations of the specified type along - /// lineages in this systematics manager when requested to pull. - /// Used by AddLineageMutationFile in World_output.hpp virtual data_ptr_t AddMutationCountDataNode(const std::string & name = "mutation_count", const std::string & mutation = "substitution") { + return AddMutationCountDataNodeImpl(1, name, mutation); + } + + data_ptr_t AddMutationCountDataNodeImpl(bool decoy, const std::string & name = "mutation_count", const std::string & mutation = "substitution") { + emp_assert(false, "Calculating mutation count requires suitable DATA_STRUCT"); + return AddDataNode(name); + } + + template + data_ptr_t + AddMutationCountDataNodeImpl(typename std::enable_if::type decoy, const std::string & name = "mutation_count", const std::string & mutation = "substitution") { auto node = AddDataNode(name); + node->AddPullSet([this,mutation](){ + emp::vector result; + for (auto tax : active_taxa) { + result.push_back(CountMuts(tax, mutation)); + } + return result; + }); - if constexpr (!DATA_STRUCT::has_mutations_t::value) { - emp_assert(false && - "Error: Trying to track phenotypic volatility in Systematics manager that doesn't track mutations" && - "Please use a DATA_STRUCT type that supports mutation tracking."); - } else { - node->AddPullSet([this,mutation](){ - emp::vector result; - for (auto tax : active_taxa) { - result.push_back(CountMuts(tax, mutation)); - } - return result; - }); - } return node; } + /// Add a new snapshot function. + /// When a snapshot of the systematics is taken, in addition to the default + /// set of functions, all user-added snapshot functions are run. Functions + /// take a reference to a taxon as input and return the string to be dumped + /// in the file at the given key. + void AddSnapshotFun(const std::function & fun, + const std::string & key, const std::string & desc="") { + user_snapshot_funs.emplace_back(fun, key, desc); + } + + bool IsTaxonAt(int id) { + emp_assert(id < (int) taxon_locations.size(), "Invalid taxon location", id, taxon_locations.size()); + return taxon_locations[id]; + } + + Ptr GetTaxonAt(int id) { + emp_assert(id < (int) taxon_locations.size(), "Invalid taxon location", id, taxon_locations.size()); + emp_assert(taxon_locations[id], "No taxon at specified location"); + return taxon_locations[id]; + } + Ptr GetNextTaxonAt(int id) { + emp_assert(id < (int)next_taxon_locations.size(), "Invalid taxon location"); + emp_assert(next_taxon_locations[id], "No taxon at specified location"); - // ===== Functions for calculating phylogeny topology metrics ==== + return next_taxon_locations[id]; + } - /** From - * @verbatim embed:rst:inline :cite:p:`faithConservationEvaluationPhylogenetic1992` @endverbatim - * , reviewed in - * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim - * phylogenetic diversity is + /** From (Faith 1992, reviewed in Winters et al., 2013), phylogenetic diversity is * the sum of edges in the minimal spanning tree connected the taxa you're * calculating diversity of. * @@ -908,231 +812,599 @@ namespace emp { int GetPhylogeneticDiversity() const { // As shown on page 5 of Faith 1992, when all branch lengths are equal the phylogenetic // diversity is the number of internal nodes plus the number of extant taxa - 1. - //int phylodiversity = ancestor_taxa.size() + active_taxa.size() -1; - return ancestor_taxa.size() + active_taxa.size() - 1; } - - /// @returns phylogenetic diversity if used without any arguments . - /// If you want to receive normalized data, you need to include the number of generations - /// your tree has (multiples of 10 from 10 to 100 are allowed) - /// you also need to specify a file with which to normalize your data. - /// If value is outside of the values in the file, 100th percentile will be returned - int GetPhylogeneticDiversityNormalize(int generation = 0, std::string filename = "") const; - - - /** This is a metric of how distinct \c tax is from the rest of the population. + /** This is a metric of how distinct @param tax is from the rest of the population. * - * (From - * @verbatim embed:rst:inline :cite:p:`vane-wrightWhatProtectSystematics1991` @endverbatim - * ; reviewed in - * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim - * */ + * (From Vane-Wright et al., 1991; reviewed in Winter et al., 2013) + */ double GetTaxonDistinctiveness(Ptr tax) const {return 1.0/GetDistanceToRoot(tax);} - /** This metric (from - * @verbatim embed:rst:inline :cite:p:`isaacMammalsEDGEConservation2007` @endverbatim - * ; reviewed in - * @verbatim embed:rst:inline :cite:p:`winterPhylogeneticDiversityNature2013` @endverbatim - * ) measures how - * distinct \c tax is from the rest of the population, weighted for the amount of + /** This metric (from Isaac, 2007; reviewed in Winter et al., 2013) measures how + * distinct @param tax is from the rest of the population, weighted for the amount of * unique evolutionary history that it represents. * - * To quantify length of evolutionary history, this method needs \c time: the current + * To quantify length of evolutionary history, this method needs @param time: the current * time, in whatever units time is being measured in when taxa are added to the systematics - * manager. Note that passing a time in the past will produce inaccurate results (since we + * manager. Note that passing a time in the past will produce inacurate results (since we * don't know what the state of the tree was at that time). * - * Assumes the tree is all connected. Will return -1 if this assumption isn't met.*/ - double GetEvolutionaryDistinctiveness(Ptr tax, double time) const; - - /** Calculates mean pairwise distance between extant taxa - * @verbatim embed:rst:inline :cite:p:`webbExploringPhylogeneticStructure2000` @endverbatim - * This measurement is also called Average Taxonomic Diversity - * @verbatim embed:rst:inline :cite:p:`warwickTaxonomicDistinctnessEnvironmental1998` @endverbatim - * (for demonstration of equivalence see - * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim - * ). This measurement tells + * Assumes the tree is all connected. Will return -1 if this assumption isn't met. + */ + double GetEvolutionaryDistinctiveness(Ptr tax, double time) const { + + double depth = 0; // Length (in time units) of section we're currently exploring + double total = 0; // Count up scores for each section of tree + double divisor = tax->GetTotalOffspring() + 1; // Number of extant taxa this will split into (1 for current taxa, plus its offspring) + + // We're stopping when we hit MRCA, so we need to make sure it's been calculated. + GetMRCA(); + if (tax == mrca) { + return 0; + } + + // std::cout << "Initializing divisor to " << divisor << " Offspring: " << tax->GetTotalOffspring() << std::endl; + // std::cout << "MRCA ID: " << mrca->GetID() << " Tax ID: " << tax->GetID() << " time: " << time << " Orig: " << tax->GetOriginationTime() << std::endl; + + Ptr test_taxon = tax->GetParent(); + + emp_assert(time != -1 && "Invalid time - are you passing time to rg?", time); + emp_assert(time >= tax->GetOriginationTime() + && "GetEvolutionaryDistinctiveness received a time that is earlier than the taxon's origination time.", tax->GetOriginationTime(), time); + + while (test_taxon) { + + // emp_assert(test_taxon->GetOriginationTime() != -1 && + // "Invalid time - are you passing time to rg?", time); + + depth += time - test_taxon->GetOriginationTime(); + // std::cout << "Tax: " << test_taxon->GetID() << " depth: " << depth << " time: " << time << " Orig: " << test_taxon->GetOriginationTime() << " divisor: " << divisor << std::endl; + time = test_taxon->GetOriginationTime(); + if (test_taxon == mrca || !test_taxon) { + // Stop when everything has converged or when we hit the root. + // std::cout << (int)(test_taxon == mrca) << " depth: " << depth << " divisor: " << divisor << std::endl; + total += depth/divisor; + return total; + } else if (test_taxon->GetNumOrgs() > 0) { + // If this taxon is still alive we need to update the divisor + // std::cout << "Alive point" << " depth: " << depth << " divisor: " << divisor << std::endl; + total += depth/divisor; + depth = 0; + divisor = test_taxon->GetTotalOffspring() + 1; + } else if (test_taxon->GetNumOff() > 1) { + // This is a branch point. We need to add the things on the other branch to the divisor.. + // std::cout << "Branch point" << " depth: " << depth << " divisor: " << divisor << std::endl; + total += depth/divisor; + depth = 0; + divisor = test_taxon->GetTotalOffspring(); + } + + test_taxon = test_taxon->GetParent(); + } + + return -1; + } + + /** Calculates mean pairwise distance between extant taxa (Webb and Losos, 2000). + * This measurement is also called Average Taxonomic Diversity (Warwick and Clark, 1998) + * (for demonstration of equivalence see Tucker et al, 2016). This measurement tells * you about the amount of distinctness in the community as a whole. * - * This measurement assumes that the tree is fully connected. Will return -1 - * if this is not the case. - * * @param branch_only only counts distance in terms of nodes that represent a branch * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred). */ + * non-branching nodes generally cannot be inferred). + * + * This measurement assumes that the tree is fully connected. Will return -1 + * if this is not the case. + * */ double GetMeanPairwiseDistance(bool branch_only=false) const { emp::vector dists = GetPairwiseDistances(branch_only); return (double)Sum(dists)/dists.size(); } - /** Calculates summed pairwise distance between extant taxa. - * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim - * points out that this is a measure of phylogenetic richness. - * - * This measurement assumes that the tree is fully connected. Will return -1 - * if this is not the case. + /** Calculates summed pairwise distance between extant taxa. Tucker et al 2017 points + * out that this is a measure of phylogenetic richness. * * @param branch_only only counts distance in terms of nodes that represent a branch * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred) */ + * non-branching nodes generally cannot be inferred). + * + * This measurement assumes that the tree is fully connected. Will return -1 + * if this is not the case. + * */ double GetSumPairwiseDistance(bool branch_only=false) const { emp::vector v = GetPairwiseDistances(branch_only); return Sum(v); } - /** Calculates variance of pairwise distance between extant taxa. - * @verbatim embed:rst:inline :cite:p:`tuckerGuidePhylogeneticMetrics2017` @endverbatim - * points out that this is a measure of phylogenetic regularity. - * - * This measurement assumes that the tree is fully connected. Will return -1 - * if this is not the case. + /** Calculates variance of pairwise distance between extant taxa. Tucker et al 2017 points + * out that this is a measure of phylogenetic regularity. * * @param branch_only only counts distance in terms of nodes that represent a branch * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred). */ + * non-branching nodes generally cannot be inferred). + * + * This measurement assumes that the tree is fully connected. Will return -1 + * if this is not the case. + * */ double GetVariancePairwiseDistance(bool branch_only=false) const { emp::vector v = GetPairwiseDistances(branch_only); return Variance(v); } + /** Calculates a vector of all pairwise distances between extant taxa. - * - * This method assumes that the tree is fully connected. Will return -1 - * if this is not the case. * * @param branch_only only counts distance in terms of nodes that represent a branch * between two extant taxa (potentially useful for comparison to biological data, where - * non-branching nodes generally cannot be inferred). * */ - emp::vector GetPairwiseDistances(bool branch_only=false) const; + * non-branching nodes generally cannot be inferred). + * + * This method assumes that the tree is fully connected. Will return -1 + * if this is not the case. + * */ + emp::vector GetPairwiseDistances(bool branch_only=false) const { + // The overarching approach here is to start with a bunch of pointers to all + // extant organisms (since that will include all leaves). Then we trace back up + // the tree, keeping track of distances. When things meet up, we calculate + // distances between the nodes on the sides that just met up. + + emp::vector dists; + + std::map< Ptr, emp::vector> > curr_pointers; + std::map< Ptr, emp::vector> > next_pointers; + + + for (Ptr tax : active_taxa) { + curr_pointers[tax] = emp::vector>({{0}}); + } + + // std::cout << "Starting curr_pointers size: " << curr_pointers.size() << std::endl; + + while (curr_pointers.size() > 0) { + for (auto & tax : curr_pointers) { + bool alive = tax.first->GetNumOrgs() > 0; + // std::cout << tax.first << " has " << to_string(tax.second) << "and is waiting for " << tax.first->GetNumOff() + int(alive) << std::endl; + if ( tax.second.size() < tax.first->GetNumOff() + int(alive)) { + if (Has(next_pointers, tax.first)) { + // In case an earlier iteration added this node to next_pointers + for (auto vec : tax.second) { + next_pointers[tax.first].push_back(vec); + } + } else { + next_pointers[tax.first] = curr_pointers[tax.first]; + } + continue; + } + emp_assert(tax.first->GetNumOff() + int(alive) == tax.second.size(), tax.first->GetNumOff(), alive, to_string(tax.second), tax.second.size()); + + // Okay, things should have just met up. Let's compute the distances + // between everything that just met. + + if (tax.second.size() > 1) { + + for (size_t i = 0; i < tax.second.size(); i++ ) { + for (size_t j = i+1; j < tax.second.size(); j++) { + for (int disti : tax.second[i]) { + for (int distj : tax.second[j]) { + // std::cout << "Adding " << disti << " and " << distj << std::endl; + dists.push_back(disti+distj); + } + } + } + } + } + // std::cout << "dists " << to_string(dists) << std::endl; + // Increment distances and stick them in new vector + emp::vector new_dist_vec; + for (auto & vec : tax.second) { + for (int el : vec) { + new_dist_vec.push_back(el+1); + } + } + + // std::cout << "new_dist_vec " << to_string(new_dist_vec) << std::endl; + + next_pointers.erase(tax.first); + + Ptr test_taxon = tax.first->GetParent(); + while (test_taxon && test_taxon->GetNumOff() == 1 && test_taxon->GetNumOrgs() == 0) { + if (!branch_only) { + for (size_t i = 0; i < new_dist_vec.size(); i++){ + new_dist_vec[i]++; + } + } + test_taxon = test_taxon->GetParent(); + } + + if (!test_taxon) { + continue; + } else if (!Has(next_pointers, test_taxon)) { + next_pointers[test_taxon] = emp::vector >({new_dist_vec}); + } else { + next_pointers[test_taxon].push_back(new_dist_vec); + } + } + curr_pointers = next_pointers; + next_pointers.clear(); + // std::cout << curr_pointers.size() << std::endl; + } + + if (dists.size() != (active_taxa.size()*(active_taxa.size()-1))/2) { + // The tree is not connected + // It's possible we should do something different here... + return dists; + } + + // std::cout << "Total: " << total << "Dists: " << dists.size() << std::endl; + + return dists; + + } /** - * Returns a vector containing all taxa that were extant at \c time_point and - * were at that time the most recent ancestors of taxa that are now extant - * Example: Say the only current extant taxon is C, its lineage goes A -> B -> C, - * and B and C were both alive at the specified time_point. This function would - * only return B. If, however, there were another currently extant taxon that were - * descended directly from A, then this function would return both A and B. */ - std::set> GetCanopyExtantRoots(int time_point = 0) const; + * Returns a vector containing all taxa from @param time_point that were + * + * */ + std::set> GetCanopyExtantRoots(int time_point = 0) const { + // NOTE: This could be made faster by doing something similar to the pairwise distance + // function + + std::set< Ptr> result; + // std::cout << "starting " << time_point << std::endl; + for (Ptr tax : active_taxa) { + // std::cout << tax->GetInfo() << std::endl; + while (tax) { + // std::cout << tax->GetInfo() << " " << tax->GetOriginationTime() << " " << tax->GetDestructionTime() << std::endl; + if (tax->GetOriginationTime() <= time_point && tax->GetDestructionTime() > time_point ) { + result.insert(tax); + // std::cout << "inserting " << tax->GetInfo() << std::endl; + break; + } + tax = tax->GetParent(); + } + } + + return result; + + } + + + /** Counts the total number of ancestors between @param tax and MRCA, if there is one. If + * there is no common ancestor, distance to the root of this tree is calculated instead. + */ + int GetDistanceToRoot(Ptr tax) const { + // Now, trace the line of descent, updating the candidate as we go. + GetMRCA(); - /** Counts the total number of ancestors between \c tax and MRCA, if there is one. If - * there is no common ancestor, distance to the root of this tree is calculated instead.*/ - int GetDistanceToRoot(Ptr tax) const ; + int depth = 0; + Ptr test_taxon = tax->GetParent(); + while (test_taxon) { + depth++; + if (test_taxon == mrca || !test_taxon) { + return depth; + } + test_taxon = test_taxon->GetParent(); + } + return depth; + } /** Counts the number of branching points leading to multiple extant taxa - * between \c tax and the most-recent common ancestor (or the root of its subtree, + * between @param tax and the most-recent common ancestor (or the root of its subtree, * if no MRCA exists). This is useful because a lot * of stats for phylogenies are designed for phylogenies reconstructed from extant taxa. * These phylogenies generally only contain branching points, rather than every ancestor * along the way to the current taxon.*/ - int GetBranchesToRoot(Ptr tax) const; - - /** Calculate Sackin Index of this tree ( - * @verbatim embed:rst:inline :cite:p:`sackinGoodBadPhenograms1972` @endverbatim - * ; reviewed in - * @verbatim embed:rst:inline :cite:p:`shaoTreeBalance1990` @endverbatim - * ). - * Measures tree balance*/ + int GetBranchesToRoot(Ptr tax) const { + GetMRCA(); + + int depth = 0; + Ptr test_taxon = tax->GetParent(); + while (test_taxon) { + if (test_taxon == mrca || !test_taxon) { + return depth; + } else if (test_taxon->GetNumOff() > 1) { + depth++; + } + test_taxon = test_taxon->GetParent(); + } + return depth; + } + + /** Calculate Sackin Index of this tree (Sackin, 1972; reviewed in Shao, 1990). + * Measures tree balance + */ int SackinIndex() const { int sackin = 0; + for (auto taxon : active_taxa) { sackin += GetBranchesToRoot(taxon) + 1; // Sackin index counts root as branch } + return sackin; } - /** Calculate Colless-Like Index of this tree (based on - * @verbatim embed:rst:inline :cite:p:`collessReviewPhylogeneticsTheory1982` @endverbatim - * ; reviewed in - * @verbatim embed:rst:inline :cite:p:`shaoTreeBalance1990` @endverbatim - * ; refined by - * @verbatim embed:rst:inline :cite:p:`mirSoundCollesslikeBalance2018` @endverbatim - * ). - * - * Measures tree balance. The standard Colless index only works for bifurcating trees, - * so this will be a Colless-like Index - * @verbatim embed:rst:inline :cite:p:`mirSoundCollesslikeBalance2018` @endverbatim - * */ - double CollessLikeIndex() const { - GetMRCA(); - return RecursiveCollessStep(mrca).total; - } - /// @returns a pointer to the Most-Recent Common Ancestor for the population. - Ptr GetMRCA() const; + // Graph ToGraph() const { + + // std::map, int> ids; + // int next_id = 0; + + // for (Ptr tax : active_taxa) { + // ids[tax] = next_id; + // next_id++; + // } + + // for (Ptr tax : ancestor_taxa) { + // ids[tax] = next_id; + // next_id++; + // } + + // for (Ptr tax : outside_taxa) { + // ids[tax] = next_id; + // next_id++; + // } + + // Graph g(next_id); + + // for (Ptr tax : active_taxa) { + // if (tax->GetParent()) { + // g.AddEdge(ids[tax->GetParent()], ids[tax]); + // } + // } + + // for (Ptr tax : ancestor_taxa) { + // if (tax->GetParent()) { + // g.AddEdge(ids[tax->GetParent()], ids[tax]); + // } + // } + + // for (Ptr tax : outside_taxa) { + // if (tax->GetParent()) { + // g.AddEdge(ids[tax->GetParent()], ids[tax]); + // } + // } + + // return g; + // } + + // Graph ToMinimalGraph() const { + // std::map, int> ids; + // int next_id = 0; + + // for (Ptr tax : active_taxa) { + // if (tax->GetNumOff() == 1) { + // continue; + // } + // ids[tax] = next_id; + // next_id++; + // } + + // for (Ptr tax : ancestor_taxa) { + // if (tax->GetNumOff() == 1) { + // continue; + // } + // ids[tax] = next_id; + // next_id++; + // } + + // for (Ptr tax : outside_taxa) { + // if (tax->GetNumOff() == 1) { + // continue; + // } + // ids[tax] = next_id; + // next_id++; + // } + + // Graph g(next_id); + + // for (Ptr tax : active_taxa) { + // if (tax->GetNumOff() == 1) { + // continue; + // } + + // Ptr parent = tax->GetParent(); + // while (parent) { + // if (parent->GetNumOff() == 1) { + // parent = parent->GetParent(); + // } else { + // g.AddEdge(ids[parent], ids[tax]); + // } + // } + // } + + // for (Ptr tax : ancestor_taxa) { + // if (tax->GetNumOff() == 1) { + // continue; + // } + + // Ptr parent = tax->GetParent(); + // while (parent) { + // if (parent->GetNumOff() == 1) { + // parent = parent->GetParent(); + // } else { + // g.AddEdge(ids[parent], ids[tax]); + // } + // } + // } + + // for (Ptr tax : outside_taxa) { + // if (tax->GetNumOff() == 1) { + // continue; + // } + + // Ptr parent = tax->GetParent(); + // while (parent) { + // if (parent->GetNumOff() == 1) { + // parent = parent->GetParent(); + // } else { + // g.AddEdge(ids[parent], ids[tax]); + // } + // } + // } + + // return g; + // } + + struct CollessStruct { + double total = 0; + emp::vector ns; + }; - /// @returns the depth of the Most-Recent Common Ancestor; return -1 for none. - int GetMRCADepth() const; + CollessStruct RecursiveCollessStep(Ptr curr) const { + CollessStruct result; - /// @returns a pointer to the Most-Recent Ancestor shared by two taxa. - Ptr GetSharedAncestor(Ptr t1, Ptr t2) const; + while (curr->GetNumOff() == 1) { + curr = *(curr->GetOffspring().begin()); + } - /// @returns the genetic diversity of the population. - double CalcDiversity() const; + if (curr->GetNumOff() == 0) { + result.ns.push_back(0); // Node itself is calculated at level above + return result; + } - /// @returns vector containing the lineages of the specified taxon - emp::vector> GetLineage(Ptr tax) const { - emp::vector> lineage; - lineage.push_back(tax); + for (Ptr off : curr->GetOffspring()) { + // std::cout << "Recursing on ID: " << off->GetID() << " Offspring: " << off->GetTotalOffspring() << std::endl; - while (tax) { - tax = Parent(tax); - lineage.push_back(tax); + CollessStruct new_result = RecursiveCollessStep(off); + result.ns.push_back(Sum(new_result.ns) + log(off->GetOffspring().size() + exp(1))); + result.total += new_result.total; } - return lineage; + + // std::cout << "Evaluating: " << curr->GetID() << std::endl; + + double med = Median(result.ns); + double sum_diffs = 0; + // std::cout << "Median: " << med << std::endl; + for (double n : result.ns) { + // std::cout << n << std::endl; + sum_diffs += std::abs(n-med); + } + // std::cout << "Sumdiffs: " << sum_diffs << " n: " << result.ns.size() << " average: " << sum_diffs/result.ns.size() << std::endl; + result.total += sum_diffs/result.ns.size(); + return result; } - /// @returns vector containing the lineages of the specified taxon - /// up to and including the MRCA, but not past the MRCA - emp::vector> GetLineageToMRCA(Ptr tax) const { + /** Calculate Colless Index of this tree (Colless, 1982; reviewed in Shao, 1990). + * Measures tree balance. The standard Colless index only works for bifurcating trees, + * so this will be a Colless-like Index, as suggested in + * "Sound Colless-like balance indices for multifurcating trees" (Mir, 2018, PLoS One) + */ + double CollessLikeIndex() const { GetMRCA(); - emp::vector> lineage; - lineage.push_back(tax); - while (tax && tax != mrca) { - tax = Parent(tax); - lineage.push_back(tax); - } - return lineage; + return RecursiveCollessStep(mrca).total; } - // ===== Output functions ==== + + void RemoveBefore(int ud) { + + // @ELD: This would be such a nice way to do it + // but we can't because we need to notify offspring + // when their parents are un-tracked + // std::set> to_remove; + // for (Ptr tax : ancestor_taxa) { + // if (tax->GetDestructionTime() < ud) { + // to_remove.insert(tax); + // } + // } + + // for (Ptr tax : to_remove) { + // ancestor_taxa.erase(tax); + // tax.Delete(); + // } + + std::map, std::set>> to_remove; + + for (Ptr tax : active_taxa) { + Ptr curr = tax; + + while (curr && !CanRemove(curr->GetParent(), ud)) { + curr = curr->GetParent(); + } + + if (curr) { + Ptr next = curr->GetParent(); + while (next) { + to_remove[next].insert(curr); + curr = next; + next = next->GetParent(); + } + } + } + // std::cout << "About to remove " << to_remove.size() << " orgs" << std::endl; + for (std::pair, std::set>> el : to_remove) { + emp_assert(el.first->GetDestructionTime() < ud, el.first->GetDestructionTime(), ud); + if (el.first->GetNumOff() == el.second.size()) { + // Everything is account for + for (auto tax : el.second) { + tax->NullifyParent(); + } + ancestor_taxa.erase(el.first); + el.first.Delete(); + } + } + + } + + bool CanRemove(Ptr t, int ud) { + if (!t) { + return false; + } + while (t) { + if (t->GetNumOrgs() > 0 || t->GetDestructionTime() >= ud) { + return false; + } + t = t->GetParent(); + } + return true; + } + + /// Request a pointer to the Most-Recent Common Ancestor for the population. + Ptr GetMRCA() const; + + /// Request the depth of the Most-Recent Common Ancestor; return -1 for none. + int GetMRCADepth() const; + + /// Add information about a new organism, including its stored info and parent's taxon; + /// If you would like the systematics manager to track taxon age, you can also supply + /// the update at which the taxon is being added. + /// return a pointer for the associated taxon. + void AddOrg(ORG && org, WorldPosition pos, int update=-1); + Ptr AddOrg(ORG && org, WorldPosition pos, Ptr parent=nullptr, int update=-1); + Ptr AddOrg(ORG && org, Ptr parent=nullptr, int update=-1); + + void AddOrg(ORG & org, WorldPosition pos, int update=-1); + Ptr AddOrg(ORG & org, WorldPosition pos, Ptr parent=nullptr, int update=-1); + Ptr AddOrg(ORG & org, Ptr parent=nullptr, int update=-1); + + + /// Remove an instance of an organism; track when it's gone. + bool RemoveOrg(WorldPosition pos, int time=-1); + bool RemoveOrg(Ptr taxon, int time=-1); + + void RemoveOrgAfterRepro(WorldPosition pos, int time=-1); + void RemoveOrgAfterRepro(Ptr taxon, int time=-1); + + /// Remove org from next population (for use with synchronous generations) + // bool RemoveNextOrg(WorldPosition pos, int time=-1); + // bool RemoveNextOrg(Ptr taxon, int time=-1); + + /// Climb up a lineage... + Ptr Parent(Ptr taxon) const; /// Print details about the Systematics manager. - /// First prints setting, followed by all active, ancestor, and outside - /// taxa being stored. Format for taxa is - /// [ id | number of orgs in this taxon, number of offspring taxa of this taxon | parent taxon] - /// @param os output stream to print to void PrintStatus(std::ostream & os=std::cout) const; - /// Print a whole lineage. Format: "Lineage:", followed by each taxon in the lineage, each on new line - /// @param taxon a pointer to the taxon to print the lineage of - /// @param os output stream to print to + /// Print whole lineage. void PrintLineage(Ptr taxon, std::ostream & os=std::cout) const; - /// Add a new snapshot function. - /// When a snapshot of the systematics is taken, in addition to the default - /// set of functions, all user-added snapshot functions are run. Functions - /// take a reference to a taxon as input and return the string to be dumped - /// in the file at the given key. - void AddSnapshotFun(const std::function & fun, - const std::string & key, const std::string & desc="") { - user_snapshot_funs.emplace_back(fun, key, desc); - } - - /// Take a snapshot of current state of taxon phylogeny. - /// WARNING: Current, this function assumes one parent taxon per-taxon. - /// @param file_path the file to store the snapshot data in void Snapshot(const std::string & file_path) const; - void SwapPositions(WorldPosition p1, WorldPosition p2) { - emp::vector > & v1 = taxon_locations[p1.GetPopID()]; - emp::vector > & v2 = taxon_locations[p2.GetPopID()]; - std::swap(v1[p1.GetIndex()], v2[p2.GetIndex()]); - } + /// Calculate the genetic diversity of the population. + double CalcDiversity() const; }; @@ -1142,28 +1414,6 @@ namespace emp { // === === // ============================================================= - // ======= Functions for manipulating systematics manager internals - - template - void Systematics::Update() { - if (track_synchronous) { - - // Clear pending removal - if (to_be_removed != nullptr) { - RemoveOrg(to_be_removed); - taxon_locations[removal_pos.GetPopID()][removal_pos.GetIndex()] = nullptr; - to_be_removed = nullptr; - removal_pos = {0, 0}; - } - - // Assumes that synchronous worlds have two populations, with 0 - // being currently alive and 1 being the one being created - std::swap(taxon_locations[0], taxon_locations[1]); - taxon_locations[1].resize(0); - } - ++curr_update; - } - // Should be called wheneven a taxon has no organisms AND no descendants. template void Systematics::Prune(Ptr taxon) { @@ -1187,23 +1437,15 @@ namespace emp { // If the taxon is still active AND the is the current mrca AND now has only one offspring, // clear the MRCA for lazy re-evaluation later. - else if (taxon == mrca && taxon->GetNumOff() == 1) { - mrca = nullptr; - } + else if (taxon == mrca && taxon->GetNumOff() == 1) mrca = nullptr; } // Mark a taxon extinct if there are no more living members. There may be descendants. template - void Systematics::MarkExtinct(Ptr taxon) { + void Systematics::MarkExtinct(Ptr taxon, int time) { emp_assert(taxon); emp_assert(taxon->GetNumOrgs() == 0); - // Track destruction time - taxon->SetDestructionTime(curr_update); - - // Give other functions a chance to do stuff with taxon before extinction - on_extinct_sig.Trigger(taxon); - if (max_depth == (int)taxon->GetDepth()) { // We no longer know the max depth max_depth = -1; @@ -1223,92 +1465,105 @@ namespace emp { taxon.Delete(); return; } + // std::cout << "About to set destruction time " << time << std::endl; + // Only need to track destruction time if we're archiving taxa + taxon->SetDestructionTime(time); if (store_ancestors) { ancestor_taxa.insert(taxon); // Move taxon to ancestors... } - if (taxon == mrca && taxon->GetNumOff() <= 1) { - // If this taxon was mrca and has only one offspring, then the new - // mrca is somewhere farther down the chain. - // If this taxon was mrca and now has no offspring, something very - // strange has happened. - // Either way, we should mark mrca for lazy recalculation - mrca = nullptr; - } if (taxon->GetNumOff() == 0) Prune(taxon); // ...and prune from there if needed. } - // Add information about a new organism, including its stored info and parent's taxon; - // Can't return a pointer for the associated taxon because of obnoxious inheritance problems + + // Request a pointer to the Most-Recent Common Ancestor for the population. template - // Ptr::taxon_t> - void Systematics::AddOrg(ORG & org, WorldPosition pos) { - emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); - // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); - AddOrg(org, pos, next_parent); - next_parent = nullptr; + Ptr::taxon_t> Systematics::GetMRCA() const { + if (!mrca && num_roots == 1) { // Determine if we need to calculate the MRCA. + // First, find a candidate among the living taxa. Only taxa that have one offsrping + // can be on the line-of-descent to the MRCA, so anything else is a good start point. + // There must be at least one! Stop as soon as we find a candidate. + Ptr candidate(nullptr); + for (auto x : active_taxa) { + if (x->GetNumOff() != 1) { candidate = x; break; } + } + + // Now, trace the line of descent, updating the candidate as we go. + Ptr test_taxon = candidate->GetParent(); + while (test_taxon) { + emp_assert(test_taxon->GetNumOff() >= 1); + // If the test_taxon is dead, we only want to update candidate when we hit a new branch point + // If test_taxon is still alive, though, we always need to update it + if (test_taxon->GetNumOff() > 1 || test_taxon->GetNumOrgs() > 0) candidate = test_taxon; + test_taxon = test_taxon->GetParent(); + } + mrca = candidate; + } + return mrca; } - // Add information about a new organism, including its stored info and parent's taxon; - // Can't return a pointer for the associated taxon because of obnoxious inheritance problems + // Request the depth of the Most-Recent Common Ancestor; return -1 for none. template - // Ptr::taxon_t> - void Systematics::AddOrg(ORG && org, WorldPosition pos) { - emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); - // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); - AddOrg(org, pos, next_parent); - next_parent = nullptr; + int Systematics::GetMRCADepth() const { + GetMRCA(); + if (mrca) return (int) mrca->GetDepth(); + return -1; } + + // Add information about a new organism, including its stored info and parent's taxon; // Can't return a pointer for the associated taxon because of obnoxious inheritance problems template // Ptr::taxon_t> - void Systematics::AddOrg(ORG & org, WorldPosition pos, WorldPosition parent) { + void Systematics::AddOrg(ORG & org, WorldPosition pos, int update) { emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); - AddOrg(org, pos, taxon_locations[parent.GetPopID()][parent.GetIndex()]); + // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); + AddOrg(org, pos, next_parent, update); + next_parent = nullptr; } // Add information about a new organism, including its stored info and parent's taxon; // Can't return a pointer for the associated taxon because of obnoxious inheritance problems template // Ptr::taxon_t> - void Systematics::AddOrg(ORG && org, WorldPosition pos, WorldPosition parent) { + void Systematics::AddOrg(ORG && org, WorldPosition pos, int update) { emp_assert(store_position, "Trying to pass position to a systematics manager that can't use it"); - AddOrg(org, pos, taxon_locations[parent.GetPopID()][parent.GetIndex()]); + // emp_assert(next_parent, "Adding organism with no parent specified and no next_parent set"); + AddOrg(org, pos, next_parent, update); + next_parent = nullptr; } // Version for if you aren't tracking positions template Ptr::taxon_t> - Systematics::AddOrg(ORG & org, Ptr parent) { - emp_assert(!store_position && - "Trying to add org to position-tracking systematics manager without position. Either specify a valid position or turn of position tracking for systematic manager.", store_position); - return AddOrg(org, WorldPosition::invalid_id, parent); + Systematics::AddOrg(ORG & org, Ptr parent, int update) { + return AddOrg(org, -1, parent, update); } // Version for if you aren't tracking positions template Ptr::taxon_t> - Systematics::AddOrg(ORG && org, Ptr parent) { + Systematics::AddOrg(ORG && org, Ptr parent, int update) { emp_assert(!store_position && "Trying to add org to position-tracking systematics manager without position. Either specify a valid position or turn of position tracking for systematic manager.", store_position); - return AddOrg(org, WorldPosition::invalid_id, parent); + return AddOrg(org, WorldPosition::invalid_id, parent, update); } // Add information about a new organism, including its stored info and parent's taxon; // return a pointer for the associated taxon. template Ptr::taxon_t> - Systematics::AddOrg(ORG && org, WorldPosition pos, Ptr parent) { - return AddOrg(org, pos, parent); + Systematics::AddOrg(ORG && org, WorldPosition pos, Ptr parent, int update) { + return AddOrg(org, pos, parent, update); } // Add information about a new organism, including its stored info and parent's taxon; + // return a pointer for the associated taxon. template Ptr::taxon_t> - Systematics::AddOrg(ORG & org, WorldPosition pos, Ptr parent) { + Systematics::AddOrg(ORG & org, WorldPosition pos, Ptr parent, int update) { org_count++; // Keep count of how many organisms are being tracked. ORG_INFO info = calc_info_fun(org); @@ -1326,29 +1581,33 @@ namespace emp { if (max_depth != -1 && (int)cur_taxon->GetDepth() > max_depth) { max_depth = cur_taxon->GetDepth(); } - + on_new_sig.Trigger(cur_taxon, org); if (store_active) active_taxa.insert(cur_taxon); // Store new taxon. - if (parent) parent->AddOffspring(cur_taxon); // Track tree info. + if (parent) parent->AddOffspring(cur_taxon); // Track tree info. - cur_taxon->SetOriginationTime(curr_update); - on_new_sig.Trigger(cur_taxon, org); + cur_taxon->SetOriginationTime(update); } // std::cout << "about to store poisition" << std::endl; - if (store_position) { - if (pos.GetPopID() >= taxon_locations.size()) { - taxon_locations.resize(pos.GetPopID()+1); - } - if (pos.GetIndex() >= taxon_locations[pos.GetPopID()].size()) { - taxon_locations[pos.GetPopID()].resize(pos.GetIndex()+1); + if (store_position && pos.GetIndex() >= 0) { + if (pos.GetPopID()) { + if (pos.GetIndex() >= next_taxon_locations.size()) { + next_taxon_locations.resize(pos.GetIndex()+1); + } + next_taxon_locations[pos.GetIndex()] = cur_taxon; + + } else { + if (pos.GetIndex() >= taxon_locations.size()) { + taxon_locations.resize(pos.GetIndex()+1); + } + taxon_locations[pos.GetIndex()] = cur_taxon; } - taxon_locations[pos.GetPopID()][pos.GetIndex()] = cur_taxon; } cur_taxon->AddOrg(); // Record the current organism in its taxon. total_depth += cur_taxon->GetDepth(); // Track the total depth (for averaging) if (to_be_removed) { - RemoveOrg(to_be_removed); + RemoveOrg(to_be_removed, removal_time); to_be_removed = nullptr; } @@ -1357,52 +1616,57 @@ namespace emp { } template - void Systematics::RemoveOrgAfterRepro(WorldPosition pos) { + void Systematics::RemoveOrgAfterRepro(WorldPosition pos, int time) { emp_assert(store_position, "Trying to remove org based on position from systematics manager that doesn't track it."); - if (pos.GetPopID() >= taxon_locations.size() || - pos.GetIndex() >= taxon_locations[pos.GetPopID()].size() || - !taxon_locations[pos.GetPopID()][pos.GetIndex()]) { + if (pos.GetIndex() >= taxon_locations.size() || !taxon_locations[pos.GetIndex()]) { // There's not actually a taxon here return; } - RemoveOrgAfterRepro(taxon_locations[pos.GetPopID()][pos.GetIndex()]); - removal_pos = pos; + RemoveOrgAfterRepro(taxon_locations[pos.GetIndex()], time); + removal_pos = pos.GetIndex(); } template - void Systematics::RemoveOrgAfterRepro(Ptr taxon) { + void Systematics::RemoveOrgAfterRepro(Ptr taxon, int time) { if (to_be_removed != nullptr) { - RemoveOrg(to_be_removed); - taxon_locations[removal_pos.GetPopID()][removal_pos.GetIndex()] = nullptr; + RemoveOrg(to_be_removed, removal_time); + taxon_locations[removal_pos] = nullptr; to_be_removed = nullptr; - removal_pos = {0, 0}; + removal_pos = -1; } to_be_removed = taxon; + // std::cout << "Setting remove time to " << time << std::endl; + removal_time = time; } - // Remove an instance of a taxon; track when it's gone. + // Remove an instance of an organism; track when it's gone. template - bool Systematics::RemoveOrg(WorldPosition pos) { + bool Systematics::RemoveOrg(WorldPosition pos, int time) { emp_assert(store_position, "Trying to remove org based on position from systematics manager that doesn't track it."); - emp_assert(pos.GetPopID() < taxon_locations.size(), "Invalid population requested for removal", pos.GetPopID(), taxon_locations.size()); - emp_assert(pos.GetIndex() < taxon_locations[pos.GetPopID()].size(), "Invalid position requested for removal", pos.GetIndex(), taxon_locations[pos.GetPopID()].size()); - bool active = false; - if (taxon_locations[pos.GetPopID()][pos.GetIndex()]) { - //TODO: Figure out how this can ever not be true - active = RemoveOrg(taxon_locations[pos.GetPopID()][pos.GetIndex()]); + if (pos.GetPopID() == 0) { + emp_assert(pos.GetIndex() < taxon_locations.size(), "Invalid position requested for removal", pos.GetIndex(), taxon_locations.size()); + bool active = false; + if (taxon_locations[pos.GetIndex()]) { + //TODO: Figure out how this can ever not be true + active = RemoveOrg(taxon_locations[pos.GetIndex()], time); + } + taxon_locations[pos.GetIndex()] = nullptr; + return active; + } else { + emp_assert(pos.GetIndex() < next_taxon_locations.size(), "Invalid position requested for removal", pos.GetIndex(), taxon_locations.size()); + bool active = RemoveOrg(next_taxon_locations[pos.GetIndex()], time); + next_taxon_locations[pos.GetIndex()] = nullptr; + return active; } - taxon_locations[pos.GetPopID()][pos.GetIndex()] = nullptr; - return active; } - // Remove an instance of a taxon; track when it's gone. - // @param taxon the taxon of which one instance is being removed + // Remove an instance of an organism; track when it's gone. template - bool Systematics::RemoveOrg(Ptr taxon) { + bool Systematics::RemoveOrg(Ptr taxon, int time) { emp_assert(taxon); // Update stats @@ -1411,58 +1675,12 @@ namespace emp { // emp_assert(Has(active_taxa, taxon)); const bool active = taxon->RemoveOrg(); - if (!active) MarkExtinct(taxon); + if (!active) MarkExtinct(taxon, time); return active; } - // Remove all taxa that 1) went extinct before the specified update/time step, - // and 2) only have ancestors that went extinct before the specified update/time step. - // Warning: this function invalidates most measurements you could make about tree topology. - // It is useful in select situations where you need to store ancestors for some period of time, - // but cannot computationally afford to store all ancestors for your entire run. - template - void Systematics::RemoveBefore(int ud) { - - std::set> to_remove; - for (Ptr tax : ancestor_taxa) { - if (tax->GetDestructionTime() < ud && CanRemove(tax, ud)) { - to_remove.insert(tax); - } - } - - for (Ptr tax : to_remove) { - for (Ptr off : tax->GetOffspring()) { - off->NullifyParent(); - } - ancestor_taxa.erase(tax); - tax.Delete(); - } - - } - - #ifndef DOXYGEN_SHOULD_SKIP_THIS - /// Helper function for RemoveBefore - /// @returns true if a a taxon can safely be - /// removed by RemoveBefore - template - bool Systematics::CanRemove(Ptr t, int ud) { - if (!t) { - return false; - } - while (t) { - if (t->GetNumOrgs() > 0 || t->GetDestructionTime() >= ud) { - return false; - } - t = t->GetParent(); - } - return true; - } - #endif // #DOXYGEN_SHOULD_SKIP_THIS - - // ======= Functions for getting information from the systematics manager - - // @returns a pointer to the parent of a given taxon + // Climb up a lineage... template Ptr::taxon_t> Systematics::Parent(Ptr taxon) const { emp_assert(taxon); @@ -1471,10 +1689,6 @@ namespace emp { } // Print details about the Systematics manager. - // First prints setting, followed by all active, ancestor, and outside - // taxa being stored. Format for taxa is - // [ id | number of orgs in this taxon, number of offspring taxa of this taxon | parent taxon] - // @param os output stream to print to template void Systematics::PrintStatus(std::ostream & os) const { os << "Systematics Status:\n"; @@ -1507,6 +1721,7 @@ namespace emp { os << std::endl; } + // Print whole lineage. template void Systematics::PrintLineage(Ptr taxon, std::ostream & os) const { os << "Lineage:\n"; @@ -1516,6 +1731,8 @@ namespace emp { } } + /// Take a snapshot of current state of taxon phylogeny. + /// WARNING: Current, this function assumes one parent taxon per-taxon. template void Systematics::Snapshot(const std::string & file_path) const { emp::DataFile file(file_path); @@ -1530,7 +1747,7 @@ namespace emp { // - ancestor_list: ancestor list for taxon std::function get_ancestor_list = [&cur_taxon]() -> std::string { - if (cur_taxon->GetParent() == nullptr) { return "[\"NONE\"]"; } + if (cur_taxon->GetParent() == nullptr) { return "[NONE]"; } return "[" + to_string(cur_taxon->GetParent()->GetID()) + "]"; }; file.AddFun(get_ancestor_list, "ancestor_list", "Ancestor list for this taxon."); @@ -1613,372 +1830,11 @@ namespace emp { } - // ======= Measurements about the systematics manager - - // @returns the genetic diversity of the population. + // Calculate the genetic diversity of the population. template double Systematics::CalcDiversity() const { return emp::Entropy(active_taxa, [](Ptr x){ return x->GetNumOrgs(); }, (double) org_count); } - - // @returns a pointer to the Most-Recent Common Ancestor for the population or null pointer if there isn't one - template - Ptr::taxon_t> Systematics::GetMRCA() const { - if (!mrca && num_roots == 1) { // Determine if we need to calculate the MRCA. - // First, find a candidate among the living taxa. Only taxa that have one offsrping - // can be on the line-of-descent to the MRCA, so anything else is a good start point. - // There must be at least one! Stop as soon as we find a candidate. - Ptr candidate(nullptr); - for (auto x : active_taxa) { - if (x->GetNumOff() != 1) { candidate = x; break; } - } - - // Now, trace the line of descent, updating the candidate as we go. - Ptr test_taxon = candidate->GetParent(); - while (test_taxon) { - emp_assert(test_taxon->GetNumOff() >= 1); - // If the test_taxon is dead, we only want to update candidate when we hit a new branch point - // If test_taxon is still alive, though, we always need to update it - if (test_taxon->GetNumOff() > 1 || test_taxon->GetNumOrgs() > 0) candidate = test_taxon; - test_taxon = test_taxon->GetParent(); - } - mrca = candidate; - } - return mrca; - } - - // @returns the depth of the Most-Recent Common Ancestor or -1 for none. - template - int Systematics::GetMRCADepth() const { - GetMRCA(); - if (mrca) return (int) mrca->GetDepth(); - return -1; - } - - template - Ptr::taxon_t> Systematics::GetSharedAncestor(Ptr t1, Ptr t2) const { - // Same taxon - if (t1 == t2) { - return t1; - } - - // If not same, we have to actually do work - emp::vector > lineage1 = GetLineageToMRCA(t1); - emp::vector > lineage2 = GetLineageToMRCA(t2); - - size_t l1 = lineage1.size() - 1; - size_t l2 = lineage2.size() - 1; - - emp_assert(lineage1[l1] == lineage2[l2], - "Both lineages should start with MRCA"); - - while (lineage1[l1] == lineage2[l2]) { - l1--; - l2--; - } - - return lineage1[l1+1]; - } - - #ifndef DOXYGEN_SHOULD_SKIP_THIS - // Helper for Colless function calculation - struct CollessStruct { - double total = 0; - emp::vector ns; - }; - - // Helper for Colless function calculation - template - CollessStruct Systematics::RecursiveCollessStep(Ptr curr) const { - CollessStruct result; - - while (curr->GetNumOff() == 1) { - curr = *(curr->GetOffspring().begin()); - } - - if (curr->GetNumOff() == 0) { - result.ns.push_back(0); // Node itself is calculated at level above - return result; - } - - for (Ptr off : curr->GetOffspring()) { - // std::cout << "Recursing on ID: " << off->GetID() << " Offspring: " << off->GetTotalOffspring() << std::endl; - - CollessStruct new_result = RecursiveCollessStep(off); - result.ns.push_back(Sum(new_result.ns) + log(off->GetOffspring().size() + exp(1))); - result.total += new_result.total; - } - - // std::cout << "Evaluating: " << curr->GetID() << std::endl; - - double med = Median(result.ns); - double sum_diffs = 0; - // std::cout << "Median: " << med << std::endl; - for (double n : result.ns) { - // std::cout << n << std::endl; - sum_diffs += std::abs(n-med); - } - // std::cout << "Sumdiffs: " << sum_diffs << " n: " << result.ns.size() << " average: " << sum_diffs/result.ns.size() << std::endl; - result.total += sum_diffs/result.ns.size(); - return result; - } - #endif // #DOXYGEN_SHOULD_SKIP_THIS - - template - emp::vector Systematics::GetPairwiseDistances(bool branch_only) const { - // The overarching approach here is to start with a bunch of pointers to all - // extant organisms (since that will include all leaves). Then we trace back up - // the tree, keeping track of distances. When things meet up, we calculate - // distances between the nodes on the sides that just met up. - - emp::vector dists; - - std::map< Ptr, emp::vector> > curr_pointers; - std::map< Ptr, emp::vector> > next_pointers; - - - for (Ptr tax : active_taxa) { - curr_pointers[tax] = emp::vector>({{0}}); - } - - // std::cout << "Starting curr_pointers size: " << curr_pointers.size() << std::endl; - - while (curr_pointers.size() > 0) { - for (auto & tax : curr_pointers) { - bool alive = tax.first->GetNumOrgs() > 0; - // std::cout << tax.first << " has " << to_string(tax.second) << "and is waiting for " << tax.first->GetNumOff() + int(alive) << std::endl; - if ( tax.second.size() < tax.first->GetNumOff() + int(alive)) { - if (Has(next_pointers, tax.first)) { - // In case an earlier iteration added this node to next_pointers - for (auto vec : tax.second) { - next_pointers[tax.first].push_back(vec); - } - } else { - next_pointers[tax.first] = curr_pointers[tax.first]; - } - continue; - } - emp_assert(tax.first->GetNumOff() + int(alive) == tax.second.size(), tax.first->GetNumOff(), alive, to_string(tax.second), tax.second.size()); - - // Okay, things should have just met up. Let's compute the distances - // between everything that just met. - - if (tax.second.size() > 1) { - - for (size_t i = 0; i < tax.second.size(); i++ ) { - for (size_t j = i+1; j < tax.second.size(); j++) { - for (int disti : tax.second[i]) { - for (int distj : tax.second[j]) { - // std::cout << "Adding " << disti << " and " << distj << std::endl; - dists.push_back(disti+distj); - } - } - } - } - } - // std::cout << "dists " << to_string(dists) << std::endl; - // Increment distances and stick them in new vector - emp::vector new_dist_vec; - for (auto & vec : tax.second) { - for (int el : vec) { - new_dist_vec.push_back(el+1); - } - } - - // std::cout << "new_dist_vec " << to_string(new_dist_vec) << std::endl; - - next_pointers.erase(tax.first); - - Ptr test_taxon = tax.first->GetParent(); - while (test_taxon && test_taxon->GetNumOff() == 1 && test_taxon->GetNumOrgs() == 0) { - if (!branch_only) { - for (size_t i = 0; i < new_dist_vec.size(); i++){ - new_dist_vec[i]++; - } - } - test_taxon = test_taxon->GetParent(); - } - - if (!test_taxon) { - continue; - } else if (!Has(next_pointers, test_taxon)) { - next_pointers[test_taxon] = emp::vector >({new_dist_vec}); - } else { - next_pointers[test_taxon].push_back(new_dist_vec); - } - } - curr_pointers = next_pointers; - next_pointers.clear(); - // std::cout << curr_pointers.size() << std::endl; - } - - if (dists.size() != (active_taxa.size()*(active_taxa.size()-1))/2) { - // The tree is not connected - // It's possible we should do something different here... - return dists; - } - - // std::cout << "Total: " << total << "Dists: " << dists.size() << std::endl; - - return dists; - - } - - template - double Systematics::GetEvolutionaryDistinctiveness(Ptr tax, double time) const { - - double depth = 0; // Length (in time units) of section we're currently exploring - double total = 0; // Count up scores for each section of tree - double divisor = tax->GetTotalOffspring() + 1; // Number of extant taxa this will split into (1 for current taxa, plus its offspring) - - // We're stopping when we hit MRCA, so we need to make sure it's been calculated. - GetMRCA(); - if (tax == mrca) { - return 0; - } - - // std::cout << "Initializing divisor to " << divisor << " Offspring: " << tax->GetTotalOffspring() << std::endl; - // std::cout << "MRCA ID: " << mrca->GetID() << " Tax ID: " << tax->GetID() << " time: " << time << " Orig: " << tax->GetOriginationTime() << std::endl; - - Ptr test_taxon = tax->GetParent(); - - emp_assert(time != -1 && "Invalid time - are you passing time to rg?", time); - emp_assert(time >= tax->GetOriginationTime() - && "GetEvolutionaryDistinctiveness received a time that is earlier than the taxon's origination time.", tax->GetOriginationTime(), time); - - while (test_taxon) { - - // emp_assert(test_taxon->GetOriginationTime() != -1 && - // "Invalid time - are you passing time to rg?", time); - - depth += time - test_taxon->GetOriginationTime(); - // std::cout << "Tax: " << test_taxon->GetID() << " depth: " << depth << " time: " << time << " Orig: " << test_taxon->GetOriginationTime() << " divisor: " << divisor << std::endl; - time = test_taxon->GetOriginationTime(); - if (test_taxon == mrca || !test_taxon) { - // Stop when everything has converged or when we hit the root. - // std::cout << (int)(test_taxon == mrca) << " depth: " << depth << " divisor: " << divisor << std::endl; - total += depth/divisor; - return total; - } else if (test_taxon->GetNumOrgs() > 0) { - // If this taxon is still alive we need to update the divisor - // std::cout << "Alive point" << " depth: " << depth << " divisor: " << divisor << std::endl; - total += depth/divisor; - depth = 0; - divisor = test_taxon->GetTotalOffspring() + 1; - } else if (test_taxon->GetNumOff() > 1) { - // This is a branch point. We need to add the things on the other branch to the divisor.. - // std::cout << "Branch point" << " depth: " << depth << " divisor: " << divisor << std::endl; - total += depth/divisor; - depth = 0; - divisor = test_taxon->GetTotalOffspring(); - } - - test_taxon = test_taxon->GetParent(); - } - - return -1; - } - - template - int Systematics::GetBranchesToRoot(Ptr tax) const { - GetMRCA(); - - int depth = 0; - Ptr test_taxon = tax->GetParent(); - while (test_taxon) { - if (test_taxon == mrca || !test_taxon) { - return depth; - } else if (test_taxon->GetNumOff() > 1) { - depth++; - } - test_taxon = test_taxon->GetParent(); - } - return depth; - } - - template - int Systematics::GetDistanceToRoot(Ptr tax) const { - // Now, trace the line of descent, updating the candidate as we go. - GetMRCA(); - - int depth = 0; - Ptr test_taxon = tax->GetParent(); - while (test_taxon) { - depth++; - if (test_taxon == mrca || !test_taxon) { - return depth; - } - test_taxon = test_taxon->GetParent(); - } - return depth; - } - - template - std::set::taxon_t>> Systematics::GetCanopyExtantRoots(int time_point) const { - // NOTE: This could be made faster by doing something similar to the pairwise distance - // function - using taxon_t = Systematics::taxon_t; - std::set< Ptr> result; - // std::cout << "starting " << time_point << std::endl; - for (Ptr tax : active_taxa) { - // std::cout << tax->GetInfo() << std::endl; - while (tax) { - // std::cout << tax->GetInfo() << " " << tax->GetOriginationTime() << " " << tax->GetDestructionTime() << std::endl; - if (tax->GetOriginationTime() <= time_point && tax->GetDestructionTime() > time_point ) { - result.insert(tax); - // std::cout << "inserting " << tax->GetInfo() << std::endl; - break; - } - tax = tax->GetParent(); - } - } - - return result; - - } - - template - int Systematics::GetPhylogeneticDiversityNormalize(int generation, std::string filename) const { - int gen_value = ((generation / 10) - 1); //indexes from 0, 100 generations would correspond to the 10th line in the csv - // bool percent_found = false; - int phylogenetic_diversity = ancestor_taxa.size() + active_taxa.size() - 1; - - if(filename == ""){ - //std::cout << "Phylogenetic Diversity is " << phylogenetic_diversity << std::endl; - return phylogenetic_diversity; - } else{ - - emp::File generation_percentiles(filename); //opens file - emp::vector< emp::vector >percentile_data = generation_percentiles.ToData(','); //turns file contents into vector - - for(int j = 0; j <= percentile_data[gen_value].size() - 2; j++){ //searches through vector for slot where phylo diversity fits - - if((percentile_data[gen_value][j] <= phylogenetic_diversity) && (percentile_data[gen_value][j + 1] > phylogenetic_diversity)){ - // std::cout << "phylogenetic diversity is in between: " << percentile_data[gen_value][j] << "and " << percentile_data[gen_value][j+1] << std::endl; - // std::cout << "The phylogenetic diversity value " << phylogenetic_diversity << " is in the " << j << " percentile, in the " << ((gen_value + 1)* 10) << " generation" << std::endl; - return j; - } - } - } - return 100; - } - - template - int Systematics::GetMaxDepth() { - if (max_depth != -1) { - return max_depth; - } - - for (auto tax : active_taxa) { - int depth = tax->GetDepth(); - if (depth > max_depth) { - max_depth = depth; - } - } - return max_depth; - } - - } #endif // #ifndef EMP_EVOLVE_SYSTEMATICS_HPP_INCLUDE From 8bb3f1e601556020061bdc37db43cb86238f0faa Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 18:52:34 -0500 Subject: [PATCH 70/80] Install doxygen into docker container --- .github/workflows/CI.yml | 1 - Dockerfile | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 6ff78403e4..3195974561 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -142,7 +142,6 @@ jobs: - uses: actions/checkout@v3 with: submodules: 'recursive' - - uses: ssciwr/doxygen-install@v1 - run: doxygen - run: cd doc && python make_md.py - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json diff --git a/Dockerfile b/Dockerfile index 82823d381a..f9ec038066 100644 --- a/Dockerfile +++ b/Dockerfile @@ -86,6 +86,7 @@ RUN \ ssh-client \ libasound2 \ gpg-agent \ + doxygen \ && \ apt-get clean \ && \ From 93794fcdbc7adfffc50ce15f52764c49272de4d4 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 18:56:49 -0500 Subject: [PATCH 71/80] fixup! Strip off-topic changes --- include/emp/Evolve/Systematics.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/include/emp/Evolve/Systematics.hpp b/include/emp/Evolve/Systematics.hpp index c7f220ba84..6681ce3d76 100644 --- a/include/emp/Evolve/Systematics.hpp +++ b/include/emp/Evolve/Systematics.hpp @@ -1,11 +1,11 @@ +/* + * This file is part of Empirical, https://github.com/devosoft/Empirical + * Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md + * date: 2023 +*/ /** - * @note This file is part of Empirical, https://github.com/devosoft/Empirical - * @copyright Copyright (C) Michigan State University, MIT Software license; see doc/LICENSE.md - * @date 2017-2018 - * - * @file Systematics.hpp - * @brief Track genotypes, species, clades, or lineages of organisms in a world. - * + * @file + * @brief TODO. * * @todo Technically, we don't need to keep the ancestors in a set in order to track a lineage... * If we delete all of their descendants they should automaticaly be deleted. From 7805e1a0c357730ce1fe73fc5ad99dc32aa17e64 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 19:05:46 -0500 Subject: [PATCH 72/80] Peg python to python3.10 in container, too --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f9ec038066..3bedff4b06 100644 --- a/Dockerfile +++ b/Dockerfile @@ -98,7 +98,9 @@ RUN \ RUN \ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 \ && \ - update-alternatives --set python3 /usr/bin/python3.10 + update-alternatives --set python3 /usr/bin/python3.10 \ + && \ + update-alternatives --set python /usr/bin/python3.10 RUN \ echo $' \n\ From 6f8e92dcaa5ddfca2c60952d424a1ebadaf0bc7c Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 19:15:10 -0500 Subject: [PATCH 73/80] Use symlink instead of update alternatives --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3bedff4b06..54cc4856f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -100,7 +100,7 @@ RUN \ && \ update-alternatives --set python3 /usr/bin/python3.10 \ && \ - update-alternatives --set python /usr/bin/python3.10 + ln -s /usr/bin/python3.10 /usr/bin/python RUN \ echo $' \n\ From a21c9fd156afd6865df84b96db1757e554090267 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 19:32:00 -0500 Subject: [PATCH 74/80] Drop erring pipefail bash option --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 3195974561..1afff87fcf 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -144,7 +144,7 @@ jobs: submodules: 'recursive' - run: doxygen - run: cd doc && python make_md.py - - run: cd doc && set -o pipefail && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json + - run: cd doc && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json - uses: sylvanld/action-storage@v1 if: github.ref == 'refs/heads/master' with: From 41cb2161211f321e3586e5a81af03566947da54e Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 19:37:26 -0500 Subject: [PATCH 75/80] Make doc cover deploy own job for container compat --- .github/workflows/CI.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1afff87fcf..be433d8eea 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -145,11 +145,24 @@ jobs: - run: doxygen - run: cd doc && python make_md.py - run: cd doc && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json + - uses: actions/upload-artifact@v2 + with: + name: doc-coverage + path: doc/doc-coverage.json + deploy-documentation-coverage: + name: Deploy Documentation Coverage + runs-on: ubuntu-22.04 + if: github.ref == 'refs/heads/master' + needs: test-documentation + steps: + - uses: actions/download-artifact@v2 + with: + name: doc-coverage + path: data - uses: sylvanld/action-storage@v1 - if: github.ref == 'refs/heads/master' with: - src: doc/doc-coverage.json - dst: stats/doc-coverage.json + src: data/doc-coverage.json + dst: data/doc-coverage.json deploy-container: name: Deploy to DockerHub and ghcr.io runs-on: ubuntu-22.04 From 3e1b44273c296b1e3beaa17bba67811f3e4b2b5b Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 20:17:39 -0500 Subject: [PATCH 76/80] Ensure docs deps supersede third-party/requirements --- Dockerfile | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 54cc4856f9..8190ae8cb1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -185,6 +185,8 @@ RUN \ && \ python3.10 -m pip install wheel==0.30.0 six==1.16.0 \ && \ + python3.10 -m pip install -r /opt/Empirical/third-party/requirements.txt \ + && \ python3.10 -m pip install -r /opt/Empirical/doc/requirements.txt \ && \ echo "installed documentation build requirements" @@ -266,13 +268,6 @@ RUN \ && \ echo "installed karma-firefox-launcher" -# @mmore500 10-2021: python3 -m pip fixes UnicodeDecodeError -# when installing charset-normalizer from github -RUN \ - python3 -m pip install -r /opt/Empirical/third-party/requirements.txt \ - && \ - echo "installed documentation build requirements" - # Perform any further action as an unprivileged user. # adapted from https://stackoverflow.com/a/27703359 # and https://superuser.com/a/235398 From 155c3c54c3ef65864de19ced275e51881b3cec31 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 21:49:35 -0500 Subject: [PATCH 77/80] Fix coverage build --- doc/Makefile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index a096f1e1d9..0c627f21c3 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -176,9 +176,9 @@ doctest: @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - python3 -m coverxygen --xml-dir doxyoutput/xml --src-dir .. --format json-summary --output $(BUILDDIR)/doc-coverage.json +coverage: doxygen/xml + mkdir -p $(BUILDDIR) + python3 -m coverxygen --xml-dir doxygen/xml --src-dir .. --format json-summary --output $(BUILDDIR)/doc-coverage.json @echo "Testing of coverage in the sources finished, look at the " \ "results in $(BUILDDIR)/doc-coverage.json." @@ -195,5 +195,8 @@ pseudoxml: .PHONY: help Makefile clean clean: - rm -rf doxyoutput/ api/ + rm -rf doxygen/ api/ @$(SPHINXBUILD) -M clean "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +doxygen/xml: + cd .. && doxygen From 6771a03e44a374e19c699066247255d764c4051f Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 22:29:59 -0500 Subject: [PATCH 78/80] Update CI.yml --- .github/workflows/CI.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index be433d8eea..51a26d692e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -144,7 +144,10 @@ jobs: submodules: 'recursive' - run: doxygen - run: cd doc && python make_md.py - - run: cd doc && make html coverage | ./headtail.sh && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json + - run: cd doc && make html | ./headtail.sh + - run: cd doc && make coverage + - run: ls doc/ && ls doc/_build + - run: cd doc && python parse_documentation_coverage.py _build/doc-coverage.json >> doc-coverage.json - uses: actions/upload-artifact@v2 with: name: doc-coverage From d0f557ee4fc71d2ab133c1423e031e3b8e50744d Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 22:35:52 -0500 Subject: [PATCH 79/80] Flex path to doxygen data with glob --- doc/Makefile | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index 0c627f21c3..aabd1958eb 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -176,11 +176,11 @@ doctest: @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." -coverage: doxygen/xml - mkdir -p $(BUILDDIR) - python3 -m coverxygen --xml-dir doxygen/xml --src-dir .. --format json-summary --output $(BUILDDIR)/doc-coverage.json - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/doc-coverage.json." +coverage: + mkdir -p $(BUILDDIR) + python3 -m coverxygen --xml-dir doxy*/xml --src-dir .. --format json-summary --output $(BUILDDIR)/doc-coverage.json + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/doc-coverage.json." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @@ -197,6 +197,3 @@ pseudoxml: clean: rm -rf doxygen/ api/ @$(SPHINXBUILD) -M clean "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -doxygen/xml: - cd .. && doxygen From e1b4c29df9b61640dc501992d57ca2635de516b6 Mon Sep 17 00:00:00 2001 From: Matthew Andres Moreno Date: Thu, 7 Dec 2023 22:43:11 -0500 Subject: [PATCH 80/80] Ensure tabs in Makefile --- doc/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index aabd1958eb..d81f3c4435 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -177,10 +177,10 @@ doctest: "results in $(BUILDDIR)/doctest/output.txt." coverage: - mkdir -p $(BUILDDIR) - python3 -m coverxygen --xml-dir doxy*/xml --src-dir .. --format json-summary --output $(BUILDDIR)/doc-coverage.json - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/doc-coverage.json." + mkdir -p $(BUILDDIR) + python3 -m coverxygen --xml-dir doxy*/xml --src-dir .. --format json-summary --output $(BUILDDIR)/doc-coverage.json + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/doc-coverage.json." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml