{"id":16890944,"url":"https://github.com/alandefreitas/scistats","last_synced_at":"2025-04-11T13:10:33.642Z","repository":{"id":56596220,"uuid":"308142945","full_name":"alandefreitas/scistats","owner":"alandefreitas","description":"High-Performance Descriptive Statistics and Hypothesis Tests in C++20","archived":false,"fork":false,"pushed_at":"2020-12-08T06:50:55.000Z","size":3342,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-25T09:21:43.972Z","etag":null,"topics":["bayesian-statistics","data-analysis","descriptive-statistics","hypothesis-testing","performance-statistics","statistics"],"latest_commit_sha":null,"homepage":"https://alandefreitas.github.io/scistats/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alandefreitas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-28T21:16:41.000Z","updated_at":"2023-11-06T01:46:55.000Z","dependencies_parsed_at":"2022-08-15T21:40:21.099Z","dependency_job_id":null,"html_url":"https://github.com/alandefreitas/scistats","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alandefreitas%2Fscistats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alandefreitas%2Fscistats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alandefreitas%2Fscistats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alandefreitas%2Fscistats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alandefreitas","download_url":"https://codeload.github.com/alandefreitas/scistats/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248405049,"owners_count":21097885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bayesian-statistics","data-analysis","descriptive-statistics","hypothesis-testing","performance-statistics","statistics"],"created_at":"2024-10-13T17:05:03.068Z","updated_at":"2025-04-11T13:10:33.600Z","avatar_url":"https://github.com/alandefreitas.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scistats\n\n\u003e High-Performance Descriptive Statistics and Hypothesis Tests in C++20\n\n[![Scistats](docs/img/banner.gif)](https://alandefreitas.github.io/scistats/)\n\n\u003cbr/\u003e\n\nStatistics help us analyze and interpret data. High-performance statistical algorithms help us analyze and interpret a lot of data. Most environments provide convenient helper functions to calculate basic statistics. Scistats aims to provide high-performance statistical algorithms with an easy and familiar interface. All algorithms can run sequentially or in parallel, depending on how much data you have.\n\n\u003cbr/\u003e\n\n\u003c!-- https://gist.github.com/jbroadway/2836900 --\u003e\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eTable of Contents\u003c/summary\u003e\n\n- [Quick Start](#quick-start)\n- [Descriptive statistics](#descriptive-statistics)\n  - [Central Tendency](#central-tendency)\n  - [Dispersion](#dispersion)\n  - [Multivariate Analysis](#multivariate-analysis)\n- [Probability Distributions](#probability-distributions)\n- [Hypothesis Testing](#hypothesis-testing)\n- [Bayesian statistics](#bayesian-statistics)\n- [Mathematics](#mathematics)\n  - [Parallel Arithmetic](#parallel-arithmetic)\n  - [Constants](#constants)\n  - [Functions](#functions)\n  - [Measuring Time](#measuring-time)\n  - [Random Number Generators](#random-number-generators)\n- [Roadmap](#roadmap)\n- [Integration](#integration)\n  - [Build from Source](#build-from-source)\n  - [CMake targets](#cmake-targets)\n  - [Other build systems](#other-build-systems)\n- [Contributing](#contributing)\n  - [Contributors](#contributors)\n\n\u003c/details\u003e\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Quick Start\n\nScistats extends the numeric facilities of the standard library to include statistics that work with iterators and ranges. This means you can do things like:\n\n```cpp\nstd::vector\u003cint\u003e v{/*...*/};\nfloat m = scistats::mean(v);\n```\n\nor \n\n```cpp\nstd::vector\u003cint\u003e v{/*...*/};\nfloat s = scistats::stddev(v); // \n```\n\nor\n\n```cpp\nstd::vector\u003cint\u003e v1{/*...*/};\nstd::vector\u003cint\u003e v2{/*...*/};\nfloat c = scistats::cov(v); // covariance\n```\n\nor \n\n```cpp\nstd::vector\u003cint\u003e v{/*...*/};\nfloat p = scistats::t_test(v); // student's t hypothesis test\n```\n \nAll algorithms allow execution policies and iterators. So you can do\n\n```cpp\nstd::vector\u003cint\u003e v{/*...*/};\nfloat m = scistats::mean(scistats::execution::par, v);\n```\n\nto calculate your average in parallel. Or \n\n```cpp\nstd::vector\u003cint\u003e v{/*...*/};\nfloat m = scistats::mean(scistats::execution::seq, v);\n```\n\nto explicitly tell scistats you don't want that to be calculated in parallel. If no execution policy is provided, scistats will choose a policy according to the input size.\n\nAs usual, you can also work directly with iterators, so\n\n```cpp\nstd::vector\u003cint\u003e v{/*...*/};\nfloat m = scistats::mean(v.begin(), v.end();\n```\n\nalso works.\n\nNote that, when needed, the result type gets promoted to `float`. If the result for a given statistic needs to be floating point, scistats will always promote an integer input type to a corresponding floating type large enough to keep the results without losing precision.\n\n## Descriptive statistics\n\n### Central Tendency\n\nWith ranges:\n\n```cpp\nusing namespace scistats;\n// ...\nmean(x); \n```\n\nWith iterators:\n\n```cpp\nmean(x.begin(), x.end()); \n```\n\nYou can run any algorithm in parallel by changing the execution policy:\n\n```cpp\nmean(execution::seq, x);\nmean(execution::par, x);\n```\n\nIf no execution policy is provided, scistats will infer the best execution policy according to the input data.\n\nOther functions to measure central tendency are:\n\n| Function    | Description     |\n| ----------- | --------------- |\n| `mean(x)`   | Arithmetic mean |\n| `median(x)` | Median          |\n| `mode(x)`   | Mode            |\n\n### Dispersion\n\nTo calculate the standard deviation of a data set:\n\n```cpp\nstddev(x);\n```\n\nIf you already know the mean `m`, you can make calculations faster with:\n\n```cpp\nstddev(x,m);\n```\n\nOther functions to measure dispersion are:\n\n| Function          | Description                 |\n| ----------------- | --------------------------- |\n| `var(x)`          | Variance                    |\n| `stddev(x)`       | Standard Deviation          |\n| `min(x)`          | Minimum Value               |\n| `max(x)`          | Maximum Value               |\n| `bounds(x)`       | Minimum and Maximum Values  |\n| `percentile(x,p)` | Calculate `p`-th percentile |\n\n### Multivariate Analysis\n\nTo calculate the covariance of two data sets:\n\n```cpp\ncov(x,y);\n```\n\n## Probability Distributions\n\nTo get the probability of `x` in a normal distribution:\n\n```cpp\nnorm_pdf(x);\n```\n\nTo get the cumulative probability of `x` in a normal distribution:\n\n```cpp\nnorm_cdf(x);\n```\n\nTo get the value `x` that has a cumulative probability `p` in a normal distribution:\n\n```cpp\nnorm_inv(p);\n```\n\n| Probability   | Cumulative    | Inverse       | Description              |\n| ------------- | ------------- | ------------- | ------------------------ |\n| `norm_pdf(x)` | `norm_cdf(x)` | `norm_inv(p)` | Normal distribution      |\n| `t_pdf(x,df)` | `t_cdf(x,df)` | `t_inv(p,df)` | Student's T distribution |\n\nwhere `df` is the degrees of freedom in the probability distribution.\n\n## Hypothesis Testing\n\nTo test the hypothesis that the values in `x` come from a distribution with `mean(x)` is zero:\n\n```cpp\nt_test(x);\n```\n\nTo test the hypothesis that the values in `x` and `y` have the same mean:\n\n```cpp\nt_test(x,y);\n```\n\nFor a paired test:\n\n```cpp\nt_test_paired(x,y);\n```\n\nTo get a confidence interval for these tests:\n\n```cpp\nt_test_interval(x);\nt_test_interval(x,y);\n```\n\n## Bayesian statistics\n\nGiven (i) the probability `P(E|H)=likelihood` of the evidence `E` given the hypothesis `H`, (ii) the prior probability `p_hypothesis` of hypothesis `H`, and (iii) the prior probability `p_evidence` of evidence `E`, we can calculate the probability `P(H|E)` of a hypothesis `H` given the evidence `E` with:  \n\n```cpp\nbayes_theorem(likelihood, p_hypothesis, p_evidence)\n```\n\nGiven `P(E|H)` and `P(E|not H)`, we can calculate the bayes factor:\n\n```cpp\nbayes_factor(p_evidence_given_h, p_evidence_given_not_h)\n``` \n\n## Mathematics\n\n### Parallel Arithmetic\n\nTo sum the elements of a range in parallel:\n\n```cpp\nsum(execution::parallel_policy, x)\n```\n\nOr let `scistats` infer if it is worth doing it in parallel:\n\n```cpp\nsum(x)\n```\n\n|   Function        |   Description     | \n|-------------------|-------------------|\n| `sum`             | summation         |\n| `prod`            | product           |\n\n\n### Constants\n\nThe header `scistats/math/constants.h` defines a number of useful constants as `constexpr` functions:\n\n| Function      | Description                                                                      | Approximate Value |\n| ------------- | -------------------------------------------------------------------------------- | ----------------- |\n| `pi`          | The constant pi                                                                  | 3.14159           |\n| `epsilon(scale)` | A tiny tiny number for a given scale and type                                            | `epsilon(1.)` = 2.22045e-16 |\n| `inf`         | The number representing infinity                                                 | inf               |\n| `min`         | Smallest number                                                                  | 2.22507e-308      |\n| `max`         | Largest number                                                                   | 1.79769e+308      |\n| `NaN`         | The number representing \"not a number\"                                           | nan               |\n| `e`           | Euler's number - The base of exponentials                                        | 2.71828           |\n| `euler`       | Euler–Mascheroni constant / or Euler's gamma : The base of the natural logarithm | 0.577216          |\n| `log2_e`      | The base-2 logarithm of e                                                        | 1.4427            |\n| `log10_e`     | The base-10 logarithm of e                                                       | 0.434294          |\n| `sqrt2`       | The square root of two                                                           | 1.41421           |\n| `sqrt1_2`     | The square root of one-half                                                      | 0.707107          |\n| `sqrt3`       | The square root of three                                                         | 1.73205           |\n| `pi_2`        | Pi divided by two                                                                | 1.5708            |\n| `pi_4`        | Pi divided by four                                                               | 0.785398          |\n| `sqrt_pi`     | The square root of pi                                                            | 1.77245           |\n| `two_sqrt_pi` | Two divided by the square root of pi                                             | 1.12838           |\n| `one_by_pi`   | The reciprocal of pi (1./pi)                                                     | 0.31831           |\n| `two_by_pi`   | Twice the reciprocal of pi                                                       | 0.63662           |\n| `ln10`        | The natural logarithm of ten                                                     | 2.30259           |\n| `ln2`         | The natural logarithm of two                                                     | 0.693147          |\n| `lnpi`        | The natural logarithm of pi                                                      | 1.14473           |\n\n### Functions\n\nSome helper functions:\n\n| Function             | Description                                      |\n| -------------------- | ------------------------------------------------ |\n| **Numeric**          |                                                  |\n| `abs`                | absolute value (for floating point and integers) |\n| `almost_equal`       | check if two numbers are almost the same         |\n| `is_odd`       | check if integer is odd         |\n| `is_even`       | check if integer is even         |\n| **Trigonometric**    |                                                  |\n| `acot`               | acot                                             |\n| `cot`                | cot                                              |\n| **Special**          |                                                  |\n| `beta`               | beta                                             |\n| `beta_inc`           | beta_inc                                         |\n| `beta_inc_inv`       | beta_inc_inv                                     |\n| `beta_inc_inv_upper` | beta_inc_inv_upper                               |\n| `beta_inc_upper`     | beta_inc_upper                                   |\n| `betaln`             | betaln                                           |\n| `erfinv`             | erfinv                                           |\n| `gammaln`            | gammaln                                          |\n| `tgamma`             | tgamma                                           |\n| `xinbta`             | xinbta                                           |\n\n\n### Measuring Time\n\nTo measure the time between two operations:\n\n```cpp\ndouble t1 = tic();\n// your operations\ndouble t2 = toc();\n```\n\nTo measure the time it takes to run a function:\n\n```cpp\ndouble t = timeit([](){\n    // Your function...\n});\n```\n\nTo create a mini-benchmark measuring the time it takes to run a function:\n\n```cpp\nstd::vector\u003cdouble\u003e t = minibench([](){\n    // Your function...\n});\nstd::cout \u003c\u003c \"Mean: \" \u003c\u003c mean(t) \u003c\u003c std::endl;\nstd::cout \u003c\u003c \"Standard Deviation: \" \u003c\u003c stddev(t) \u003c\u003c std::endl;\n```\n\n### Random Number Generators\n\nTo generate a random integer between `a` and `b` with a reasonable \nrandom number generator:\n\n```cpp\nrandi(a,b)\n```\n\nTo generate a random number from a normal distribution:\n\n```cpp\nrandn()\n```\n\nTo generate a random number from an uniform distribution between `a` and `b`:\n\n```cpp\nrand(a,b)\n```\n\n## Roadmap\n\nSome functions we plan to implement are:\n\n* Math\n    * Parallel Arithmetic\n    * Constants \u003csup\u003e [1](https://www.gnu.org/software/gsl/doc/html/math.html#mathematical-constants) \u003c/sup\u003e\n    * Mini-benchmarks\n    * Random Number Generators\n* Descriptive statistics \u003csup\u003e [1](https://docs.python.org/3/library/statistics.html) \u003c/sup\u003e \u003csup\u003e [2](https://docs.scipy.org/doc/scipy/reference/stats.html) \u003c/sup\u003e \u003csup\u003e [3](https://www.mathworks.com/help/matlab/descriptive-statistics.html) \u003c/sup\u003e\n    * Central tendency\n    * Dispersion\n    * Correlation\n* Hypothesis Tests \u003csup\u003e [1](https://www.mathworks.com/help/stats/hypothesis-tests-1.html) \u003c/sup\u003e\n    * Probability distributions \u003csup\u003e [1](https://www.mathworks.com/help/stats/probability-distributions-1.html) \u003c/sup\u003e\n    * Basic tests \u003csup\u003e [1](https://machinelearningmastery.com/statistical-hypothesis-tests-in-python-cheat-sheet/) \u003c/sup\u003e \u003csup\u003e [2](https://www.mathworks.com/help/stats/hypothesis-tests-1.html) \u003c/sup\u003e\n    * Non-Parametric tests\n    * Anova \u003csup\u003e [1](https://www.mathworks.com/help/stats/analysis-of-variance-anova-1.html) \u003c/sup\u003e\n    * Bayeasian Statistics \u003csup\u003e [1](https://www.mathworks.com/help/stats/examples/bayesian-analysis-for-a-logistic-regression-model.html) \u003c/sup\u003e\n* Regression Models \n    * Classification \n    * Clustering \n* Data processing \u003csup\u003e [1](https://www.mathworks.com/help/matlab/preprocessing-data.html) \u003c/sup\u003e\n\n## Integration\n\n### Build from Source\n\n#### Dependencies\n\n* C++20\n* CMake 3.14+\n\n\u003cdetails\u003e\n    \u003csummary\u003eInstructions: Linux/Ubuntu/GCC\u003c/summary\u003e\n\nCheck your GCC version:\n\n```bash\ng++ --version\n```\n\nThe output should be something like:\n\n```console\ng++-8 (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0\n```\n\nIf you see a version before GCC-10, update it with\n\n```bash\nsudo apt update\nsudo apt install gcc-10\nsudo apt install g++-10\n```\n\nOnce you installed a newer version of GCC, you can link it to `update-alternatives`. For instance, if you have GCC-7 and GCC-10, you can link them with:\n\n```bash\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 7\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 7\nsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10\nsudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10\n```\n\nYou can now use `update-alternatives` to set your default `gcc` and `g++` to a more recent version:\n\n```bash\nupdate-alternatives --config g++\nupdate-alternatives --config gcc\n```\n\nAlso check your CMake version:\n\n```bash\ncmake --version\n```\n\nIf it's older than CMake 3.14, update it with\n\n```bash\nsudo apt upgrade cmake\n```\n\nor download the most recent version from [cmake.org](https://cmake.org/).\n\n[Later](#build-the-examples) when running CMake, make sure you are using GCC-8 or higher by appending the following options:\n\n```bash\n-DCMAKE_C_COMPILER=/usr/bin/gcc-10 -DCMAKE_CXX_COMPILER=/usr/bin/g++-10\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003eInstructions: Mac Os/Clang\u003c/summary\u003e\n\nCheck your Clang version:\n\n```bash\nclang --version\n```\n\nThe output should have something like\n\n```console\nApple clang version 11.0.0\n```\n\nIf you see a version before Clang 11, update LLVM+Clang:\n\n```bash\ncurl --output clang.tar.xz -L https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/clang+llvm-11.0.0-x86_64-apple-darwin.tar.xz\nmkdir clang\ntar -xvJf clang.tar.xz -C clang\ncd clang/clang+llvm-11.0.0-x86_64-apple-darwin\nsudo cp -R * /usr/local/\n```\n\nUpdate CMake with\n\n```bash\nsudo brew upgrade cmake\n```\n\nor download the most recent version from [cmake.org](https://cmake.org/).\n\nIf the last command fails because you don't have [Homebrew](https://brew.sh) on your computer, you can install it with\n\n```bash\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)\"\n```\n\nor you can follow the instructions in [https://brew.sh](https://brew.sh).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003eInstructions: Windows/MSVC\u003c/summary\u003e\n\n* Make sure you have a recent version of [Visual Studio](https://visualstudio.microsoft.com)\n* Download Git from [https://git-scm.com/download/win](https://git-scm.com/download/win) and install it\n* Download CMake from [https://cmake.org/download/](https://cmake.org/download/) and install it\n\n\u003c/details\u003e\n\nYou can see the dependencies in [`source/CMakeLists.txt`](source/CMakeLists.txt).\n\n#### Build the Examples\n\nThis will build the examples in the `build/examples` directory:\n\n```bash\nmkdir build\ncd build\ncmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=\"-O2\"\ncmake --build . --parallel 2 --config Release\n```\n\n* Replace `--parallel 2` with `--parallel \u003cnumber of cores in your machine\u003e`\n* On Windows, replace `-O2` with `/O2` \n* On Linux, you might need `sudo` for this last command\n\n#### Installing Scistats from Source\n\nThis will install Scistats on your system:\n\n```bash\nmkdir build\ncd build\ncmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=\"-O2\" -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF \ncmake --build . --parallel 2 --config Release\ncmake --install .\n```\n\n* Replace `--parallel 2` with `--parallel \u003cnumber of cores in your machine\u003e` \n* On Windows, replace `-O2` with `/O2` \n* On Linux, you might need `sudo` for this last command\n\n### CMake targets\n\n#### Find it as a CMake Package\n\nIf you have the library installed, you can call\n\n```cmake\nfind_package(Scistats)\n```\n\nfrom your CMake build script. \n\nWhen creating your executable, link the library to the targets you want:\n\n```\nadd_executable(my_target main.cpp)\ntarget_link_libraries(my_target PUBLIC scistats)\n```\n\nAdd this header to your source files:\n\n```cpp\n#include \u003cscistats/scistats.h\u003e\n```\n\n#### Use it as a CMake subdirectory\n\nYou can use Scistats directly in CMake projects without installing it. Check if you have [Cmake](http://cmake.org) 3.14+ installed:\n\n```bash\ncmake -version\n```\n\nClone the whole project\n \n```bash\ngit clone https://github.com/alandefreitas/scistats/\n```\n\nand add the subdirectory to your CMake project:\n\n```cmake\nadd_subdirectory(scistats)\n```\n\nWhen creating your executable, link the library to the targets you want:\n\n```\nadd_executable(my_target main.cpp)\ntarget_link_libraries(my_target PUBLIC scistats)\n```\n\nYou can now add the [scistats headers](#examples) to your source files.\n\nHowever, it's always recommended to look for Scistats with `find_package` before including it as a subdirectory. Otherwise, we can get [ODR errors](https://en.wikipedia.org/wiki/One_Definition_Rule) in larger projects. \n\n#### CMake with Automatic Download\n\nCheck if you have [Cmake](http://cmake.org) 3.14+ installed:\n\n```bash\ncmake -version\n```\n\nInstall [CPM.cmake](https://github.com/TheLartians/CPM.cmake) and then:\n\n```cmake\nCPMAddPackage(\n    NAME scistats\n    GITHUB_REPOSITORY alandefreitas/scistats\n    GIT_TAG origin/master # or whatever tag you want\n)\n# ...\ntarget_link_libraries(my_target PUBLIC scistats)\n```\n\nYou can now add the [scistats headers](#examples) to your source files.\n\nHowever, it's always recommended to look for Scistats with `find_package` before including it as a subdirectory. You can use:\n\n```\noption(CPM_USE_LOCAL_PACKAGES \"Try `find_package` before downloading dependencies\" ON)\n```\n\nto let CPM.cmake do that for you. Otherwise, we can get [ODR errors](https://en.wikipedia.org/wiki/One_Definition_Rule) in larger projects.\n\n### Other build systems\n\nIf you want to use it in another build system you can either install the library (Section [*Binary Packages*](#binary-packages) or Section [Installing Scistats from Source](#installing-scistats-from-source) or you have to somehow rewrite the build script.\n\nIf you want to rewrite the build script, your project needs to 1) include the headers, and 2) link with the dependencies described in [`source/CMakeLists.txt`](source/CMakeLists.txt).\n\n## Contributing\n\nThere are many ways in which you can contribute to this library:\n\n* Testing the library in new environments\n* Contributing with interesting examples\n* Contributing with new statistics\n* Finding problems in this documentation\n* Finding bugs in general\n* Whatever idea seems interesting to you\n\nIf contributing with code, please leave the pedantic mode ON (`-DBUILD_WITH_PEDANTIC_WARNINGS=ON`), and don't forget cppcheck and clang-format.\n\n\u003cdetails markdown=\"1\"\u003e\n    \u003csummary\u003eExample: CLion\u003c/summary\u003e\n    \n![CLion Settings with Pedantic Mode](docs/img/pedantic_clion.png)\n\u003c/details\u003e\n\nIf contributing to the documentation, please edit [`README.md`](README.md) directly, as the files in [`./docs`](./docs) are automatically generated with [mdsplit](https://github.com/alandefreitas/mdsplit).\n\n### Contributors\n\n\u003c!-- readme: collaborators,contributors -start --\u003e \n\u003ctable\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/alandefreitas\"\u003e\n            \u003cimg src=\"https://avatars0.githubusercontent.com/u/5369819?v=4\" width=\"100;\" alt=\"alandefreitas\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eAlan De Freitas\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/rcpsilva\"\u003e\n            \u003cimg src=\"https://avatars1.githubusercontent.com/u/15973642?v=4\" width=\"100;\" alt=\"rcpsilva\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eRcpsilva\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- readme: collaborators,contributors -end --\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falandefreitas%2Fscistats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falandefreitas%2Fscistats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falandefreitas%2Fscistats/lists"}