{"id":18774774,"url":"https://github.com/firefly-cpp/niaarm","last_synced_at":"2026-01-16T06:20:49.475Z","repository":{"id":39663854,"uuid":"431086597","full_name":"firefly-cpp/NiaARM","owner":"firefly-cpp","description":"A minimalistic framework for Numerical Association Rule Mining","archived":false,"fork":false,"pushed_at":"2025-03-21T08:51:26.000Z","size":46133,"stargazers_count":16,"open_issues_count":6,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-11T12:07:31.108Z","etag":null,"topics":["association-rule-mining","association-rules","data-mining","data-science","evolutionary-algorithms","swarm-intelligence"],"latest_commit_sha":null,"homepage":"","language":"Python","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/firefly-cpp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-23T12:11:15.000Z","updated_at":"2025-03-21T08:51:29.000Z","dependencies_parsed_at":"2023-02-05T19:45:52.225Z","dependency_job_id":"3d236c24-3989-4326-8740-61378c4ad3be","html_url":"https://github.com/firefly-cpp/NiaARM","commit_stats":{"total_commits":301,"total_committers":9,"mean_commits":33.44444444444444,"dds":"0.49169435215946844","last_synced_commit":"5011735f3f4430cb991fe14cbcd940a047432079"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firefly-cpp%2FNiaARM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firefly-cpp%2FNiaARM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firefly-cpp%2FNiaARM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firefly-cpp%2FNiaARM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/firefly-cpp","download_url":"https://codeload.github.com/firefly-cpp/NiaARM/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248689383,"owners_count":21145923,"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":["association-rule-mining","association-rules","data-mining","data-science","evolutionary-algorithms","swarm-intelligence"],"created_at":"2024-11-07T19:39:18.030Z","updated_at":"2026-01-16T06:20:49.458Z","avatar_url":"https://github.com/firefly-cpp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"logo\" width=\"300\" src=\"https://raw.githubusercontent.com/firefly-cpp/NiaARM/main/.github/images/logo.png\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\n  NiaARM\n\u003c/h1\u003e\n\n\u003ch2 align=\"center\"\u003e\n  A minimalistic framework for Numerical Association Rule Mining\n\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.python.org/pypi/niaarm\"\u003e\n    \u003cimg alt=\"PyPI Version\" src=\"https://img.shields.io/pypi/v/niaarm.svg\" /\u003e\n  \u003c/a\u003e\n  \u003cimg alt=\"PyPI - Python Version\" src=\"https://img.shields.io/pypi/pyversions/niaarm.svg\" /\u003e\n  \u003cimg alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/niaarm.svg\" /\u003e\n  \u003ca href=\"https://src.fedoraproject.org/rpms/python-niaarm\"\u003e\n    \u003cimg alt=\"Fedora package\" src=\"https://img.shields.io/fedora/v/python3-niaarm?color=blue\u0026label=Fedora%20Linux\u0026logo=fedora\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://aur.archlinux.org/packages/python-niaarm\"\u003e\n    \u003cimg alt=\"AUR package\" src=\"https://img.shields.io/aur/version/python-niaarm?color=blue\u0026label=Arch%20Linux\u0026logo=arch-linux\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://repology.org/project/python:niaarm/versions\"\u003e\n    \u003cimg alt=\"Packaging status\" src=\"https://repology.org/badge/tiny-repos/python:niaarm.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pepy.tech/project/niaarm\"\u003e\n    \u003cimg alt=\"Downloads\" src=\"https://pepy.tech/badge/niaarm\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/firefly-cpp/NiaARM/blob/main/LICENSE\"\u003e\n    \u003cimg alt=\"GitHub license\" src=\"https://img.shields.io/github/license/firefly-cpp/niaarm.svg\" /\u003e\n  \u003c/a\u003e\n  \u003cimg alt=\"NiaARM\" src=\"https://github.com/firefly-cpp/niaarm/actions/workflows/ci.yml/badge.svg\" /\u003e\n  \u003cimg alt=\"Documentation status\" src=\"https://readthedocs.org/projects/niaarm/badge/?version=latest\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"GitHub commit activity\" src=\"https://img.shields.io/github/commit-activity/w/firefly-cpp/niaarm.svg\" /\u003e\n  \u003ca href=\"http://isitmaintained.com/project/firefly-cpp/niaarml\"\u003e\n    \u003cimg alt=\"Percentage of issues still open\" src=\"http://isitmaintained.com/badge/open/firefly-cpp/niaarm.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href='http://isitmaintained.com/project/firefly-cpp/niaarm \"Average time to resolve an issue'\u003e\n    \u003cimg alt=\"Average time to resolve an issue\" src=\"http://isitmaintained.com/badge/resolution/firefly-cpp/niaarm.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"#-contributors\"\u003e\n    \u003cimg alt=\"All Contributors\" src=\"https://img.shields.io/badge/all_contributors-1-orange.svg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://doi.org/10.21105/joss.04448\"\u003e\n    \u003cimg alt=\"DOI\" src=\"https://joss.theoj.org/papers/10.21105/joss.04448/status.svg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-detailed-insights\"\u003e🔍 Detailed insights\u003c/a\u003e •\n  \u003ca href=\"#-installation\"\u003e📦 Installation\u003c/a\u003e •\n  \u003ca href=\"#-usage\"\u003e🚀 Usage\u003c/a\u003e •\n  \u003ca href=\"#-cite-us\"\u003e📄 Cite us\u003c/a\u003e •\n  \u003ca href=\"#-references\"\u003e📚 References\u003c/a\u003e •\n  \u003ca href=\"#-see-also\"\u003e📖 See also\u003c/a\u003e •\n  \u003ca href=\"#-license\"\u003e🔑 License\u003c/a\u003e •\n  \u003ca href=\"#-contributors\"\u003e🫂 Contributors\u003c/a\u003e\n\u003c/p\u003e\n\nNiaARM is a framework for Association Rule Mining based on nature-inspired algorithms for optimization. 🌿 The framework is written fully in Python and runs on all platforms. NiaARM allows users to preprocess the data in a transaction database automatically, to search for association rules and provide a pretty output of the rules found. 📊 This framework also supports integral and real-valued types of attributes besides the categorical ones. Mining the association rules is defined as an optimization problem, and solved using the nature-inspired algorithms that come from the related framework called [NiaPy](https://github.com/NiaOrg/NiaPy). 🔗\n\n* **Documentation:** https://niaarm.readthedocs.io/en/latest\n* **Tested OS:** Windows, Ubuntu, Fedora, Alpine, Arch, macOS. **However, that does not mean it does not work on others**\n\n## 🔍 Detailed insights\nThe current version includes (but is not limited to) the following functions:\n\n- loading datasets in CSV format 📁\n- preprocessing of data 🧹\n- searching for association rules 🔎\n- providing output of mined association rules 📋\n- generating statistics about mined association rules 📊\n- visualization of association rules 📈\n- association rule text mining (experimental) 📄\n\n## 📦 Installation\n\n### pip\n\nTo install `NiaARM` with pip, use:\n\n```sh\npip install niaarm\n```\n\nTo install `NiaARM` on Alpine Linux, enable Community repository and use:\n\n```sh\n$ apk add py3-niaarm\n```\n\nTo install `NiaARM` on Arch Linux, use an [AUR helper](https://wiki.archlinux.org/title/AUR_helpers):\n\n```sh\n$ yay -Syyu python-niaarm\n```\n\nTo install `NiaARM` on Fedora, use:\n\n```sh\n$ dnf install python3-niaarm\n```\n\nTo install `NiaARM` on NixOS, use:\n\n```sh\nnix-env -iA nixos.python311Packages.niaarm\n```\n\n## 🚀 Usage\n\n### Loading data\n\nIn NiaARM, data loading is done via the `Dataset` class. There are two options for loading data:\n\n#### Option 1: From a pandas DataFrame (recommended)\n\n```python\nimport pandas as pd\nfrom niaarm import Dataset\n\n\ndf = pd.read_csv('datasets/Abalone.csv')\n# preprocess data...\ndata = Dataset(df)\nprint(data) # printing the dataset will generate a feature report\n```\n\n#### Option 2: Directly from a CSV file\n\n```python\nfrom niaarm import Dataset\n\n\ndata = Dataset('datasets/Abalone.csv')\nprint(data)\n```\n\n### Preprocessing\n\n#### Data Squashing\n\nOptionally, a preprocessing technique, called data squashing [5], can be applied. This will significantly reduce the number of transactions, while providing similar results to the original dataset.\n\n```python\nfrom niaarm import Dataset, squash\n\ndataset = Dataset('datasets/Abalone.csv')\nsquashed = squash(dataset, threshold=0.9, similarity='euclidean')\nprint(squashed)\n```\n\n### Mining association rules\n\n#### The easy way (recommended)\n\nAssociation rule mining can be easily performed using the `get_rules` function:\n\n```python\nfrom niaarm import Dataset, get_rules\nfrom niapy.algorithms.basic import DifferentialEvolution\n\ndata = Dataset(\"datasets/Abalone.csv\")\n\nalgo = DifferentialEvolution(population_size=50, differential_weight=0.5, crossover_probability=0.9)\nmetrics = ('support', 'confidence')\n\nrules, run_time = get_rules(data, algo, metrics, max_iters=30, logging=True)\n\nprint(rules) # Prints basic stats about the mined rules\nprint(f'Run Time: {run_time}')\nrules.to_csv('output.csv')\n```\n\n#### The hard way\n\nThe above example can be also be implemented using a more low level interface,\nwith the `NiaARM` class directly:\n\n```python\nfrom niaarm import NiaARM, Dataset\nfrom niapy.algorithms.basic import DifferentialEvolution\nfrom niapy.task import Task, OptimizationType\n\n\ndata = Dataset(\"datasets/Abalone.csv\")\n\n# Create a problem\n# dimension represents the dimension of the problem;\n# features represent the list of features, while transactions depicts the list of transactions\n# metrics is a sequence of metrics to be taken into account when computing the fitness;\n# you can also pass in a dict of the shape {'metric_name': \u003cweight of metric in range [0, 1]\u003e};\n# when passing a sequence, the weights default to 1.\nproblem = NiaARM(data.dimension, data.features, data.transactions, metrics=('support', 'confidence'), logging=True)\n\n# build niapy task\ntask = Task(problem=problem, max_iters=30, optimization_type=OptimizationType.MAXIMIZATION)\n\n# use Differential Evolution (DE) algorithm from the NiaPy library\n# see full list of available algorithms: https://github.com/NiaOrg/NiaPy/blob/master/Algorithms.md\nalgo = DifferentialEvolution(population_size=50, differential_weight=0.5, crossover_probability=0.9)\n\n# run algorithm\nbest = algo.run(task=task)\n\n# sort rules\nproblem.rules.sort()\n\n# export all rules to csv\nproblem.rules.to_csv('output.csv')\n```\n\n#### Interestingness measures\n\nThe framework implements several popular interestingness measures, which can be used to compute the fitness function value of rules\nand for assessing the quality of the mined rules. A full list of the implemented interestingness measures along with their definitions can be found [here](interestingness_measures.md).\n\n### Visualization\n\nThe framework currently supports ([visualizations](visualization.md)):\n\n- hill slopes (presented in [4]),\n- scatter plot and\n- grouped matrix plot visualization methods.\n\nMore visualization methods are planned to be implemented in future releases.\n\n#### Hill Slopes\n\n```python\nfrom matplotlib import pyplot as plt\nfrom niaarm import Dataset, get_rules\nfrom niaarm.visualize import hill_slopes\n\ndataset = Dataset('datasets/Abalone.csv')\nmetrics = ('support', 'confidence')\nrules, _ = get_rules(dataset, 'DifferentialEvolution', metrics, max_evals=1000, seed=1234)\nsome_rule = rules[150]\nhill_slopes(some_rule, dataset.transactions)\nplt.show()\n```\n\n\u003cp\u003e\n    \u003cimg alt=\"logo\" src=\"https://raw.githubusercontent.com/firefly-cpp/NiaARM/main/.github/images/hill_slopes.png\"\u003e\n\u003c/p\u003e\n\n#### Scatter Plot\n\n```python\nfrom examples.visualization_examples.prepare_datasets import get_weather_data\nfrom niaarm import Dataset, get_rules\nfrom niaarm.visualize import scatter_plot\n\n# Get prepared data\narm_df = get_weather_data()\n\n# Prepare Dataset\ndataset = Dataset(path_or_df=arm_df,delimiter=\",\")\n\n# Get rules\nmetrics = (\"support\", \"confidence\")\nrules, run_time = get_rules(dataset, \"DifferentialEvolution\", metrics, max_evals=500)\n\n# Add lift to metrics\nmetrics = list(metrics)\nmetrics.append(\"lift\")\nmetrics = tuple(metrics)\n\n# Visualize scatter plot\nfig = scatter_plot(rules=rules, metrics=metrics, interactive=False)\nfig.show()\n```\n\n\u003cp\u003e\n    \u003cimg alt=\"logo\" src=\".github/images/scatter_plot.png\"\u003e\n\u003c/p\u003e\n\n#### Grouped Matrix Plot\n\n```python\nfrom examples.visualization_examples.prepare_datasets import get_football_player_data\nfrom niaarm import Dataset, get_rules\nfrom niaarm.visualize import grouped_matrix_plot\n\n# Get prepared data\narm_df = get_football_player_data()\n\n# Prepare Dataset\ndataset = Dataset(path_or_df=arm_df, delimiter=\",\")\n\n# Get rules\nmetrics = (\"support\", \"confidence\")\nrules, run_time = get_rules(dataset, \"DifferentialEvolution\", metrics, max_evals=500)\n\n# Add lift to metrics\nmetrics = list(metrics)\nmetrics.append(\"lift\")\nmetrics = tuple(metrics)\n\n# Visualize grouped matrix plot\nfig = grouped_matrix_plot(rules=rules, metrics=metrics, k=5, interactive=False)\nfig.show()\n```\n\n\u003cp\u003e\n    \u003cimg alt=\"logo\" src=\".github/images/grouped_matrix_plot.png\"\u003e\n\u003c/p\u003e\n\n### Text Mining (Experimental)\n\nAn experimental implementation of association rule text mining using nature-inspired algorithms, based on ideas from [5]\nis also provided. The `niaarm.text` module contains the `Corpus` and `Document` classes for loading and preprocessing corpora,\na `TextRule` class, representing a text rule, and the `NiaARTM` class, implementing association rule text mining\nas a continuous optimization problem. The `get_text_rules` function, equivalent to `get_rules`, but for text mining, was also\nadded to the `niaarm.mine` module.\n\n```python\nimport pandas as pd\nfrom niaarm.text import Corpus\nfrom niaarm.mine import get_text_rules\nfrom niapy.algorithms.basic import ParticleSwarmOptimization\n\ndf = pd.read_json('datasets/text/artm_test_dataset.json', orient='records')\ndocuments = df['text'].tolist()\ncorpus = Corpus.from_list(documents)\n\nalgorithm = ParticleSwarmOptimization(population_size=200, seed=123)\nmetrics = ('support', 'confidence', 'aws')\nrules, time = get_text_rules(corpus, max_terms=5, algorithm=algorithm, metrics=metrics, max_evals=10000, logging=True)\n\nprint(rules)\nprint(f'Run time: {time:.2f}s')\nrules.to_csv('output.csv')\n```\n\n**Note:** You may need to download stopwords and the punkt_tab tokenizer from nltk by running `import nltk; nltk.download('stopwords'); nltk.download('punkt_tab')`.\n\nFor a full list of examples see the [examples folder](https://github.com/firefly-cpp/NiaARM/tree/main/examples)\nin the GitHub repository.\n\n### Command line interface\n\nWe provide a simple command line interface, which allows you to easily\nmine association rules on any input dataset, output them to a csv file and/or perform\na simple statistical analysis on them. For more details see the [documentation](https://niaarm.readthedocs.io/en/latest/cli.html).\n\n```shell\nniaarm -h\n```\n\n```\nusage: niaarm [-h] [-v] [-c CONFIG] [-i INPUT_FILE] [-o OUTPUT_FILE] [--squashing-similarity {euclidean,cosine}] [--squashing-threshold SQUASHING_THRESHOLD] [-a ALGORITHM] [-s SEED] [--max-evals MAX_EVALS] [--max-iters MAX_ITERS]\n              [--metrics METRICS [METRICS ...]] [--weights WEIGHTS [WEIGHTS ...]] [--log] [--stats]\n\nPerform ARM, output mined rules as csv, get mined rules' statistics\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --version         show program's version number and exit\n  -c CONFIG, --config CONFIG\n                        Path to a TOML config file\n  -i INPUT_FILE, --input-file INPUT_FILE\n                        Input file containing a csv dataset\n  -o OUTPUT_FILE, --output-file OUTPUT_FILE\n                        Output file for mined rules\n  --squashing-similarity {euclidean,cosine}\n                        Similarity measure to use for squashing\n  --squashing-threshold SQUASHING_THRESHOLD\n                        Threshold to use for squashing\n  -a ALGORITHM, --algorithm ALGORITHM\n                        Algorithm to use (niapy class name, e.g. DifferentialEvolution)\n  -s SEED, --seed SEED  Seed for the algorithm's random number generator\n  --max-evals MAX_EVALS\n                        Maximum number of fitness function evaluations\n  --max-iters MAX_ITERS\n                        Maximum number of iterations\n  --metrics METRICS [METRICS ...]\n                        Metrics to use in the fitness function.\n  --weights WEIGHTS [WEIGHTS ...]\n                        Weights in range [0, 1] corresponding to --metrics\n  --log                 Enable logging of fitness improvements\n  --stats               Display stats about mined rules\n```\nNote: The CLI script can also run as a python module (`python -m niaarm ...`)\n\n## 📄 Cite us\n\nStupan, Ž., \u0026 Fister Jr., I. (2022). [NiaARM: A minimalistic framework for Numerical Association Rule Mining](https://www.theoj.org/joss-papers/joss.04448/10.21105.joss.04448.pdf). Journal of Open Source Software, 7(77), 4448.\n\n## 📚 References\n\nIdeas are based on the following research papers:\n\n[1] I. Fister Jr., A. Iglesias, A. Gálvez, J. Del Ser, E. Osaba, I Fister. [Differential evolution for association rule mining using categorical and numerical attributes](http://www.iztok-jr-fister.eu/static/publications/231.pdf) In: Intelligent data engineering and automated learning - IDEAL 2018, pp. 79-88, 2018.\n\n[2] I. Fister Jr., V. Podgorelec, I. Fister. [Improved Nature-Inspired Algorithms for Numeric Association Rule Mining](https://iztok-jr-fister.eu/static/publications/324.pdf). In: Vasant P., Zelinka I., Weber GW. (eds) Intelligent Computing and Optimization. ICO 2020. Advances in Intelligent Systems and Computing, vol 1324. Springer, Cham.\n\n[3] I. Fister Jr., I. Fister [A brief overview of swarm intelligence-based algorithms for numerical association rule mining](https://arxiv.org/abs/2010.15524). arXiv preprint arXiv:2010.15524 (2020).\n\n[4] Fister, I. et al. (2020). [Visualization of Numerical Association Rules by Hill Slopes](http://www.iztok-jr-fister.eu/static/publications/280.pdf).\n    In: Analide, C., Novais, P., Camacho, D., Yin, H. (eds) Intelligent Data Engineering and Automated Learning – IDEAL 2020.\n    IDEAL 2020. Lecture Notes in Computer Science(), vol 12489. Springer, Cham. https://doi.org/10.1007/978-3-030-62362-3_10\n\n[5] I. Fister, S. Deb, I. Fister, [Population-based metaheuristics for Association Rule Text Mining](http://www.iztok-jr-fister.eu/static/publications/260.pdf),\n    In: Proceedings of the 2020 4th International Conference on Intelligent Systems, Metaheuristics \u0026 Swarm Intelligence,\n    New York, NY, USA, mar. 2020, pp. 19–23. doi: [10.1145/3396474.3396493](https://dl.acm.org/doi/10.1145/3396474.3396493).\n\n[6] I. Fister, I. Fister Jr., D. Novak and D. Verber, [Data squashing as preprocessing in association rule mining](https://iztok-jr-fister.eu/static/publications/300.pdf), 2022 IEEE Symposium Series on Computational Intelligence (SSCI), Singapore, Singapore, 2022, pp. 1720-1725, doi: [10.1109/SSCI51031.2022.10022240](https://doi.org/10.1109/SSCI51031.2022.10022240).\n\n## 📖 See also\n\n[1] [NiaARM.jl: Numerical Association Rule Mining in Julia](https://github.com/firefly-cpp/NiaARM.jl)\n\n[2] [arm-preprocessing: Implementation of several preprocessing techniques for Association Rule Mining (ARM)](https://github.com/firefly-cpp/arm-preprocessing)\n\n## 🔑 License\n\nThis package is distributed under the MIT License. This license can be found online at \u003chttp://www.opensource.org/licenses/MIT\u003e.\n\n## Disclaimer\n\nThis framework is provided as-is, and there are no guarantees that it fits your purposes or that it is bug-free. Use it at your own risk!\n\n## 🫂 Contributors\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/zStupan\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/48752988?v=4?s=100\" width=\"100px;\" alt=\"zStupan\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ezStupan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/firefly-cpp/NiaARM/commits?author=zStupan\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/firefly-cpp/NiaARM/issues?q=author%3AzStupan\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/firefly-cpp/NiaARM/commits?author=zStupan\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#content-zStupan\" title=\"Content\"\u003e🖋\u003c/a\u003e \u003ca href=\"#ideas-zStupan\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#example-zStupan\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.iztok.xyz\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1633361?v=4?s=100\" width=\"100px;\" alt=\"Iztok Fister Jr.\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIztok Fister Jr.\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/firefly-cpp/NiaARM/commits?author=firefly-cpp\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/firefly-cpp/NiaARM/issues?q=author%3Afirefly-cpp\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#mentoring-firefly-cpp\" title=\"Mentoring\"\u003e🧑‍🏫\u003c/a\u003e \u003ca href=\"#maintenance-firefly-cpp\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#ideas-firefly-cpp\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://erkankarabulut.github.io\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/15374776?v=4?s=100\" width=\"100px;\" alt=\"Erkan Karabulut\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eErkan Karabulut\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/firefly-cpp/NiaARM/commits?author=erkankarabulut\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/firefly-cpp/NiaARM/issues?q=author%3Aerkankarabulut\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/lahovniktadej\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/57890734?v=4?s=100\" width=\"100px;\" alt=\"Tadej Lahovnik\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTadej Lahovnik\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/firefly-cpp/NiaARM/commits?author=lahovniktadej\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/musicinmybrain\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6898909?v=4?s=100\" width=\"100px;\" alt=\"Ben Beasley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBen Beasley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/firefly-cpp/NiaARM/commits?author=musicinmybrain\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.dusanfister.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3198785?v=4?s=100\" width=\"100px;\" alt=\"Dusan Fister\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDusan Fister\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#design-rhododendrom\" title=\"Design\"\u003e🎨\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirefly-cpp%2Fniaarm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirefly-cpp%2Fniaarm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirefly-cpp%2Fniaarm/lists"}