Metadata-Version: 2.1
Name: modular-towers
Version: 0.1.2
Summary: An algorithm that computes modular nested exponents (or towers) efficiently.
Home-page: https://github.com/avivbrook/modular-towers
Author: Aviv Brook
Author-email: avbrook@ucsc.edu
License: UNKNOWN
Project-URL: Bug Tracker, https://github.com/avivbrook/modular-towers/issues
Project-URL: CI, https://github.com/avivbrook/modular-towers/actions
Project-URL: Changelog, https://github.com/avivbrook/modular-towers/CHANGELOG.md
Description: # modular-towers
        
        An algorithm that computes modular nested exponents (or towers) efficiently.
        
        [![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/avivbrook/modular-towers/Test/master?logo=github&style=flat-square)](https://github.com/avivbrook/modular-towers/actions)
        [![PyPI - License](https://img.shields.io/pypi/l/modular-towers?style=flat-square)](https://choosealicense.com/licenses/gpl-3.0/)
        [![PyPI](https://img.shields.io/pypi/v/modular-towers?style=flat-square)](https://pypi.org/project/modular-towers/)
        [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/modular-towers?style=flat-square)](https://pypi.org/project/modular-towers/#files)
        [![PyPI - Wheel](https://img.shields.io/pypi/wheel/modular-towers?style=flat-square)](https://pypi.org/project/modular-towers/#files)
        [![GitHub issues](https://img.shields.io/github/issues/avivbrook/modular-towers?style=flat-square)](https://github.com/avivbrook/modular-towers/issues)
        [![Downloads](https://img.shields.io/badge/dynamic/json?style=flat-square&color=303f9f&label=downloads&query=%24.total_downloads&url=https%3A%2F%2Fapi.pepy.tech%2Fapi%2Fprojects%2Fmodular-towers)](https://pepy.tech/project/modular-towers)
        
        ## 🚩 Table of Contents
        
        - [Overview](#%EF%B8%8F-overview)
        - [Prerequisites](#%EF%B8%8F-prerequisites)
        - [Installation](#-installation)
        - [Examples](#-examples)
        
        ## 🗺️ Overview
        
        `modular-towers` exports a Python function `mod_tower` that takes as input an arbitrarily long sequence of positive integers `a₁, a₂, ..., aₙ` and a positive integer `m` and computes `a₁^(a₂^(···^aₙ)) mod m` efficiently (that is, without computing the value of the nested exponent).
        
        ## 🏳️ Prerequisites
        
        `sympy` is currently required as the algorithm uses its `totient` function. In the future, a custom totient function will be added so that `sympy` is not required, making the module self-contained.
        
        For best performance, install `gmpy2`:
        ```console
        $ apt install libgmp-dev libmpfr-dev libmpc-dev # required for gmpy2
        $ pip install gmpy2
        ```
        
        `gmpy2` is not required but it offers more efficient versions of some of Python's built-in math functions. If `gmpy2` is not installed, the module simply uses the built-in functions.
        
        ## 🔧 Installation
        
        Installing with `pip` is the easiest:
        ```console
        $ pip install modular-towers
        ```
        
        A development version can be installed from GitHub
        using `setuptools`, provided you have `sympy` installed already:
        ```console
        $ git clone https://github.com/avivbrook/modular-towers
        $ cd modular-towers
        $ python setup.py install
        ```
        
        ## 💡 Examples
        
        ```python
        >>> from modular_towers import mod_tower as modtow
        >>> modtow([6,5,4,3,2], 1948502738) # 6^(5^(4^(3^2))) mod 1948502738
        951546056
        ```
        
        To benchmark the main function:
        ```python
        >>> from modular_towers.core.tests import test_core
        >>> test_core(list_lengths=(10, 100, 1000), bit_lengths=(16, 128, 1024), mod_bit_lengths=(16, 32, 64))
        ```
Keywords: modular exponentiation,nested exponentiation
Platform: any
Classifier: Framework :: Jupyter
Classifier: Topic :: Education
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Mathematics
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Science/Research
Requires-Python: >=3.6
Description-Content-Type: text/markdown
