Science Score: 77.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 11 DOI reference(s) in README -
✓Academic publication links
Links to: arxiv.org, sciencedirect.com, springer.com, zenodo.org -
✓Committers with academic emails
9 of 19 committers (47.4%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (7.6%) to scientific vocabulary
Keywords
Keywords from Contributors
Repository
C++ library for semigroups and monoids
Basic Info
- Host: GitHub
- Owner: libsemigroups
- License: gpl-3.0
- Language: C++
- Default Branch: main
- Homepage: http://libsemigroups.github.io/libsemigroups/
- Size: 47.1 MB
Statistics
- Stars: 62
- Watchers: 9
- Forks: 31
- Open Issues: 46
- Releases: 77
Topics
Metadata Files
README.md
libsemigroups
What is libsemigroups?
libsemigroups is a C++17 library containing implementations of several
algorithms for computing finite, and finitely presented, semigroups and
monoids. The main algorithms implemented in libsemigroups are:
- the Froidure-Pin algorithm for computing semigroups and monoids defined
by a generating set consisting of elements whose multiplication and equality is
decidable (such as transformations, partial permutations, permutations,
bipartitions, and matrices over a semiring) in the
libsemigroups::FroidurePinclass template; - Kambites' algorithm for solving the word problem in small overlap monoids
from "Small overlap monoids I: The word problem", and the algorithm from
"An explicit algorithm for normal forms in small overlap monoids" in the
class template
libsemigroups::Kambites; - the Knuth-Bendix algorithm for finitely presented semigroups and monoids
in the class template
libsemigroups::KnuthBendix; - a version of Sims' low index subgroup algorithm for computing congruences of a
semigroup or monoid from
"Computing finite index congruences of finitely presented semigroups and monoids"
in the classes
libsemigroups::Sims1andlibsemigroups::Sims2; - a generalized version of the algorithms described in
"Green's equivalences in finite semigroups of binary relations" by
Konieczny, and
"On the determination of Green's relations in finite transformation semigroups"
by Lallement and Mcfadden for computing finite semigroups and monoids
admitting a pair of actions with particular properties, in the class template
libsemigroups::Konieczny; - the algorithm from "Efficient Testing of Equivalence of Words in a Free Idempotent Semigroup"
by Radoszewski and Rytter in the function
libsemigroups::freeband_equal_to; - a non-random version of the Schreier-Sims algorithm
for permutation groups in the class template
libsemigroups::SchreierSims; - a version of Stephen's procedure from
"Applications of automata theory to presentations of monoids and inverse monoids"
for finitely presented inverse semigroups and monoids (for a given word
wthis procedure is for determining words equivalent towor that are left divisors ofw) in the class templatelibsemigroups::Stephen; - the Todd-Coxeter algorithm for finitely presented semigroups and monoids;
in the class template
libsemigroups::ToddCoxeter; see also "The Todd–Coxeter algorithm for semigroups and monoids".
libsemigroups is partly based on
Algorithms for computing finite semigroups,
Expository Slides, and Semigroupe 2.01 by Jean-Eric Pin.
libsemigroups is used in the Semigroups package for
GAP, and it
is possible to use libsemigroups directly in Python 3 via the package
libsemigroups_pybind11.
The development version of libsemigroups is available on
github, and some
related projects are here.
Design principles
The main classes in libsemigroups are named after the algorithms they
implement; see, for example, libsemigroups::FroidurePin,
libsemigroups::Konieczny, libsemigroups::ToddCoxeter,
libsemigroups::Kambites, libsemigroups::KnuthBendix,
libsemigroups::SchreierSims, libsemigroups::Sims1, libsemigroups::Sims2,
or libsemigroups::Stephen.
libsemigroups is a modern open source C++ library designed to be:
- state of the art: the mathematical underpinnings of several of the
algorithms in
libsemigroupsoriginate from the authors and contributors; and the other algorithms are adapted from the literature (see above for details); - extensible:
libsemigroups::FroidurePin,libsemigroups::Konieczny, andlibsemigroups::SchreierSimsare generic and can be adapted to user-defined types; - adaptable: the behaviour of many algorithms implementing in
libsemigroupscan be fine-tuned via many settings, and used interactively via the functionslibsemigroups::Runner::run_forandlibsemigroups::Runner::run_until; - easy to use: converting between different types of
libsemigroupsobjects (see thetofunction) is easy; there are many helper functions to streamline common tasks; high quality exception messages are implemented throughout the code base (although you don't have to use these if you don't want to); long running algorithms can provide detailed feedback on their progress (seelibsemigroups::ReportGuard); many data structures can be visualised using graphviz (seelibsemigroups::Dotand Visualisation); and there are hundreds of examples in the tests directory. - fast:
libsemigroupsis designed with performance in mind; several classes implement parallel algorithms (libsemigroups::Sims1,libsemigroups::Sims2,libsemigroups::Congruence); we provide some "winner takes all" mechanisms for running algorithms concurrently (seelibsemigroups::Congruence); there are_no_checksversions of most functions if performance is critical.
How to use libsemigroups
See the documentation https://libsemigroups.github.io/libsemigroups/.
Installation
See the installation page for more info.
Issues
If you find any problems with libsemigroups, or have any suggestions
for features that you'd like to see, please use the issue
tracker.
Dependencies
libsemigroups uses:
- Catch2 for tests and benchmarks;
- eigen for some linear algebra computations;
- fmt for string formatting;
- HPCombi which uses the SSE and AVX instruction sets for very fast manipulation of transformations, partial permutations, permutations, and boolean matrices of small size;
- backward-cpp for beautiful backtraces;
- magic_enum for static reflection for enums;
- rx-ranges the minimalist ranges library for C++17.
We'd like to thank the authors and contributors to these excellent projects!
Acknowledgements
We thank:
- OpenDreamKit Horizon 2020 European Research Infrastructures project (#676541);
- the Carnegie Trust for the Universities of Scotland for funding the PhD scholarship of Julius Jonušas;
- the EPSRC for funding the PhD scholarships of Michael Young, Finn Smith, and Reinis Cirpons (EP/M506631/1, EP/N509759/1 and EP/V520123/1);
- the School of Mathematics and Statistics, University of St Andrews for funding the PhD scholarships of Maria Tsalakou, Joseph Edwards, and Murray Whyte;
- the Cyprus State Scholarship Foundation for their financial support for Maria Tsalakou.
Owner
- Name: libsemigroups
- Login: libsemigroups
- Kind: organization
- Repositories: 13
- Profile: https://github.com/libsemigroups
Projects related to the libsemigroups C++ library for semigroups and monoids
Citation (CITATION.cff)
# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!
cff-version: 1.2.0
title: libsemigroups
message: >-
If you use this software, please cite it using the
metadata from this file.
type: software
authors:
- given-names: Reinis
family-names: Cirpons
email: rc234@st-andrews.ac.uk
affiliation: University of St Andrews
orcid: "https://orcid.org/0000-0001-7238-1576"
- given-names: Joseph
family-names: Edwards
email: jde1@st-andrews.ac.uk
affiliation: University of St Andrews
orcid: "https://orcid.org/0009-0005-3803-2758"
- given-names: James
family-names: Mitchell
email: jdm3@st-andrews.ac.uk
affiliation: University of St Andrews
orcid: "https://orcid.org/0000-0002-5489-1617"
identifiers:
- type: doi
value: 10.5281/zenodo.10534404
repository-code: "https://github.com/libsemigroups/libsemigroups"
url: "https://libsemigroups.github.io/libsemigroups/"
abstract: >-
A C++17 library containing implementations of several
algorithms for computing finite, and finitely presented,
semigroups and monoids.
license: GPL-3.0
version: 3.1.3
date-released: "2025-08-12"
GitHub Events
Total
- Create event: 24
- Release event: 5
- Issues event: 32
- Watch event: 10
- Delete event: 18
- Issue comment event: 279
- Push event: 136
- Pull request event: 231
- Pull request review event: 135
- Pull request review comment event: 100
- Fork event: 2
Last Year
- Create event: 24
- Release event: 5
- Issues event: 32
- Watch event: 10
- Delete event: 18
- Issue comment event: 279
- Push event: 136
- Pull request event: 231
- Pull request review event: 135
- Pull request review comment event: 100
- Fork event: 2
Committers
Last synced: almost 3 years ago
Top Committers
| Name | Commits | |
|---|---|---|
| James D. Mitchell | j****3@s****k | 822 |
| Michael Young | m****5@s****k | 63 |
| Finn Smith | f****3@s****k | 29 |
| Murray Whyte | m****1@s****k | 24 |
| Reinis Cirpons | r****4@s****k | 11 |
| Florent Hivert | F****t@l****r | 7 |
| Jerry James | l****y@g****m | 6 |
| Nicolas Thiéry | n****y@u****t | 5 |
| Joseph Edwards | j****1@s****k | 4 |
| Wilf Wilson | w****f@w****t | 4 |
| Alex Levine | a****0@s****k | 2 |
| Dima Pasechnik | d****e@g****m | 2 |
| Isuru Fernando | i****f@g****m | 2 |
| dependabot[bot] | 4****]@u****m | 2 |
| Ilya Finkelshteyn | i****f@a****m | 1 |
| Chris Russell | c****6@s****k | 1 |
| Luke Elliott | l****7@s****k | 1 |
| Jan Engelhardt | j****h@i****e | 1 |
| Max Horn | m****x@q****e | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 61
- Total pull requests: 474
- Average time to close issues: 5 months
- Average time to close pull requests: 10 days
- Total issue authors: 9
- Total pull request authors: 14
- Average comments per issue: 1.07
- Average comments per pull request: 1.16
- Merged pull requests: 372
- Bot issues: 0
- Bot pull requests: 19
Past Year
- Issues: 18
- Pull requests: 231
- Average time to close issues: 18 days
- Average time to close pull requests: 4 days
- Issue authors: 5
- Pull request authors: 8
- Average comments per issue: 0.33
- Average comments per pull request: 1.34
- Merged pull requests: 174
- Bot issues: 0
- Bot pull requests: 8
Top Authors
Issue Authors
- james-d-mitchell (32)
- Joseph-Edwards (16)
- MTWhyte (6)
- jamesjer (2)
- mtorpey (1)
- antonio-rojas (1)
- orlitzky (1)
- jengelh (1)
- reiniscirpons (1)
Pull Request Authors
- james-d-mitchell (284)
- Joseph-Edwards (109)
- reiniscirpons (23)
- MTWhyte (20)
- dependabot[bot] (19)
- flsmith (5)
- nadim-241 (3)
- jamesjer (3)
- thierry-FreeBSD (2)
- jengelh (2)
- dimpase (1)
- hivert (1)
- euanlacy (1)
- EwanGilligan (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 4
- Total downloads: unknown
-
Total dependent packages: 4
(may contain duplicates) -
Total dependent repositories: 4
(may contain duplicates) - Total versions: 72
- Total maintainers: 1
alpine-edge: libsemigroups-static
Library for computing semigroups and monoids (static library)
- Homepage: https://github.com/libsemigroups/libsemigroups
- License: GPL-3.0-or-later
-
Latest release: 2.7.3-r1
published about 1 year ago
Rankings
Maintainers (1)
alpine-edge: libsemigroups
Library for computing semigroups and monoids
- Homepage: https://github.com/libsemigroups/libsemigroups
- License: GPL-3.0-or-later
-
Latest release: 2.7.3-r1
published about 1 year ago
Rankings
Maintainers (1)
alpine-edge: libsemigroups-dev
Library for computing semigroups and monoids (development files)
- Homepage: https://github.com/libsemigroups/libsemigroups
- License: GPL-3.0-or-later
-
Latest release: 2.7.3-r1
published about 1 year ago
Rankings
Maintainers (1)
conda-forge.org: libsemigroups
libsemigroups is a C++ library for semigroups and monoids.
- Homepage: https://libsemigroups.github.io/libsemigroups/
- License: GPL-3.0-or-later
-
Latest release: 2.3.2
published over 3 years ago
Rankings
Dependencies
- doxygen 1.9.1
- pip
- libsemigroups
- notebook
- xeus-cling
- beautifulsoup4 ==4.9.3
- breathe ==4.33.1
- lxml ==4.9.1
- pyyaml >=5.3.1
- sphinx ==4.3.0
- sphinx-copybutton ==0.3.1
- sphinx_rtd_theme *
- sphinxcontrib-bibtex ==2.2.0
- actions/checkout v1 composite
- actions/setup-python v1 composite
- codespell-project/actions-codespell v1.0 composite
- Homebrew/actions/setup-homebrew master composite
- actions/cache v2 composite
- actions/checkout v2 composite
- gap-actions/setup-cygwin v1 composite
- actions/checkout v3 composite
- jidicula/clang-format-action v4.10.1 composite