{'fraction_non_alphanumeric': 0.024070021881838075, 'fraction_numerical': 0.014223194748358862, 'mean_word_length': 5.096666666666667, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Parallel programming support in GAP

The GAP system [1, 3] is an open-source system for discrete computational algebra. It consists of a kernel (about 150K lines of C code) providing the run-time environment, including the memory management and an interpreter for the GAP language; a library written in the GAP language (about 450K lines of code) implementing various mathematical algorithms; data libraries such as the library of groups of small orders, the character table library etc. GAP has been developed since 1986 and has a substantial user base, being used for research and teaching at hundreds of institutions worldwide. GAP is free software, and user contributions to the system are encouraged. More than 100 of these contributions are organised in a form of GAP packages (plugins) and are distributed together with the system. Independent contributors can submit additional packages for inclusion using a refereeing process. In 2009, supported by the EPSRC grant EP/G055181/1 “HPC-GAP: High Performance Computational Algebra and Discrete Mathematics”, we started a project to reengineer the GAP system to take advantage of parallel computers ranging from multicore laptops to current and future high-performance computers. We aim to support both shared-memory and distributed memory environments of a wide range of scales, providing programming models across them all that are as consistent as possible without compromising performance. Because of the diversity of algebraic computations, we do not wish to impose a particular parallel programming paradigm on users. Instead we want to support multiple paradigms using libraries built on top of carefully chosen set of low-level primitives. In designing our extensions to GAP, we are keeping in mind the needs of a broad range of users. For instance, we can imagine: