diff --git a/.github/workflows/codecipher_package_checker.yml b/.github/workflows/codecipher_package_checker.yml index f7caa27..d7604ee 100755 --- a/.github/workflows/codecipher_package_checker.yml +++ b/.github/workflows/codecipher_package_checker.yml @@ -17,11 +17,11 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.10'] + python-version: ['3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v4 - name: set up python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: install dependencies diff --git a/.github/workflows/codecipher_python3_build.yml b/.github/workflows/codecipher_python3_build.yml index 07675a7..58e29ec 100644 --- a/.github/workflows/codecipher_python3_build.yml +++ b/.github/workflows/codecipher_python3_build.yml @@ -22,7 +22,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up python3 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install dependencies diff --git a/README.md b/README.md index 34651b3..49d4271 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ other information that should be provided before the modules are installed. - [Dependencies](#dependencies) - [Usage](#usage) - [Package structure](#package-structure) +- [Code coverage](#code-coverage) - [Docs](#docs) - [Contributing](#contributing) - [Copyright and Licence](#copyright-and-licence) @@ -235,6 +236,34 @@ Package structure 7 directories, 23 files ``` +### Code coverage + +| Name | Stmts | Miss | Cover | +|------|-------|------|-------| +| `codecipher/__init__.py` | 0 | 0 | 100%| +| `codecipher/a1z52n62/__init__.py` | 16 | 0 | 100%| +| `codecipher/a1z52n62/decode.py` | 32 | 2 | 94%| +| `codecipher/a1z52n62/encode.py` | 32 | 2 | 94%| +| `codecipher/atbs/__init__.py` | 16 | 0 | 100%| +| `codecipher/atbs/decode.py` | 29 | 2 | 93%| +| `codecipher/atbs/encode.py` | 29 | 2 | 93%| +| `codecipher/atbs/lookup_table.py` | 10 | 0 | 100%| +| `codecipher/b64/__init__.py` | 16 | 0 | 100%| +| `codecipher/b64/decode.py` | 24 | 2 | 92%| +| `codecipher/b64/encode.py` | 24 | 2 | 92%| +| `codecipher/caesar/__init__.py` | 16 | 0 | 100%| +| `codecipher/caesar/decode.py` | 41 | 2 | 95%| +| `codecipher/caesar/encode.py` | 41 | 2 | 95%| +| `codecipher/vernam/__init__.py` | 16 | 0 | 100%| +| `codecipher/vernam/decode.py` | 36 | 2 | 94%| +| `codecipher/vernam/encode.py` | 36 | 2 | 94%| +| `codecipher/vigenere/__init__.py` | 17 | 0 | 100%| +| `codecipher/vigenere/decode.py` | 37 | 2 | 95%| +| `codecipher/vigenere/encode.py` | 37 | 2 | 95%| +| `codecipher/vigenere/key_generator.py` | 37 | 2 | 95%| +| `codecipher/vigenere/lookup_table.py` | 16 | 0 | 100%| +| **Total** | 558 | 26 | 95% | + ### Docs [![documentation status](https://readthedocs.org/projects/codecipher/badge/?version=latest)](https://codecipher.readthedocs.io/en/latest/?badge=latest) @@ -252,7 +281,7 @@ More documentation and info at [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -Copyright (C) 2021 - 2024 by [electux.github.io/codecipher](https://electux.github.io/codecipher/) +Copyright (C) 2021 - 2025 by [electux.github.io/codecipher](https://electux.github.io/codecipher/) **codecipher** is free software; you can redistribute it and/or modify it under the same terms as Python itself, either Python version 3.x or, diff --git a/codecipher/__init__.py b/codecipher/__init__.py index 89e4273..f0ae770 100644 --- a/codecipher/__init__.py +++ b/codecipher/__init__.py @@ -4,7 +4,7 @@ Module __init__.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or diff --git a/codecipher/a1z52n62/__init__.py b/codecipher/a1z52n62/__init__.py index bbdd5d5..899450c 100644 --- a/codecipher/a1z52n62/__init__.py +++ b/codecipher/a1z52n62/__init__.py @@ -4,7 +4,7 @@ Module __init__.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.a1z52n62.encode import A1z52N62Encode from codecipher.a1z52n62.decode import A1z52N62Decode -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class A1z52N62(A1z52N62Encode, A1z52N62Decode): diff --git a/codecipher/a1z52n62/decode.py b/codecipher/a1z52n62/decode.py index 3eaab33..26be5a4 100644 --- a/codecipher/a1z52n62/decode.py +++ b/codecipher/a1z52n62/decode.py @@ -4,7 +4,7 @@ Module decode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -23,14 +23,14 @@ from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/a1z52n62/encode.py b/codecipher/a1z52n62/encode.py index 37bfcf0..d121123 100644 --- a/codecipher/a1z52n62/encode.py +++ b/codecipher/a1z52n62/encode.py @@ -4,7 +4,7 @@ Module encode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -23,14 +23,14 @@ from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/atbs/__init__.py b/codecipher/atbs/__init__.py index 4326e6a..6301b4c 100644 --- a/codecipher/atbs/__init__.py +++ b/codecipher/atbs/__init__.py @@ -4,7 +4,7 @@ Module __init__.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.atbs.encode import AlephTawBetShinEncode from codecipher.atbs.decode import AlephTawBetShinDecode -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class AlephTawBetShin(AlephTawBetShinEncode, AlephTawBetShinDecode): diff --git a/codecipher/atbs/decode.py b/codecipher/atbs/decode.py index 465d9aa..21f9a3e 100644 --- a/codecipher/atbs/decode.py +++ b/codecipher/atbs/decode.py @@ -4,7 +4,7 @@ Module decode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.atbs.lookup_table import LOOKUP_TABLE -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/atbs/encode.py b/codecipher/atbs/encode.py index 444fc88..0305506 100644 --- a/codecipher/atbs/encode.py +++ b/codecipher/atbs/encode.py @@ -4,7 +4,7 @@ Module encode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.atbs.lookup_table import LOOKUP_TABLE -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/atbs/lookup_table.py b/codecipher/atbs/lookup_table.py index 7ef1bf0..5b24e76 100644 --- a/codecipher/atbs/lookup_table.py +++ b/codecipher/atbs/lookup_table.py @@ -4,7 +4,7 @@ Module lookup_table.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -21,14 +21,14 @@ from typing import List, Dict -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' LOOKUP_TABLE: Dict[str, str] = { 'A': 'Z', 'B': 'Y', 'C': 'X', 'D': 'W', 'E': 'V', diff --git a/codecipher/b64/__init__.py b/codecipher/b64/__init__.py index 3d171b1..5be2e31 100644 --- a/codecipher/b64/__init__.py +++ b/codecipher/b64/__init__.py @@ -4,7 +4,7 @@ Module __init__.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.b64.encode import B64Encode from codecipher.b64.decode import B64Decode -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class B64(B64Encode, B64Decode): diff --git a/codecipher/b64/decode.py b/codecipher/b64/decode.py index 0b5c3cb..b3117d8 100644 --- a/codecipher/b64/decode.py +++ b/codecipher/b64/decode.py @@ -4,7 +4,7 @@ Module decode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -24,14 +24,14 @@ from base64 import b64decode from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/b64/encode.py b/codecipher/b64/encode.py index 0d0ee80..7bf6ae5 100644 --- a/codecipher/b64/encode.py +++ b/codecipher/b64/encode.py @@ -4,7 +4,7 @@ Module encode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -24,14 +24,14 @@ from base64 import b64encode from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/caesar/__init__.py b/codecipher/caesar/__init__.py index facc1ba..f299f48 100644 --- a/codecipher/caesar/__init__.py +++ b/codecipher/caesar/__init__.py @@ -4,7 +4,7 @@ Module __init__.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.caesar.encode import CaesarEncode from codecipher.caesar.decode import CaesarDecode -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class Caesar(CaesarEncode, CaesarDecode): diff --git a/codecipher/caesar/decode.py b/codecipher/caesar/decode.py index 798924c..d64a273 100644 --- a/codecipher/caesar/decode.py +++ b/codecipher/caesar/decode.py @@ -4,7 +4,7 @@ Module decode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -23,14 +23,14 @@ from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/caesar/encode.py b/codecipher/caesar/encode.py index ab66c98..69d50dd 100644 --- a/codecipher/caesar/encode.py +++ b/codecipher/caesar/encode.py @@ -4,7 +4,7 @@ Module encode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -23,14 +23,14 @@ from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/vernam/__init__.py b/codecipher/vernam/__init__.py index 64900de..3822bae 100644 --- a/codecipher/vernam/__init__.py +++ b/codecipher/vernam/__init__.py @@ -4,7 +4,7 @@ Module __init__.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.vernam.encode import VernamEncode from codecipher.vernam.decode import VernamDecode -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class Vernam(VernamEncode, VernamDecode): diff --git a/codecipher/vernam/decode.py b/codecipher/vernam/decode.py index 05d1046..203ede9 100644 --- a/codecipher/vernam/decode.py +++ b/codecipher/vernam/decode.py @@ -4,7 +4,7 @@ Module decode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -23,14 +23,14 @@ from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/vernam/encode.py b/codecipher/vernam/encode.py index ae2e6c6..efcbdfc 100644 --- a/codecipher/vernam/encode.py +++ b/codecipher/vernam/encode.py @@ -4,7 +4,7 @@ Module encode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -23,14 +23,14 @@ from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/vigenere/__init__.py b/codecipher/vigenere/__init__.py index 5f0d551..2dd27c5 100644 --- a/codecipher/vigenere/__init__.py +++ b/codecipher/vigenere/__init__.py @@ -4,7 +4,7 @@ Module __init__.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -27,18 +27,18 @@ from codecipher.vigenere.encode import VigenereEncode from codecipher.vigenere.decode import VigenereDecode from codecipher.vigenere.key_generator import KeyGenerator -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class Vigenere(VigenereEncode, VigenereDecode, KeyGenerator): diff --git a/codecipher/vigenere/decode.py b/codecipher/vigenere/decode.py index b70ef5e..9c108a3 100644 --- a/codecipher/vigenere/decode.py +++ b/codecipher/vigenere/decode.py @@ -4,7 +4,7 @@ Module decode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.vigenere.lookup_table import LookUpTable -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/vigenere/encode.py b/codecipher/vigenere/encode.py index f2a274a..44890d2 100644 --- a/codecipher/vigenere/encode.py +++ b/codecipher/vigenere/encode.py @@ -4,7 +4,7 @@ Module encode.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -26,18 +26,18 @@ try: from codecipher.vigenere.lookup_table import LookUpTable -except ImportError as ats_error_message: - # Force close python ATS ################################################## - sys.exit(f'\n{__file__}\n{ats_error_message}\n') +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/vigenere/key_generator.py b/codecipher/vigenere/key_generator.py index 7927a58..6bc47ab 100644 --- a/codecipher/vigenere/key_generator.py +++ b/codecipher/vigenere/key_generator.py @@ -4,7 +4,7 @@ Module key_generator.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -23,14 +23,14 @@ from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' @dataclass diff --git a/codecipher/vigenere/lookup_table.py b/codecipher/vigenere/lookup_table.py index ad04d66..30ff8db 100644 --- a/codecipher/vigenere/lookup_table.py +++ b/codecipher/vigenere/lookup_table.py @@ -4,7 +4,7 @@ Module lookup_table.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -22,14 +22,14 @@ from typing import List, Dict -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class LookUpTable: diff --git a/docs/build/doctrees/codecipher.a1z52n62.decode.doctree b/docs/build/doctrees/codecipher.a1z52n62.decode.doctree index 5aa0ebc..0626828 100644 Binary files a/docs/build/doctrees/codecipher.a1z52n62.decode.doctree and b/docs/build/doctrees/codecipher.a1z52n62.decode.doctree differ diff --git a/docs/build/doctrees/codecipher.a1z52n62.doctree b/docs/build/doctrees/codecipher.a1z52n62.doctree index 7c1eb6d..fb5cce3 100644 Binary files a/docs/build/doctrees/codecipher.a1z52n62.doctree and b/docs/build/doctrees/codecipher.a1z52n62.doctree differ diff --git a/docs/build/doctrees/codecipher.a1z52n62.encode.doctree b/docs/build/doctrees/codecipher.a1z52n62.encode.doctree index da354d1..f649e77 100644 Binary files a/docs/build/doctrees/codecipher.a1z52n62.encode.doctree and b/docs/build/doctrees/codecipher.a1z52n62.encode.doctree differ diff --git a/docs/build/doctrees/codecipher.atbs.decode.doctree b/docs/build/doctrees/codecipher.atbs.decode.doctree index 0009f50..8069bd6 100644 Binary files a/docs/build/doctrees/codecipher.atbs.decode.doctree and b/docs/build/doctrees/codecipher.atbs.decode.doctree differ diff --git a/docs/build/doctrees/codecipher.atbs.doctree b/docs/build/doctrees/codecipher.atbs.doctree index 718e1bf..e4bf4dc 100644 Binary files a/docs/build/doctrees/codecipher.atbs.doctree and b/docs/build/doctrees/codecipher.atbs.doctree differ diff --git a/docs/build/doctrees/codecipher.atbs.encode.doctree b/docs/build/doctrees/codecipher.atbs.encode.doctree index 8dcfadf..bb50020 100644 Binary files a/docs/build/doctrees/codecipher.atbs.encode.doctree and b/docs/build/doctrees/codecipher.atbs.encode.doctree differ diff --git a/docs/build/doctrees/codecipher.atbs.lookup_table.doctree b/docs/build/doctrees/codecipher.atbs.lookup_table.doctree index 3ea27c1..bef0c57 100644 Binary files a/docs/build/doctrees/codecipher.atbs.lookup_table.doctree and b/docs/build/doctrees/codecipher.atbs.lookup_table.doctree differ diff --git a/docs/build/doctrees/codecipher.b64.decode.doctree b/docs/build/doctrees/codecipher.b64.decode.doctree index be494d8..e41b777 100644 Binary files a/docs/build/doctrees/codecipher.b64.decode.doctree and b/docs/build/doctrees/codecipher.b64.decode.doctree differ diff --git a/docs/build/doctrees/codecipher.b64.doctree b/docs/build/doctrees/codecipher.b64.doctree index 63f31f0..1b4715f 100644 Binary files a/docs/build/doctrees/codecipher.b64.doctree and b/docs/build/doctrees/codecipher.b64.doctree differ diff --git a/docs/build/doctrees/codecipher.b64.encode.doctree b/docs/build/doctrees/codecipher.b64.encode.doctree index f5cc1a2..5f501a3 100644 Binary files a/docs/build/doctrees/codecipher.b64.encode.doctree and b/docs/build/doctrees/codecipher.b64.encode.doctree differ diff --git a/docs/build/doctrees/codecipher.caesar.decode.doctree b/docs/build/doctrees/codecipher.caesar.decode.doctree index 3e13baa..1efd869 100644 Binary files a/docs/build/doctrees/codecipher.caesar.decode.doctree and b/docs/build/doctrees/codecipher.caesar.decode.doctree differ diff --git a/docs/build/doctrees/codecipher.caesar.doctree b/docs/build/doctrees/codecipher.caesar.doctree index 5f2b67c..237d398 100644 Binary files a/docs/build/doctrees/codecipher.caesar.doctree and b/docs/build/doctrees/codecipher.caesar.doctree differ diff --git a/docs/build/doctrees/codecipher.caesar.encode.doctree b/docs/build/doctrees/codecipher.caesar.encode.doctree index e91a599..4e9454a 100644 Binary files a/docs/build/doctrees/codecipher.caesar.encode.doctree and b/docs/build/doctrees/codecipher.caesar.encode.doctree differ diff --git a/docs/build/doctrees/codecipher.doctree b/docs/build/doctrees/codecipher.doctree index a9e4cfc..7f68c5a 100644 Binary files a/docs/build/doctrees/codecipher.doctree and b/docs/build/doctrees/codecipher.doctree differ diff --git a/docs/build/doctrees/codecipher.vernam.decode.doctree b/docs/build/doctrees/codecipher.vernam.decode.doctree index c91651c..633f573 100644 Binary files a/docs/build/doctrees/codecipher.vernam.decode.doctree and b/docs/build/doctrees/codecipher.vernam.decode.doctree differ diff --git a/docs/build/doctrees/codecipher.vernam.doctree b/docs/build/doctrees/codecipher.vernam.doctree index 357b72f..d293119 100644 Binary files a/docs/build/doctrees/codecipher.vernam.doctree and b/docs/build/doctrees/codecipher.vernam.doctree differ diff --git a/docs/build/doctrees/codecipher.vernam.encode.doctree b/docs/build/doctrees/codecipher.vernam.encode.doctree index 3733f5c..f902a59 100644 Binary files a/docs/build/doctrees/codecipher.vernam.encode.doctree and b/docs/build/doctrees/codecipher.vernam.encode.doctree differ diff --git a/docs/build/doctrees/codecipher.vigenere.decode.doctree b/docs/build/doctrees/codecipher.vigenere.decode.doctree index 1abd571..4cd5db6 100644 Binary files a/docs/build/doctrees/codecipher.vigenere.decode.doctree and b/docs/build/doctrees/codecipher.vigenere.decode.doctree differ diff --git a/docs/build/doctrees/codecipher.vigenere.doctree b/docs/build/doctrees/codecipher.vigenere.doctree index b883f5c..1339d3a 100644 Binary files a/docs/build/doctrees/codecipher.vigenere.doctree and b/docs/build/doctrees/codecipher.vigenere.doctree differ diff --git a/docs/build/doctrees/codecipher.vigenere.encode.doctree b/docs/build/doctrees/codecipher.vigenere.encode.doctree index 086e900..e4a12f0 100644 Binary files a/docs/build/doctrees/codecipher.vigenere.encode.doctree and b/docs/build/doctrees/codecipher.vigenere.encode.doctree differ diff --git a/docs/build/doctrees/codecipher.vigenere.key_generator.doctree b/docs/build/doctrees/codecipher.vigenere.key_generator.doctree index 1406609..a579002 100644 Binary files a/docs/build/doctrees/codecipher.vigenere.key_generator.doctree and b/docs/build/doctrees/codecipher.vigenere.key_generator.doctree differ diff --git a/docs/build/doctrees/codecipher.vigenere.lookup_table.doctree b/docs/build/doctrees/codecipher.vigenere.lookup_table.doctree index a937404..f98ebb1 100644 Binary files a/docs/build/doctrees/codecipher.vigenere.lookup_table.doctree and b/docs/build/doctrees/codecipher.vigenere.lookup_table.doctree differ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index c37800f..364a3e0 100644 Binary files a/docs/build/doctrees/environment.pickle and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 9db264e..0be36e8 100644 Binary files a/docs/build/doctrees/index.doctree and b/docs/build/doctrees/index.doctree differ diff --git a/docs/build/doctrees/modules.doctree b/docs/build/doctrees/modules.doctree index aaddba1..67458c1 100644 Binary files a/docs/build/doctrees/modules.doctree and b/docs/build/doctrees/modules.doctree differ diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 1ab6f58..969073b 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 60c181649dca153e7de237730f7adc94 +config: caefd34d4082d2b7f99de43a23803684 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_modules/codecipher/a1z52n62.html b/docs/build/html/_modules/codecipher/a1z52n62.html index ae2711d..482c58d 100644 --- a/docs/build/html/_modules/codecipher/a1z52n62.html +++ b/docs/build/html/_modules/codecipher/a1z52n62.html @@ -42,7 +42,7 @@

Source code for codecipher.a1z52n62

 Module
     __init__.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -64,18 +64,18 @@ 

Source code for codecipher.a1z52n62

 try:
     from codecipher.a1z52n62.encode import A1z52N62Encode
     from codecipher.a1z52n62.decode import A1z52N62Decode
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -138,7 +138,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/a1z52n62/decode.html b/docs/build/html/_modules/codecipher/a1z52n62/decode.html index ac47854..6fd78a9 100644 --- a/docs/build/html/_modules/codecipher/a1z52n62/decode.html +++ b/docs/build/html/_modules/codecipher/a1z52n62/decode.html @@ -43,7 +43,7 @@

Source code for codecipher.a1z52n62.decode

 Module
     decode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -62,14 +62,14 @@ 

Source code for codecipher.a1z52n62.decode

 from dataclasses import dataclass, field
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -180,7 +180,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/a1z52n62/encode.html b/docs/build/html/_modules/codecipher/a1z52n62/encode.html index 26d292d..9855019 100644 --- a/docs/build/html/_modules/codecipher/a1z52n62/encode.html +++ b/docs/build/html/_modules/codecipher/a1z52n62/encode.html @@ -43,7 +43,7 @@

Source code for codecipher.a1z52n62.encode

 Module
     encode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -62,14 +62,14 @@ 

Source code for codecipher.a1z52n62.encode

 from dataclasses import dataclass, field
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -180,7 +180,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/atbs.html b/docs/build/html/_modules/codecipher/atbs.html index 83b3a13..e79f189 100644 --- a/docs/build/html/_modules/codecipher/atbs.html +++ b/docs/build/html/_modules/codecipher/atbs.html @@ -42,7 +42,7 @@

Source code for codecipher.atbs

 Module
     __init__.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -64,18 +64,18 @@ 

Source code for codecipher.atbs

 try:
     from codecipher.atbs.encode import AlephTawBetShinEncode
     from codecipher.atbs.decode import AlephTawBetShinDecode
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -138,7 +138,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/atbs/decode.html b/docs/build/html/_modules/codecipher/atbs/decode.html index c1f065f..f3457cd 100644 --- a/docs/build/html/_modules/codecipher/atbs/decode.html +++ b/docs/build/html/_modules/codecipher/atbs/decode.html @@ -43,7 +43,7 @@

Source code for codecipher.atbs.decode

 Module
     decode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -65,18 +65,18 @@ 

Source code for codecipher.atbs.decode

 
 try:
     from codecipher.atbs.lookup_table import LOOKUP_TABLE
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -178,7 +178,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/atbs/encode.html b/docs/build/html/_modules/codecipher/atbs/encode.html index e4ea49e..f23820c 100644 --- a/docs/build/html/_modules/codecipher/atbs/encode.html +++ b/docs/build/html/_modules/codecipher/atbs/encode.html @@ -43,7 +43,7 @@

Source code for codecipher.atbs.encode

 Module
     encode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -65,18 +65,18 @@ 

Source code for codecipher.atbs.encode

 
 try:
     from codecipher.atbs.lookup_table import LOOKUP_TABLE
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -178,7 +178,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/b64.html b/docs/build/html/_modules/codecipher/b64.html index 944f451..16c4c0c 100644 --- a/docs/build/html/_modules/codecipher/b64.html +++ b/docs/build/html/_modules/codecipher/b64.html @@ -42,7 +42,7 @@

Source code for codecipher.b64

 Module
     __init__.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -64,18 +64,18 @@ 

Source code for codecipher.b64

 try:
     from codecipher.b64.encode import B64Encode
     from codecipher.b64.decode import B64Decode
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -138,7 +138,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/b64/decode.html b/docs/build/html/_modules/codecipher/b64/decode.html index c22c376..28dd00b 100644 --- a/docs/build/html/_modules/codecipher/b64/decode.html +++ b/docs/build/html/_modules/codecipher/b64/decode.html @@ -43,7 +43,7 @@

Source code for codecipher.b64.decode

 Module
     decode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -63,14 +63,14 @@ 

Source code for codecipher.b64.decode

 from base64 import b64decode
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -169,7 +169,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/b64/encode.html b/docs/build/html/_modules/codecipher/b64/encode.html index 114f864..66cdf78 100644 --- a/docs/build/html/_modules/codecipher/b64/encode.html +++ b/docs/build/html/_modules/codecipher/b64/encode.html @@ -43,7 +43,7 @@

Source code for codecipher.b64.encode

 Module
     encode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -63,14 +63,14 @@ 

Source code for codecipher.b64.encode

 from base64 import b64encode
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -169,7 +169,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/caesar.html b/docs/build/html/_modules/codecipher/caesar.html index ffa4214..c87a550 100644 --- a/docs/build/html/_modules/codecipher/caesar.html +++ b/docs/build/html/_modules/codecipher/caesar.html @@ -42,7 +42,7 @@

Source code for codecipher.caesar

 Module
     __init__.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -64,18 +64,18 @@ 

Source code for codecipher.caesar

 try:
     from codecipher.caesar.encode import CaesarEncode
     from codecipher.caesar.decode import CaesarDecode
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -138,7 +138,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/caesar/decode.html b/docs/build/html/_modules/codecipher/caesar/decode.html index e7e3ba2..f594e9f 100644 --- a/docs/build/html/_modules/codecipher/caesar/decode.html +++ b/docs/build/html/_modules/codecipher/caesar/decode.html @@ -43,7 +43,7 @@

Source code for codecipher.caesar.decode

 Module
     decode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -62,14 +62,14 @@ 

Source code for codecipher.caesar.decode

 from dataclasses import dataclass, field
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -191,7 +191,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/caesar/encode.html b/docs/build/html/_modules/codecipher/caesar/encode.html index a609dd9..fb6ce64 100644 --- a/docs/build/html/_modules/codecipher/caesar/encode.html +++ b/docs/build/html/_modules/codecipher/caesar/encode.html @@ -43,7 +43,7 @@

Source code for codecipher.caesar.encode

 Module
     encode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -62,14 +62,14 @@ 

Source code for codecipher.caesar.encode

 from dataclasses import dataclass, field
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -191,7 +191,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vernam.html b/docs/build/html/_modules/codecipher/vernam.html index a74de9a..9d7ca98 100644 --- a/docs/build/html/_modules/codecipher/vernam.html +++ b/docs/build/html/_modules/codecipher/vernam.html @@ -42,7 +42,7 @@

Source code for codecipher.vernam

 Module
     __init__.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -64,18 +64,18 @@ 

Source code for codecipher.vernam

 try:
     from codecipher.vernam.encode import VernamEncode
     from codecipher.vernam.decode import VernamDecode
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -138,7 +138,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vernam/decode.html b/docs/build/html/_modules/codecipher/vernam/decode.html index f009eea..45b7e89 100644 --- a/docs/build/html/_modules/codecipher/vernam/decode.html +++ b/docs/build/html/_modules/codecipher/vernam/decode.html @@ -43,7 +43,7 @@

Source code for codecipher.vernam.decode

 Module
     decode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -62,14 +62,14 @@ 

Source code for codecipher.vernam.decode

 from dataclasses import dataclass, field
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -185,7 +185,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vernam/encode.html b/docs/build/html/_modules/codecipher/vernam/encode.html index 232a52e..55eb739 100644 --- a/docs/build/html/_modules/codecipher/vernam/encode.html +++ b/docs/build/html/_modules/codecipher/vernam/encode.html @@ -43,7 +43,7 @@

Source code for codecipher.vernam.encode

 Module
     encode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -62,14 +62,14 @@ 

Source code for codecipher.vernam.encode

 from dataclasses import dataclass, field
 from typing import List, Optional
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -185,7 +185,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vigenere.html b/docs/build/html/_modules/codecipher/vigenere.html index f268606..18d789d 100644 --- a/docs/build/html/_modules/codecipher/vigenere.html +++ b/docs/build/html/_modules/codecipher/vigenere.html @@ -42,7 +42,7 @@

Source code for codecipher.vigenere

 Module
     __init__.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -65,18 +65,18 @@ 

Source code for codecipher.vigenere

     from codecipher.vigenere.encode import VigenereEncode
     from codecipher.vigenere.decode import VigenereDecode
     from codecipher.vigenere.key_generator import KeyGenerator
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -139,7 +139,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vigenere/decode.html b/docs/build/html/_modules/codecipher/vigenere/decode.html index c837bff..0ef04f3 100644 --- a/docs/build/html/_modules/codecipher/vigenere/decode.html +++ b/docs/build/html/_modules/codecipher/vigenere/decode.html @@ -43,7 +43,7 @@

Source code for codecipher.vigenere.decode

 Module
     decode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -65,18 +65,18 @@ 

Source code for codecipher.vigenere.decode

 
 try:
     from codecipher.vigenere.lookup_table import LookUpTable
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -213,7 +213,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vigenere/encode.html b/docs/build/html/_modules/codecipher/vigenere/encode.html index 5d9a193..7585dc7 100644 --- a/docs/build/html/_modules/codecipher/vigenere/encode.html +++ b/docs/build/html/_modules/codecipher/vigenere/encode.html @@ -43,7 +43,7 @@

Source code for codecipher.vigenere.encode

 Module
     encode.py
 Copyright
-    Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com>
+    Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com>
     codecipher is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
@@ -65,18 +65,18 @@ 

Source code for codecipher.vigenere.encode

 
 try:
     from codecipher.vigenere.lookup_table import LookUpTable
-except ImportError as ats_error_message:
-    # Force close python ATS ##################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')
+except ImportError as ats_error_message:  # pragma: no cover
+    # Force exit python #######################################################
+    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
 
-__author__ = 'Vladimir Roncevic'
-__copyright__ = '(C) 2024, https://electux.github.io/codecipher'
+__author__: str = 'Vladimir Roncevic'
+__copyright__: str = '(C) 2025, https://electux.github.io/codecipher'
 __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE'
-__version__ = '1.4.7'
-__maintainer__ = 'Vladimir Roncevic'
-__email__ = 'elektron.ronca@gmail.com'
-__status__ = 'Updated'
+__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE'
+__version__: str = '1.4.8'
+__maintainer__: str = 'Vladimir Roncevic'
+__email__: str = 'elektron.ronca@gmail.com'
+__status__: str = 'Updated'
 
 
 
@@ -213,7 +213,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vigenere/key_generator.html b/docs/build/html/_modules/codecipher/vigenere/key_generator.html index 166e2f3..6c2286c 100644 --- a/docs/build/html/_modules/codecipher/vigenere/key_generator.html +++ b/docs/build/html/_modules/codecipher/vigenere/key_generator.html @@ -43,7 +43,7 @@

Source code for codecipher.vigenere.key_generator

Module key_generator.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> + Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -62,14 +62,14 @@

Source code for codecipher.vigenere.key_generator

from dataclasses import dataclass, field from typing import List, Optional -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated'
@@ -200,7 +200,7 @@

Navigation

diff --git a/docs/build/html/_modules/codecipher/vigenere/lookup_table.html b/docs/build/html/_modules/codecipher/vigenere/lookup_table.html index 887f2db..aba76cc 100644 --- a/docs/build/html/_modules/codecipher/vigenere/lookup_table.html +++ b/docs/build/html/_modules/codecipher/vigenere/lookup_table.html @@ -43,7 +43,7 @@

Source code for codecipher.vigenere.lookup_table

Module lookup_table.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> + Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -61,14 +61,14 @@

Source code for codecipher.vigenere.lookup_table

from typing import List, Dict -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated'
@@ -136,7 +136,7 @@

Navigation

diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html index c372bdd..490cbe4 100644 --- a/docs/build/html/_modules/index.html +++ b/docs/build/html/_modules/index.html @@ -91,7 +91,7 @@

Navigation

diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt index 45179ba..f6049b7 100644 --- a/docs/build/html/_sources/index.rst.txt +++ b/docs/build/html/_sources/index.rst.txt @@ -136,7 +136,7 @@ Copyright and licence .. |license: apache 2.0| image:: https://img.shields.io/badge/license-apache%202.0-blue.svg :target: https://opensource.org/licenses/apache-2.0 -Copyright (C) 2021 - 2024 by `electux.github.io/codecipher `_ +Copyright (C) 2021 - 2025 by `electux.github.io/codecipher `_ **codecipher** is free software; you can redistribute it and/or modify it under the same terms as Python itself, either Python version 3.x or, diff --git a/docs/build/html/codecipher.a1z52n62.decode.html b/docs/build/html/codecipher.a1z52n62.decode.html index 010ccdc..e946c86 100644 --- a/docs/build/html/codecipher.a1z52n62.decode.html +++ b/docs/build/html/codecipher.a1z52n62.decode.html @@ -51,7 +51,7 @@

Navigation

Module

decode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -208,7 +208,7 @@

Navigation

diff --git a/docs/build/html/codecipher.a1z52n62.encode.html b/docs/build/html/codecipher.a1z52n62.encode.html index 298fb93..ce21f84 100644 --- a/docs/build/html/codecipher.a1z52n62.encode.html +++ b/docs/build/html/codecipher.a1z52n62.encode.html @@ -51,7 +51,7 @@

Navigation

Module

encode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -208,7 +208,7 @@

Navigation

diff --git a/docs/build/html/codecipher.a1z52n62.html b/docs/build/html/codecipher.a1z52n62.html index d982f46..d46032c 100644 --- a/docs/build/html/codecipher.a1z52n62.html +++ b/docs/build/html/codecipher.a1z52n62.html @@ -77,7 +77,7 @@

Submodules
Module

__init__.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -193,7 +193,7 @@

Navigation

diff --git a/docs/build/html/codecipher.atbs.decode.html b/docs/build/html/codecipher.atbs.decode.html index 1f09541..c12c3ac 100644 --- a/docs/build/html/codecipher.atbs.decode.html +++ b/docs/build/html/codecipher.atbs.decode.html @@ -51,7 +51,7 @@

Navigation

Module

decode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -208,7 +208,7 @@

Navigation

diff --git a/docs/build/html/codecipher.atbs.encode.html b/docs/build/html/codecipher.atbs.encode.html index 942c2d8..4ba4db7 100644 --- a/docs/build/html/codecipher.atbs.encode.html +++ b/docs/build/html/codecipher.atbs.encode.html @@ -51,7 +51,7 @@

Navigation

Module

encode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -208,7 +208,7 @@

Navigation

diff --git a/docs/build/html/codecipher.atbs.html b/docs/build/html/codecipher.atbs.html index 8130b1a..847b8d2 100644 --- a/docs/build/html/codecipher.atbs.html +++ b/docs/build/html/codecipher.atbs.html @@ -78,7 +78,7 @@

Submodules
Module

__init__.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -194,7 +194,7 @@

Navigation

diff --git a/docs/build/html/codecipher.atbs.lookup_table.html b/docs/build/html/codecipher.atbs.lookup_table.html index 01ba754..9bd7c7b 100644 --- a/docs/build/html/codecipher.atbs.lookup_table.html +++ b/docs/build/html/codecipher.atbs.lookup_table.html @@ -51,7 +51,7 @@

Navigation

Module

lookup_table.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -129,7 +129,7 @@

Navigation

diff --git a/docs/build/html/codecipher.b64.decode.html b/docs/build/html/codecipher.b64.decode.html index 44637ea..4c64fc5 100644 --- a/docs/build/html/codecipher.b64.decode.html +++ b/docs/build/html/codecipher.b64.decode.html @@ -51,7 +51,7 @@

Navigation

Module

decode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -208,7 +208,7 @@

Navigation

diff --git a/docs/build/html/codecipher.b64.encode.html b/docs/build/html/codecipher.b64.encode.html index 4b7bf9d..24d5d7b 100644 --- a/docs/build/html/codecipher.b64.encode.html +++ b/docs/build/html/codecipher.b64.encode.html @@ -51,7 +51,7 @@

Navigation

Module

encode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -208,7 +208,7 @@

Navigation

diff --git a/docs/build/html/codecipher.b64.html b/docs/build/html/codecipher.b64.html index 765a5e4..a280faf 100644 --- a/docs/build/html/codecipher.b64.html +++ b/docs/build/html/codecipher.b64.html @@ -77,7 +77,7 @@

Submodules
Module

__init__.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -193,7 +193,7 @@

Navigation

diff --git a/docs/build/html/codecipher.caesar.decode.html b/docs/build/html/codecipher.caesar.decode.html index 01d8e98..2fba1fb 100644 --- a/docs/build/html/codecipher.caesar.decode.html +++ b/docs/build/html/codecipher.caesar.decode.html @@ -51,7 +51,7 @@

Navigation

Module

decode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -211,7 +211,7 @@

Navigation

diff --git a/docs/build/html/codecipher.caesar.encode.html b/docs/build/html/codecipher.caesar.encode.html index f47db95..0fa611b 100644 --- a/docs/build/html/codecipher.caesar.encode.html +++ b/docs/build/html/codecipher.caesar.encode.html @@ -51,7 +51,7 @@

Navigation

Module

encode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -211,7 +211,7 @@

Navigation

diff --git a/docs/build/html/codecipher.caesar.html b/docs/build/html/codecipher.caesar.html index 0f14fa1..e38e5d0 100644 --- a/docs/build/html/codecipher.caesar.html +++ b/docs/build/html/codecipher.caesar.html @@ -77,7 +77,7 @@

Submodules
Module

__init__.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -193,7 +193,7 @@

Navigation

diff --git a/docs/build/html/codecipher.html b/docs/build/html/codecipher.html index 7e11d2b..e944f71 100644 --- a/docs/build/html/codecipher.html +++ b/docs/build/html/codecipher.html @@ -175,7 +175,7 @@

Subpackages
Module

__init__.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -261,7 +261,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vernam.decode.html b/docs/build/html/codecipher.vernam.decode.html index 274196c..762f130 100644 --- a/docs/build/html/codecipher.vernam.decode.html +++ b/docs/build/html/codecipher.vernam.decode.html @@ -51,7 +51,7 @@

Navigation

Module

decode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -211,7 +211,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vernam.encode.html b/docs/build/html/codecipher.vernam.encode.html index e356e31..086f5f3 100644 --- a/docs/build/html/codecipher.vernam.encode.html +++ b/docs/build/html/codecipher.vernam.encode.html @@ -51,7 +51,7 @@

Navigation

Module

encode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -211,7 +211,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vernam.html b/docs/build/html/codecipher.vernam.html index c209dab..9ff0eed 100644 --- a/docs/build/html/codecipher.vernam.html +++ b/docs/build/html/codecipher.vernam.html @@ -77,7 +77,7 @@

Submodules
Module

__init__.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -193,7 +193,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vigenere.decode.html b/docs/build/html/codecipher.vigenere.decode.html index db93501..5f0b518 100644 --- a/docs/build/html/codecipher.vigenere.decode.html +++ b/docs/build/html/codecipher.vigenere.decode.html @@ -51,7 +51,7 @@

Navigation

Module

decode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -236,7 +236,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vigenere.encode.html b/docs/build/html/codecipher.vigenere.encode.html index 34ba5e5..314a859 100644 --- a/docs/build/html/codecipher.vigenere.encode.html +++ b/docs/build/html/codecipher.vigenere.encode.html @@ -51,7 +51,7 @@

Navigation

Module

encode.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -236,7 +236,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vigenere.html b/docs/build/html/codecipher.vigenere.html index 5762e1c..87b388a 100644 --- a/docs/build/html/codecipher.vigenere.html +++ b/docs/build/html/codecipher.vigenere.html @@ -102,7 +102,7 @@

Submodules
Module

__init__.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -218,7 +218,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vigenere.key_generator.html b/docs/build/html/codecipher.vigenere.key_generator.html index 4042edc..b1db8c9 100644 --- a/docs/build/html/codecipher.vigenere.key_generator.html +++ b/docs/build/html/codecipher.vigenere.key_generator.html @@ -51,7 +51,7 @@

Navigation

Module

key_generator.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -231,7 +231,7 @@

Navigation

diff --git a/docs/build/html/codecipher.vigenere.lookup_table.html b/docs/build/html/codecipher.vigenere.lookup_table.html index d6f5c17..5ab7cd8 100644 --- a/docs/build/html/codecipher.vigenere.lookup_table.html +++ b/docs/build/html/codecipher.vigenere.lookup_table.html @@ -47,7 +47,7 @@

Navigation

Module

lookup_table.py

-
Copyright

Copyright (C) 2021 - 2024 Vladimir Roncevic <elektron.ronca@gmail.com> +

Copyright

Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -194,7 +194,7 @@

Navigation

diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index 2b8e1f5..32d3457 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -545,7 +545,7 @@

Navigation

diff --git a/docs/build/html/index.html b/docs/build/html/index.html index 0b759c8..df28275 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -148,7 +148,7 @@

Package structure

Copyright and licence¶

license: gpl v3 license: apache 2.0

-

Copyright (C) 2021 - 2024 by electux.github.io/codecipher

+

Copyright (C) 2021 - 2025 by electux.github.io/codecipher

codecipher is free software; you can redistribute it and/or modify it under the same terms as Python itself, either Python version 3.x or, at your option, any later version of Python 3 you may have available.

@@ -227,7 +227,7 @@

Navigation

diff --git a/docs/build/html/modules.html b/docs/build/html/modules.html index 97c8b06..576e9ee 100644 --- a/docs/build/html/modules.html +++ b/docs/build/html/modules.html @@ -146,7 +146,7 @@

Navigation

diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index f717bd0..28c94be 100644 Binary files a/docs/build/html/objects.inv and b/docs/build/html/objects.inv differ diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html index 3415f1e..7710cfe 100644 --- a/docs/build/html/py-modindex.html +++ b/docs/build/html/py-modindex.html @@ -196,7 +196,7 @@

Navigation

diff --git a/docs/build/html/search.html b/docs/build/html/search.html index b5946a0..e3ff178 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -95,7 +95,7 @@

Navigation

diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 1cbde71..53ef145 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["codecipher", "codecipher.a1z52n62", "codecipher.a1z52n62.decode", "codecipher.a1z52n62.encode", "codecipher.atbs", "codecipher.atbs.decode", "codecipher.atbs.encode", "codecipher.atbs.lookup_table", "codecipher.b64", "codecipher.b64.decode", "codecipher.b64.encode", "codecipher.caesar", "codecipher.caesar.decode", "codecipher.caesar.encode", "codecipher.vernam", "codecipher.vernam.decode", "codecipher.vernam.encode", "codecipher.vigenere", "codecipher.vigenere.decode", "codecipher.vigenere.encode", "codecipher.vigenere.key_generator", "codecipher.vigenere.lookup_table", "index", "modules"], "filenames": ["codecipher.rst", "codecipher.a1z52n62.rst", "codecipher.a1z52n62.decode.rst", "codecipher.a1z52n62.encode.rst", "codecipher.atbs.rst", "codecipher.atbs.decode.rst", "codecipher.atbs.encode.rst", "codecipher.atbs.lookup_table.rst", "codecipher.b64.rst", "codecipher.b64.decode.rst", "codecipher.b64.encode.rst", "codecipher.caesar.rst", "codecipher.caesar.decode.rst", "codecipher.caesar.encode.rst", "codecipher.vernam.rst", "codecipher.vernam.decode.rst", "codecipher.vernam.encode.rst", "codecipher.vigenere.rst", "codecipher.vigenere.decode.rst", "codecipher.vigenere.encode.rst", "codecipher.vigenere.key_generator.rst", "codecipher.vigenere.lookup_table.rst", "index.rst", "modules.rst"], "titles": ["codecipher package", "codecipher.a1z52n62 package", "codecipher.a1z52n62.decode module", "codecipher.a1z52n62.encode module", "codecipher.atbs package", "codecipher.atbs.decode module", "codecipher.atbs.encode module", "codecipher.atbs.lookup_table module", "codecipher.b64 package", "codecipher.b64.decode module", "codecipher.b64.encode module", "codecipher.caesar package", "codecipher.caesar.decode module", "codecipher.caesar.encode module", "codecipher.vernam package", "codecipher.vernam.decode module", "codecipher.vernam.encode module", "codecipher.vigenere package", "codecipher.vigenere.decode module", "codecipher.vigenere.encode module", "codecipher.vigenere.key_generator module", "codecipher.vigenere.lookup_table module", "CODECipher", "codecipher"], "terms": {"a1z52n62": [0, 22, 23], "submodul": [0, 23], "decod": [0, 1, 4, 8, 11, 14, 17, 20, 21, 22], "a1z52n62decod": [0, 1, 2], "encod": [0, 1, 4, 8, 11, 14, 17, 20, 21, 22], "a1z52n62encod": [0, 1, 3], "atb": [0, 22, 23], "alephtawbetshindecod": [0, 4, 5, 9], "alephtawbetshinencod": [0, 4, 6], "lookup_t": [0, 4, 17, 22], "alephtawbetshin": [0, 4, 5, 6, 7, 9, 10], "b64": [0, 22, 23], "b64decod": [0, 8, 9], "b64encod": [0, 8, 10], "caesar": [0, 22, 23], "caesardecod": [0, 11, 12], "caesarencod": [0, 11, 13], "vernam": [0, 22, 23], "vernamdecod": [0, 14, 15], "vernamencod": [0, 14, 16], "vigener": [0, 22, 23], "vigeneredecod": [0, 17, 18], "vigenereencod": [0, 17, 19], "key_gener": [0, 17, 22], "keygener": [0, 17, 20], "lookupt": [0, 17, 21], "__init__": [0, 1, 4, 8, 11, 14, 17, 22], "py": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "copyright": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "c": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "2021": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "2024": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "vladimir": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "roncev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "elektron": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "ronca": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gmail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "com": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "free": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "softwar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "redistribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "modifi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "under": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "term": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "gnu": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "public": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "licens": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "publish": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "foundat": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "either": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "version": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "your": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "option": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "ani": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "later": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "distribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "hope": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "without": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "warranti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "even": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "impli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "merchant": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "fit": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "FOR": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "A": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "particular": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "purpos": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "see": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "more": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "detail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "should": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "have": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "receiv": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "copi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "along": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "program": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "If": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "http": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "www": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "org": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "_decode_data": [1, 2, 4, 5, 8, 9, 11, 12, 14, 15, 17, 18], "decode_data": [1, 2, 4, 5, 8, 9, 11, 12, 14, 15, 17, 18], "_encode_data": [1, 3, 4, 6, 8, 10, 11, 13, 14, 16, 17, 19], "encode_data": [1, 3, 4, 6, 8, 10, 11, 13, 14, 16, 17, 19], "info": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "defin": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "class": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "attribut": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "method": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "creat": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "contain": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22], "aggreg": [1, 4, 8, 11, 14, 17, 21], "backend": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "api": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "sourc": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "base": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "It": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "none": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "initi": [1, 4, 8, 11, 14, 17], "constructor": [1, 4, 8, 11, 14, 17], "str": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20, 21], "object": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20, 21], "data": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "properti": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "from": [2, 5, 9, 12, 15, 18], "format": [2, 3, 5, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19], "paramet": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19], "which": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19], "return": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "except": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "get": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "type": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20, 22], "dict": [7, 21], "shift_count": [12, 13], "int": [12, 13, 20, 21], "shift": [12, 13], "count": [12, 13], "kei": [15, 16, 17, 18, 19, 20], "_split_data_decod": [17, 18], "_split_data_encod": [17, 19], "_data_len": [17, 20], "_kei": [17, 20], "data_len": [17, 20], "generate_kei": [17, 20], "alpha": [17, 21], "alphanum": [17, 21], "index_to_lett": [17, 21], "letter_to_index": [17, 21], "num": [17, 21], "white_spac": [17, 21], "_split_data": [18, 19], "split": [18, 19], "data_to_decod": 18, "list": [18, 19], "data_to_encod": 19, "vigen": 20, "length": 20, "lookup": 21, "tabl": 21, "support": [21, 22], "alphabet": 21, "numer": 21, "white": 21, "space": 21, "char": 21, "index": [21, 22], "letter": 21, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz": 21, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789": 21, "0": 21, "1": 21, "b": 21, "2": 21, "d": 21, "4": 21, "e": 21, "5": 21, "f": 21, "6": 21, "g": 21, "7": [21, 22], "h": 21, "8": 21, "9": 21, "j": 21, "10": 21, "k": 21, "11": 21, "l": 21, "12": 21, "m": [21, 22], "13": 21, "n": 21, "14": 21, "o": 21, "15": 21, "p": 21, "16": 21, "q": 21, "17": 21, "r": [21, 22], "18": 21, "19": 21, "t": 21, "20": 21, "u": 21, "21": 21, "v": 21, "22": 21, "w": 21, "23": [21, 22], "x": [21, 22], "24": 21, "y": [21, 22], "25": 21, "z": [21, 22], "26": 21, "27": 21, "28": 21, "29": 21, "30": 21, "31": 21, "32": 21, "33": 21, "34": 21, "35": 21, "36": 21, "37": 21, "38": 21, "39": 21, "40": 21, "41": 21, "42": 21, "43": 21, "44": 21, "45": 21, "46": 21, "47": 21, "48": 21, "49": 21, "50": 21, "51": 21, "52": 21, "53": 21, "54": 21, "55": 21, "56": 21, "57": 21, "58": 21, "59": 21, "60": 21, "61": 21, "62": 21, "0123456789": 21, "cipher": 22, "util": 22, "develop": 22, "python": 22, "code": 22, "The": 22, "readm": 22, "introduc": 22, "modul": [22, 23], "provid": 22, "instruct": 22, "how": 22, "machin": 22, "mai": 22, "other": 22, "inform": 22, "befor": 22, "ar": 22, "subpackag": [22, 23], "next": 22, "environ": 22, "navig": 22, "releas": 22, "page": 22, "download": 22, "extract": 22, "archiv": 22, "To": 22, "follow": 22, "tar": 22, "xvzf": 22, "gz": 22, "cd": 22, "pyton3": 22, "pip3": 22, "requir": 22, "txt": 22, "python3": 22, "build": 22, "isol": 22, "wheel": 22, "py3": 22, "whl": 22, "old": 22, "fashion": 22, "wai": 22, "setup": 22, "install_lib": 22, "install_egg_info": 22, "docker": 22, "imag": 22, "pip": 22, "librari": 22, "oop": 22, "directori": 22, "file": 22, "electux": 22, "github": 22, "io": 22, "same": 22, "itself": 22, "avail": 22, "let": 22, "help": 22, "psf": 22, "search": 22, "packag": 23, "content": 23}, "objects": {"": [[0, 0, 0, "-", "codecipher"]], "codecipher": [[1, 0, 0, "-", "a1z52n62"], [4, 0, 0, "-", "atbs"], [8, 0, 0, "-", "b64"], [11, 0, 0, "-", "caesar"], [14, 0, 0, "-", "vernam"], [17, 0, 0, "-", "vigenere"]], "codecipher.a1z52n62": [[1, 1, 1, "", "A1z52N62"], [2, 0, 0, "-", "decode"], [3, 0, 0, "-", "encode"]], "codecipher.a1z52n62.decode": [[2, 1, 1, "", "A1z52N62Decode"]], "codecipher.a1z52n62.decode.A1z52N62Decode": [[2, 2, 1, "", "_decode_data"], [2, 3, 1, "", "decode"], [2, 4, 1, "", "decode_data"]], "codecipher.a1z52n62.encode": [[3, 1, 1, "", "A1z52N62Encode"]], "codecipher.a1z52n62.encode.A1z52N62Encode": [[3, 2, 1, "", "_encode_data"], [3, 3, 1, "", "encode"], [3, 4, 1, "", "encode_data"]], "codecipher.atbs": [[4, 1, 1, "", "AlephTawBetShin"], [5, 0, 0, "-", "decode"], [6, 0, 0, "-", "encode"], [7, 0, 0, "-", "lookup_table"]], "codecipher.atbs.decode": [[5, 1, 1, "", "AlephTawBetShinDecode"]], "codecipher.atbs.decode.AlephTawBetShinDecode": [[5, 2, 1, "", "_decode_data"], [5, 3, 1, "", "decode"], [5, 4, 1, "", "decode_data"]], "codecipher.atbs.encode": [[6, 1, 1, "", "AlephTawBetShinEncode"]], "codecipher.atbs.encode.AlephTawBetShinEncode": [[6, 2, 1, "", "_encode_data"], [6, 3, 1, "", "encode"], [6, 4, 1, "", "encode_data"]], "codecipher.b64": [[8, 1, 1, "", "B64"], [9, 0, 0, "-", "decode"], [10, 0, 0, "-", "encode"]], "codecipher.b64.decode": [[9, 1, 1, "", "B64Decode"]], "codecipher.b64.decode.B64Decode": [[9, 2, 1, "", "_decode_data"], [9, 3, 1, "", "decode"], [9, 4, 1, "", "decode_data"]], "codecipher.b64.encode": [[10, 1, 1, "", "B64Encode"]], "codecipher.b64.encode.B64Encode": [[10, 2, 1, "", "_encode_data"], [10, 3, 1, "", "encode"], [10, 4, 1, "", "encode_data"]], "codecipher.caesar": [[11, 1, 1, "", "Caesar"], [12, 0, 0, "-", "decode"], [13, 0, 0, "-", "encode"]], "codecipher.caesar.decode": [[12, 1, 1, "", "CaesarDecode"]], "codecipher.caesar.decode.CaesarDecode": [[12, 2, 1, "", "_decode_data"], [12, 3, 1, "", "decode"], [12, 4, 1, "", "decode_data"]], "codecipher.caesar.encode": [[13, 1, 1, "", "CaesarEncode"]], "codecipher.caesar.encode.CaesarEncode": [[13, 2, 1, "", "_encode_data"], [13, 3, 1, "", "encode"], [13, 4, 1, "", "encode_data"]], "codecipher.vernam": [[14, 1, 1, "", "Vernam"], [15, 0, 0, "-", "decode"], [16, 0, 0, "-", "encode"]], "codecipher.vernam.decode": [[15, 1, 1, "", "VernamDecode"]], "codecipher.vernam.decode.VernamDecode": [[15, 2, 1, "", "_decode_data"], [15, 3, 1, "", "decode"], [15, 4, 1, "", "decode_data"]], "codecipher.vernam.encode": [[16, 1, 1, "", "VernamEncode"]], "codecipher.vernam.encode.VernamEncode": [[16, 2, 1, "", "_encode_data"], [16, 3, 1, "", "encode"], [16, 4, 1, "", "encode_data"]], "codecipher.vigenere": [[17, 1, 1, "", "Vigenere"], [18, 0, 0, "-", "decode"], [19, 0, 0, "-", "encode"], [20, 0, 0, "-", "key_generator"], [21, 0, 0, "-", "lookup_table"]], "codecipher.vigenere.decode": [[18, 1, 1, "", "VigenereDecode"]], "codecipher.vigenere.decode.VigenereDecode": [[18, 2, 1, "", "_decode_data"], [18, 3, 1, "", "_split_data_decode"], [18, 3, 1, "", "decode"], [18, 4, 1, "", "decode_data"]], "codecipher.vigenere.encode": [[19, 1, 1, "", "VigenereEncode"]], "codecipher.vigenere.encode.VigenereEncode": [[19, 2, 1, "", "_encode_data"], [19, 3, 1, "", "_split_data_encode"], [19, 3, 1, "", "encode"], [19, 4, 1, "", "encode_data"]], "codecipher.vigenere.key_generator": [[20, 1, 1, "", "KeyGenerator"]], "codecipher.vigenere.key_generator.KeyGenerator": [[20, 2, 1, "", "_data_len"], [20, 2, 1, "", "_key"], [20, 4, 1, "", "data_len"], [20, 3, 1, "", "generate_key"], [20, 4, 1, "", "key"]], "codecipher.vigenere.lookup_table": [[21, 1, 1, "", "LookUpTable"]], "codecipher.vigenere.lookup_table.LookUpTable": [[21, 2, 1, "", "ALPHA"], [21, 2, 1, "", "ALPHANUM"], [21, 2, 1, "", "INDEX_TO_LETTER"], [21, 2, 1, "", "LETTER_TO_INDEX"], [21, 2, 1, "", "NUM"], [21, 2, 1, "", "WHITE_SPACE"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"]}, "titleterms": {"codeciph": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "packag": [0, 1, 4, 8, 11, 14, 17, 22], "subpackag": 0, "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "content": [0, 1, 4, 8, 11, 14, 17, 22], "a1z52n62": [1, 2, 3], "submodul": [1, 4, 8, 11, 14, 17], "decod": [2, 5, 9, 12, 15, 18], "encod": [3, 6, 10, 13, 16, 19], "atb": [4, 5, 6, 7], "lookup_t": [7, 21], "b64": [8, 9, 10], "caesar": [11, 12, 13], "vernam": [14, 15, 16], "vigener": [17, 18, 19, 20, 21], "key_gener": 20, "instal": 22, "depend": 22, "structur": 22, "copyright": 22, "licenc": 22, "indic": 22, "tabl": 22}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"codecipher package": [[0, "codecipher-package"]], "Subpackages": [[0, "subpackages"]], "Module contents": [[0, "module-codecipher"], [1, "module-codecipher.a1z52n62"], [4, "module-codecipher.atbs"], [8, "module-codecipher.b64"], [11, "module-codecipher.caesar"], [14, "module-codecipher.vernam"], [17, "module-codecipher.vigenere"]], "codecipher.a1z52n62 package": [[1, "codecipher-a1z52n62-package"]], "Submodules": [[1, "submodules"], [4, "submodules"], [8, "submodules"], [11, "submodules"], [14, "submodules"], [17, "submodules"]], "codecipher.a1z52n62.decode module": [[2, "module-codecipher.a1z52n62.decode"]], "codecipher.a1z52n62.encode module": [[3, "module-codecipher.a1z52n62.encode"]], "codecipher.atbs package": [[4, "codecipher-atbs-package"]], "codecipher.atbs.decode module": [[5, "module-codecipher.atbs.decode"]], "codecipher.atbs.encode module": [[6, "module-codecipher.atbs.encode"]], "codecipher.atbs.lookup_table module": [[7, "module-codecipher.atbs.lookup_table"]], "codecipher.b64 package": [[8, "codecipher-b64-package"]], "codecipher.b64.decode module": [[9, "module-codecipher.b64.decode"]], "codecipher.b64.encode module": [[10, "module-codecipher.b64.encode"]], "codecipher.caesar package": [[11, "codecipher-caesar-package"]], "codecipher.caesar.decode module": [[12, "module-codecipher.caesar.decode"]], "codecipher.caesar.encode module": [[13, "module-codecipher.caesar.encode"]], "codecipher.vernam package": [[14, "codecipher-vernam-package"]], "codecipher.vernam.decode module": [[15, "module-codecipher.vernam.decode"]], "codecipher.vernam.encode module": [[16, "module-codecipher.vernam.encode"]], "codecipher.vigenere package": [[17, "codecipher-vigenere-package"]], "codecipher.vigenere.decode module": [[18, "module-codecipher.vigenere.decode"]], "codecipher.vigenere.encode module": [[19, "module-codecipher.vigenere.encode"]], "codecipher.vigenere.key_generator module": [[20, "module-codecipher.vigenere.key_generator"]], "codecipher.vigenere.lookup_table module": [[21, "module-codecipher.vigenere.lookup_table"]], "CODECipher": [[22, "codecipher"]], "Contents": [[22, null]], "Installation": [[22, "installation"]], "Dependencies": [[22, "dependencies"]], "Package structure": [[22, "package-structure"]], "Copyright and licence": [[22, "copyright-and-licence"]], "Indices and tables": [[22, "indices-and-tables"]], "codecipher": [[23, "codecipher"]]}, "indexentries": {"codecipher": [[0, "module-codecipher"]], "module": [[0, "module-codecipher"], [1, "module-codecipher.a1z52n62"], [2, "module-codecipher.a1z52n62.decode"], [3, "module-codecipher.a1z52n62.encode"], [4, "module-codecipher.atbs"], [5, "module-codecipher.atbs.decode"], [6, "module-codecipher.atbs.encode"], [7, "module-codecipher.atbs.lookup_table"], [8, "module-codecipher.b64"], [9, "module-codecipher.b64.decode"], [10, "module-codecipher.b64.encode"], [11, "module-codecipher.caesar"], [12, "module-codecipher.caesar.decode"], [13, "module-codecipher.caesar.encode"], [14, "module-codecipher.vernam"], [15, "module-codecipher.vernam.decode"], [16, "module-codecipher.vernam.encode"], [17, "module-codecipher.vigenere"], [18, "module-codecipher.vigenere.decode"], [19, "module-codecipher.vigenere.encode"], [20, "module-codecipher.vigenere.key_generator"], [21, "module-codecipher.vigenere.lookup_table"]], "a1z52n62 (class in codecipher.a1z52n62)": [[1, "codecipher.a1z52n62.A1z52N62"]], "codecipher.a1z52n62": [[1, "module-codecipher.a1z52n62"]], "a1z52n62decode (class in codecipher.a1z52n62.decode)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode"]], "_decode_data (codecipher.a1z52n62.decode.a1z52n62decode attribute)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode._decode_data"]], "codecipher.a1z52n62.decode": [[2, "module-codecipher.a1z52n62.decode"]], "decode() (codecipher.a1z52n62.decode.a1z52n62decode method)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode.decode"]], "decode_data (codecipher.a1z52n62.decode.a1z52n62decode property)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode.decode_data"]], "a1z52n62encode (class in codecipher.a1z52n62.encode)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode"]], "_encode_data (codecipher.a1z52n62.encode.a1z52n62encode attribute)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode._encode_data"]], "codecipher.a1z52n62.encode": [[3, "module-codecipher.a1z52n62.encode"]], "encode() (codecipher.a1z52n62.encode.a1z52n62encode method)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode.encode"]], "encode_data (codecipher.a1z52n62.encode.a1z52n62encode property)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode.encode_data"]], "alephtawbetshin (class in codecipher.atbs)": [[4, "codecipher.atbs.AlephTawBetShin"]], "codecipher.atbs": [[4, "module-codecipher.atbs"]], "alephtawbetshindecode (class in codecipher.atbs.decode)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode"]], "_decode_data (codecipher.atbs.decode.alephtawbetshindecode attribute)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode._decode_data"]], "codecipher.atbs.decode": [[5, "module-codecipher.atbs.decode"]], "decode() (codecipher.atbs.decode.alephtawbetshindecode method)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode.decode"]], "decode_data (codecipher.atbs.decode.alephtawbetshindecode property)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode.decode_data"]], "alephtawbetshinencode (class in codecipher.atbs.encode)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode"]], "_encode_data (codecipher.atbs.encode.alephtawbetshinencode attribute)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode._encode_data"]], "codecipher.atbs.encode": [[6, "module-codecipher.atbs.encode"]], "encode() (codecipher.atbs.encode.alephtawbetshinencode method)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode.encode"]], "encode_data (codecipher.atbs.encode.alephtawbetshinencode property)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode.encode_data"]], "codecipher.atbs.lookup_table": [[7, "module-codecipher.atbs.lookup_table"]], "b64 (class in codecipher.b64)": [[8, "codecipher.b64.B64"]], "codecipher.b64": [[8, "module-codecipher.b64"]], "b64decode (class in codecipher.b64.decode)": [[9, "codecipher.b64.decode.B64Decode"]], "_decode_data (codecipher.b64.decode.b64decode attribute)": [[9, "codecipher.b64.decode.B64Decode._decode_data"]], "codecipher.b64.decode": [[9, "module-codecipher.b64.decode"]], "decode() (codecipher.b64.decode.b64decode method)": [[9, "codecipher.b64.decode.B64Decode.decode"]], "decode_data (codecipher.b64.decode.b64decode property)": [[9, "codecipher.b64.decode.B64Decode.decode_data"]], "b64encode (class in codecipher.b64.encode)": [[10, "codecipher.b64.encode.B64Encode"]], "_encode_data (codecipher.b64.encode.b64encode attribute)": [[10, "codecipher.b64.encode.B64Encode._encode_data"]], "codecipher.b64.encode": [[10, "module-codecipher.b64.encode"]], "encode() (codecipher.b64.encode.b64encode method)": [[10, "codecipher.b64.encode.B64Encode.encode"]], "encode_data (codecipher.b64.encode.b64encode property)": [[10, "codecipher.b64.encode.B64Encode.encode_data"]], "caesar (class in codecipher.caesar)": [[11, "codecipher.caesar.Caesar"]], "codecipher.caesar": [[11, "module-codecipher.caesar"]], "caesardecode (class in codecipher.caesar.decode)": [[12, "codecipher.caesar.decode.CaesarDecode"]], "_decode_data (codecipher.caesar.decode.caesardecode attribute)": [[12, "codecipher.caesar.decode.CaesarDecode._decode_data"]], "codecipher.caesar.decode": [[12, "module-codecipher.caesar.decode"]], "decode() (codecipher.caesar.decode.caesardecode method)": [[12, "codecipher.caesar.decode.CaesarDecode.decode"]], "decode_data (codecipher.caesar.decode.caesardecode property)": [[12, "codecipher.caesar.decode.CaesarDecode.decode_data"]], "caesarencode (class in codecipher.caesar.encode)": [[13, "codecipher.caesar.encode.CaesarEncode"]], "_encode_data (codecipher.caesar.encode.caesarencode attribute)": [[13, "codecipher.caesar.encode.CaesarEncode._encode_data"]], "codecipher.caesar.encode": [[13, "module-codecipher.caesar.encode"]], "encode() (codecipher.caesar.encode.caesarencode method)": [[13, "codecipher.caesar.encode.CaesarEncode.encode"]], "encode_data (codecipher.caesar.encode.caesarencode property)": [[13, "codecipher.caesar.encode.CaesarEncode.encode_data"]], "vernam (class in codecipher.vernam)": [[14, "codecipher.vernam.Vernam"]], "codecipher.vernam": [[14, "module-codecipher.vernam"]], "vernamdecode (class in codecipher.vernam.decode)": [[15, "codecipher.vernam.decode.VernamDecode"]], "_decode_data (codecipher.vernam.decode.vernamdecode attribute)": [[15, "codecipher.vernam.decode.VernamDecode._decode_data"]], "codecipher.vernam.decode": [[15, "module-codecipher.vernam.decode"]], "decode() (codecipher.vernam.decode.vernamdecode method)": [[15, "codecipher.vernam.decode.VernamDecode.decode"]], "decode_data (codecipher.vernam.decode.vernamdecode property)": [[15, "codecipher.vernam.decode.VernamDecode.decode_data"]], "vernamencode (class in codecipher.vernam.encode)": [[16, "codecipher.vernam.encode.VernamEncode"]], "_encode_data (codecipher.vernam.encode.vernamencode attribute)": [[16, "codecipher.vernam.encode.VernamEncode._encode_data"]], "codecipher.vernam.encode": [[16, "module-codecipher.vernam.encode"]], "encode() (codecipher.vernam.encode.vernamencode method)": [[16, "codecipher.vernam.encode.VernamEncode.encode"]], "encode_data (codecipher.vernam.encode.vernamencode property)": [[16, "codecipher.vernam.encode.VernamEncode.encode_data"]], "vigenere (class in codecipher.vigenere)": [[17, "codecipher.vigenere.Vigenere"]], "codecipher.vigenere": [[17, "module-codecipher.vigenere"]], "vigeneredecode (class in codecipher.vigenere.decode)": [[18, "codecipher.vigenere.decode.VigenereDecode"]], "_decode_data (codecipher.vigenere.decode.vigeneredecode attribute)": [[18, "codecipher.vigenere.decode.VigenereDecode._decode_data"]], "_split_data_decode() (codecipher.vigenere.decode.vigeneredecode method)": [[18, "codecipher.vigenere.decode.VigenereDecode._split_data_decode"]], "codecipher.vigenere.decode": [[18, "module-codecipher.vigenere.decode"]], "decode() (codecipher.vigenere.decode.vigeneredecode method)": [[18, "codecipher.vigenere.decode.VigenereDecode.decode"]], "decode_data (codecipher.vigenere.decode.vigeneredecode property)": [[18, "codecipher.vigenere.decode.VigenereDecode.decode_data"]], "vigenereencode (class in codecipher.vigenere.encode)": [[19, "codecipher.vigenere.encode.VigenereEncode"]], "_encode_data (codecipher.vigenere.encode.vigenereencode attribute)": [[19, "codecipher.vigenere.encode.VigenereEncode._encode_data"]], "_split_data_encode() (codecipher.vigenere.encode.vigenereencode method)": [[19, "codecipher.vigenere.encode.VigenereEncode._split_data_encode"]], "codecipher.vigenere.encode": [[19, "module-codecipher.vigenere.encode"]], "encode() (codecipher.vigenere.encode.vigenereencode method)": [[19, "codecipher.vigenere.encode.VigenereEncode.encode"]], "encode_data (codecipher.vigenere.encode.vigenereencode property)": [[19, "codecipher.vigenere.encode.VigenereEncode.encode_data"]], "keygenerator (class in codecipher.vigenere.key_generator)": [[20, "codecipher.vigenere.key_generator.KeyGenerator"]], "_data_len (codecipher.vigenere.key_generator.keygenerator attribute)": [[20, "codecipher.vigenere.key_generator.KeyGenerator._data_len"]], "_key (codecipher.vigenere.key_generator.keygenerator attribute)": [[20, "codecipher.vigenere.key_generator.KeyGenerator._key"]], "codecipher.vigenere.key_generator": [[20, "module-codecipher.vigenere.key_generator"]], "data_len (codecipher.vigenere.key_generator.keygenerator property)": [[20, "codecipher.vigenere.key_generator.KeyGenerator.data_len"]], "generate_key() (codecipher.vigenere.key_generator.keygenerator method)": [[20, "codecipher.vigenere.key_generator.KeyGenerator.generate_key"]], "key (codecipher.vigenere.key_generator.keygenerator property)": [[20, "codecipher.vigenere.key_generator.KeyGenerator.key"]], "alpha (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.ALPHA"]], "alphanum (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.ALPHANUM"]], "index_to_letter (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.INDEX_TO_LETTER"]], "letter_to_index (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.LETTER_TO_INDEX"]], "lookuptable (class in codecipher.vigenere.lookup_table)": [[21, "codecipher.vigenere.lookup_table.LookUpTable"]], "num (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.NUM"]], "white_space (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.WHITE_SPACE"]], "codecipher.vigenere.lookup_table": [[21, "module-codecipher.vigenere.lookup_table"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["codecipher", "codecipher.a1z52n62", "codecipher.a1z52n62.decode", "codecipher.a1z52n62.encode", "codecipher.atbs", "codecipher.atbs.decode", "codecipher.atbs.encode", "codecipher.atbs.lookup_table", "codecipher.b64", "codecipher.b64.decode", "codecipher.b64.encode", "codecipher.caesar", "codecipher.caesar.decode", "codecipher.caesar.encode", "codecipher.vernam", "codecipher.vernam.decode", "codecipher.vernam.encode", "codecipher.vigenere", "codecipher.vigenere.decode", "codecipher.vigenere.encode", "codecipher.vigenere.key_generator", "codecipher.vigenere.lookup_table", "index", "modules"], "filenames": ["codecipher.rst", "codecipher.a1z52n62.rst", "codecipher.a1z52n62.decode.rst", "codecipher.a1z52n62.encode.rst", "codecipher.atbs.rst", "codecipher.atbs.decode.rst", "codecipher.atbs.encode.rst", "codecipher.atbs.lookup_table.rst", "codecipher.b64.rst", "codecipher.b64.decode.rst", "codecipher.b64.encode.rst", "codecipher.caesar.rst", "codecipher.caesar.decode.rst", "codecipher.caesar.encode.rst", "codecipher.vernam.rst", "codecipher.vernam.decode.rst", "codecipher.vernam.encode.rst", "codecipher.vigenere.rst", "codecipher.vigenere.decode.rst", "codecipher.vigenere.encode.rst", "codecipher.vigenere.key_generator.rst", "codecipher.vigenere.lookup_table.rst", "index.rst", "modules.rst"], "titles": ["codecipher package", "codecipher.a1z52n62 package", "codecipher.a1z52n62.decode module", "codecipher.a1z52n62.encode module", "codecipher.atbs package", "codecipher.atbs.decode module", "codecipher.atbs.encode module", "codecipher.atbs.lookup_table module", "codecipher.b64 package", "codecipher.b64.decode module", "codecipher.b64.encode module", "codecipher.caesar package", "codecipher.caesar.decode module", "codecipher.caesar.encode module", "codecipher.vernam package", "codecipher.vernam.decode module", "codecipher.vernam.encode module", "codecipher.vigenere package", "codecipher.vigenere.decode module", "codecipher.vigenere.encode module", "codecipher.vigenere.key_generator module", "codecipher.vigenere.lookup_table module", "CODECipher", "codecipher"], "terms": {"a1z52n62": [0, 22, 23], "submodul": [0, 23], "decod": [0, 1, 4, 8, 11, 14, 17, 20, 21, 22], "a1z52n62decod": [0, 1, 2], "encod": [0, 1, 4, 8, 11, 14, 17, 20, 21, 22], "a1z52n62encod": [0, 1, 3], "atb": [0, 22, 23], "alephtawbetshindecod": [0, 4, 5, 9], "alephtawbetshinencod": [0, 4, 6], "lookup_t": [0, 4, 17, 22], "alephtawbetshin": [0, 4, 5, 6, 7, 9, 10], "b64": [0, 22, 23], "b64decod": [0, 8, 9], "b64encod": [0, 8, 10], "caesar": [0, 22, 23], "caesardecod": [0, 11, 12], "caesarencod": [0, 11, 13], "vernam": [0, 22, 23], "vernamdecod": [0, 14, 15], "vernamencod": [0, 14, 16], "vigener": [0, 22, 23], "vigeneredecod": [0, 17, 18], "vigenereencod": [0, 17, 19], "key_gener": [0, 17, 22], "keygener": [0, 17, 20], "lookupt": [0, 17, 21], "__init__": [0, 1, 4, 8, 11, 14, 17, 22], "py": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "copyright": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "c": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "2021": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "2025": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "vladimir": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "roncev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "elektron": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "ronca": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gmail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "com": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "free": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "softwar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "redistribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "modifi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "under": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "term": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "gnu": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "public": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "licens": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "publish": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "foundat": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "either": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "version": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "your": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "option": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "ani": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "later": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "distribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "hope": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "without": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "warranti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "even": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "impli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "merchant": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "fit": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "FOR": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "A": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "particular": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "purpos": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "see": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "more": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "detail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "should": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "have": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "receiv": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "copi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "along": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "program": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "If": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "http": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "www": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "org": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "_decode_data": [1, 2, 4, 5, 8, 9, 11, 12, 14, 15, 17, 18], "decode_data": [1, 2, 4, 5, 8, 9, 11, 12, 14, 15, 17, 18], "_encode_data": [1, 3, 4, 6, 8, 10, 11, 13, 14, 16, 17, 19], "encode_data": [1, 3, 4, 6, 8, 10, 11, 13, 14, 16, 17, 19], "info": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "defin": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "class": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "attribut": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "method": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "creat": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "contain": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22], "aggreg": [1, 4, 8, 11, 14, 17, 21], "backend": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "api": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "sourc": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "base": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "It": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "none": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "initi": [1, 4, 8, 11, 14, 17], "constructor": [1, 4, 8, 11, 14, 17], "str": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20, 21], "object": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20, 21], "data": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "properti": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "from": [2, 5, 9, 12, 15, 18], "format": [2, 3, 5, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19], "paramet": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19], "which": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19], "return": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "except": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "get": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20], "type": [2, 3, 5, 6, 9, 10, 12, 13, 15, 16, 18, 19, 20, 22], "dict": [7, 21], "shift_count": [12, 13], "int": [12, 13, 20, 21], "shift": [12, 13], "count": [12, 13], "kei": [15, 16, 17, 18, 19, 20], "_split_data_decod": [17, 18], "_split_data_encod": [17, 19], "_data_len": [17, 20], "_kei": [17, 20], "data_len": [17, 20], "generate_kei": [17, 20], "alpha": [17, 21], "alphanum": [17, 21], "index_to_lett": [17, 21], "letter_to_index": [17, 21], "num": [17, 21], "white_spac": [17, 21], "_split_data": [18, 19], "split": [18, 19], "data_to_decod": 18, "list": [18, 19], "data_to_encod": 19, "vigen": 20, "length": 20, "lookup": 21, "tabl": 21, "support": [21, 22], "alphabet": 21, "numer": 21, "white": 21, "space": 21, "char": 21, "index": [21, 22], "letter": 21, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz": 21, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789": 21, "0": 21, "1": 21, "b": 21, "2": 21, "d": 21, "4": 21, "e": 21, "5": 21, "f": 21, "6": 21, "g": 21, "7": [21, 22], "h": 21, "8": 21, "9": 21, "j": 21, "10": 21, "k": 21, "11": 21, "l": 21, "12": 21, "m": [21, 22], "13": 21, "n": 21, "14": 21, "o": 21, "15": 21, "p": 21, "16": 21, "q": 21, "17": 21, "r": [21, 22], "18": 21, "19": 21, "t": 21, "20": 21, "u": 21, "21": 21, "v": 21, "22": 21, "w": 21, "23": [21, 22], "x": [21, 22], "24": 21, "y": [21, 22], "25": 21, "z": [21, 22], "26": 21, "27": 21, "28": 21, "29": 21, "30": 21, "31": 21, "32": 21, "33": 21, "34": 21, "35": 21, "36": 21, "37": 21, "38": 21, "39": 21, "40": 21, "41": 21, "42": 21, "43": 21, "44": 21, "45": 21, "46": 21, "47": 21, "48": 21, "49": 21, "50": 21, "51": 21, "52": 21, "53": 21, "54": 21, "55": 21, "56": 21, "57": 21, "58": 21, "59": 21, "60": 21, "61": 21, "62": 21, "0123456789": 21, "cipher": 22, "util": 22, "develop": 22, "python": 22, "code": 22, "The": 22, "readm": 22, "introduc": 22, "modul": [22, 23], "provid": 22, "instruct": 22, "how": 22, "machin": 22, "mai": 22, "other": 22, "inform": 22, "befor": 22, "ar": 22, "subpackag": [22, 23], "next": 22, "environ": 22, "navig": 22, "releas": 22, "page": 22, "download": 22, "extract": 22, "archiv": 22, "To": 22, "follow": 22, "tar": 22, "xvzf": 22, "gz": 22, "cd": 22, "pyton3": 22, "pip3": 22, "requir": 22, "txt": 22, "python3": 22, "build": 22, "isol": 22, "wheel": 22, "py3": 22, "whl": 22, "old": 22, "fashion": 22, "wai": 22, "setup": 22, "install_lib": 22, "install_egg_info": 22, "docker": 22, "imag": 22, "pip": 22, "librari": 22, "oop": 22, "directori": 22, "file": 22, "electux": 22, "github": 22, "io": 22, "same": 22, "itself": 22, "avail": 22, "let": 22, "help": 22, "psf": 22, "search": 22, "packag": 23, "content": 23}, "objects": {"": [[0, 0, 0, "-", "codecipher"]], "codecipher": [[1, 0, 0, "-", "a1z52n62"], [4, 0, 0, "-", "atbs"], [8, 0, 0, "-", "b64"], [11, 0, 0, "-", "caesar"], [14, 0, 0, "-", "vernam"], [17, 0, 0, "-", "vigenere"]], "codecipher.a1z52n62": [[1, 1, 1, "", "A1z52N62"], [2, 0, 0, "-", "decode"], [3, 0, 0, "-", "encode"]], "codecipher.a1z52n62.decode": [[2, 1, 1, "", "A1z52N62Decode"]], "codecipher.a1z52n62.decode.A1z52N62Decode": [[2, 2, 1, "", "_decode_data"], [2, 3, 1, "", "decode"], [2, 4, 1, "", "decode_data"]], "codecipher.a1z52n62.encode": [[3, 1, 1, "", "A1z52N62Encode"]], "codecipher.a1z52n62.encode.A1z52N62Encode": [[3, 2, 1, "", "_encode_data"], [3, 3, 1, "", "encode"], [3, 4, 1, "", "encode_data"]], "codecipher.atbs": [[4, 1, 1, "", "AlephTawBetShin"], [5, 0, 0, "-", "decode"], [6, 0, 0, "-", "encode"], [7, 0, 0, "-", "lookup_table"]], "codecipher.atbs.decode": [[5, 1, 1, "", "AlephTawBetShinDecode"]], "codecipher.atbs.decode.AlephTawBetShinDecode": [[5, 2, 1, "", "_decode_data"], [5, 3, 1, "", "decode"], [5, 4, 1, "", "decode_data"]], "codecipher.atbs.encode": [[6, 1, 1, "", "AlephTawBetShinEncode"]], "codecipher.atbs.encode.AlephTawBetShinEncode": [[6, 2, 1, "", "_encode_data"], [6, 3, 1, "", "encode"], [6, 4, 1, "", "encode_data"]], "codecipher.b64": [[8, 1, 1, "", "B64"], [9, 0, 0, "-", "decode"], [10, 0, 0, "-", "encode"]], "codecipher.b64.decode": [[9, 1, 1, "", "B64Decode"]], "codecipher.b64.decode.B64Decode": [[9, 2, 1, "", "_decode_data"], [9, 3, 1, "", "decode"], [9, 4, 1, "", "decode_data"]], "codecipher.b64.encode": [[10, 1, 1, "", "B64Encode"]], "codecipher.b64.encode.B64Encode": [[10, 2, 1, "", "_encode_data"], [10, 3, 1, "", "encode"], [10, 4, 1, "", "encode_data"]], "codecipher.caesar": [[11, 1, 1, "", "Caesar"], [12, 0, 0, "-", "decode"], [13, 0, 0, "-", "encode"]], "codecipher.caesar.decode": [[12, 1, 1, "", "CaesarDecode"]], "codecipher.caesar.decode.CaesarDecode": [[12, 2, 1, "", "_decode_data"], [12, 3, 1, "", "decode"], [12, 4, 1, "", "decode_data"]], "codecipher.caesar.encode": [[13, 1, 1, "", "CaesarEncode"]], "codecipher.caesar.encode.CaesarEncode": [[13, 2, 1, "", "_encode_data"], [13, 3, 1, "", "encode"], [13, 4, 1, "", "encode_data"]], "codecipher.vernam": [[14, 1, 1, "", "Vernam"], [15, 0, 0, "-", "decode"], [16, 0, 0, "-", "encode"]], "codecipher.vernam.decode": [[15, 1, 1, "", "VernamDecode"]], "codecipher.vernam.decode.VernamDecode": [[15, 2, 1, "", "_decode_data"], [15, 3, 1, "", "decode"], [15, 4, 1, "", "decode_data"]], "codecipher.vernam.encode": [[16, 1, 1, "", "VernamEncode"]], "codecipher.vernam.encode.VernamEncode": [[16, 2, 1, "", "_encode_data"], [16, 3, 1, "", "encode"], [16, 4, 1, "", "encode_data"]], "codecipher.vigenere": [[17, 1, 1, "", "Vigenere"], [18, 0, 0, "-", "decode"], [19, 0, 0, "-", "encode"], [20, 0, 0, "-", "key_generator"], [21, 0, 0, "-", "lookup_table"]], "codecipher.vigenere.decode": [[18, 1, 1, "", "VigenereDecode"]], "codecipher.vigenere.decode.VigenereDecode": [[18, 2, 1, "", "_decode_data"], [18, 3, 1, "", "_split_data_decode"], [18, 3, 1, "", "decode"], [18, 4, 1, "", "decode_data"]], "codecipher.vigenere.encode": [[19, 1, 1, "", "VigenereEncode"]], "codecipher.vigenere.encode.VigenereEncode": [[19, 2, 1, "", "_encode_data"], [19, 3, 1, "", "_split_data_encode"], [19, 3, 1, "", "encode"], [19, 4, 1, "", "encode_data"]], "codecipher.vigenere.key_generator": [[20, 1, 1, "", "KeyGenerator"]], "codecipher.vigenere.key_generator.KeyGenerator": [[20, 2, 1, "", "_data_len"], [20, 2, 1, "", "_key"], [20, 4, 1, "", "data_len"], [20, 3, 1, "", "generate_key"], [20, 4, 1, "", "key"]], "codecipher.vigenere.lookup_table": [[21, 1, 1, "", "LookUpTable"]], "codecipher.vigenere.lookup_table.LookUpTable": [[21, 2, 1, "", "ALPHA"], [21, 2, 1, "", "ALPHANUM"], [21, 2, 1, "", "INDEX_TO_LETTER"], [21, 2, 1, "", "LETTER_TO_INDEX"], [21, 2, 1, "", "NUM"], [21, 2, 1, "", "WHITE_SPACE"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"]}, "titleterms": {"codeciph": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "packag": [0, 1, 4, 8, 11, 14, 17, 22], "subpackag": 0, "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "content": [0, 1, 4, 8, 11, 14, 17, 22], "a1z52n62": [1, 2, 3], "submodul": [1, 4, 8, 11, 14, 17], "decod": [2, 5, 9, 12, 15, 18], "encod": [3, 6, 10, 13, 16, 19], "atb": [4, 5, 6, 7], "lookup_t": [7, 21], "b64": [8, 9, 10], "caesar": [11, 12, 13], "vernam": [14, 15, 16], "vigener": [17, 18, 19, 20, 21], "key_gener": 20, "instal": 22, "depend": 22, "structur": 22, "copyright": 22, "licenc": 22, "indic": 22, "tabl": 22}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"codecipher package": [[0, "codecipher-package"]], "Subpackages": [[0, "subpackages"]], "Module contents": [[0, "module-codecipher"], [1, "module-codecipher.a1z52n62"], [4, "module-codecipher.atbs"], [8, "module-codecipher.b64"], [11, "module-codecipher.caesar"], [14, "module-codecipher.vernam"], [17, "module-codecipher.vigenere"]], "codecipher.a1z52n62 package": [[1, "codecipher-a1z52n62-package"]], "Submodules": [[1, "submodules"], [4, "submodules"], [8, "submodules"], [11, "submodules"], [14, "submodules"], [17, "submodules"]], "codecipher.a1z52n62.decode module": [[2, "module-codecipher.a1z52n62.decode"]], "codecipher.a1z52n62.encode module": [[3, "module-codecipher.a1z52n62.encode"]], "codecipher.atbs package": [[4, "codecipher-atbs-package"]], "codecipher.atbs.decode module": [[5, "module-codecipher.atbs.decode"]], "codecipher.atbs.encode module": [[6, "module-codecipher.atbs.encode"]], "codecipher.atbs.lookup_table module": [[7, "module-codecipher.atbs.lookup_table"]], "codecipher.b64 package": [[8, "codecipher-b64-package"]], "codecipher.b64.decode module": [[9, "module-codecipher.b64.decode"]], "codecipher.b64.encode module": [[10, "module-codecipher.b64.encode"]], "codecipher.caesar package": [[11, "codecipher-caesar-package"]], "codecipher.caesar.decode module": [[12, "module-codecipher.caesar.decode"]], "codecipher.caesar.encode module": [[13, "module-codecipher.caesar.encode"]], "codecipher.vernam package": [[14, "codecipher-vernam-package"]], "codecipher.vernam.decode module": [[15, "module-codecipher.vernam.decode"]], "codecipher.vernam.encode module": [[16, "module-codecipher.vernam.encode"]], "codecipher.vigenere package": [[17, "codecipher-vigenere-package"]], "codecipher.vigenere.decode module": [[18, "module-codecipher.vigenere.decode"]], "codecipher.vigenere.encode module": [[19, "module-codecipher.vigenere.encode"]], "codecipher.vigenere.key_generator module": [[20, "module-codecipher.vigenere.key_generator"]], "codecipher.vigenere.lookup_table module": [[21, "module-codecipher.vigenere.lookup_table"]], "CODECipher": [[22, "codecipher"]], "Contents": [[22, null]], "Installation": [[22, "installation"]], "Dependencies": [[22, "dependencies"]], "Package structure": [[22, "package-structure"]], "Copyright and licence": [[22, "copyright-and-licence"]], "Indices and tables": [[22, "indices-and-tables"]], "codecipher": [[23, "codecipher"]]}, "indexentries": {"codecipher": [[0, "module-codecipher"]], "module": [[0, "module-codecipher"], [1, "module-codecipher.a1z52n62"], [2, "module-codecipher.a1z52n62.decode"], [3, "module-codecipher.a1z52n62.encode"], [4, "module-codecipher.atbs"], [5, "module-codecipher.atbs.decode"], [6, "module-codecipher.atbs.encode"], [7, "module-codecipher.atbs.lookup_table"], [8, "module-codecipher.b64"], [9, "module-codecipher.b64.decode"], [10, "module-codecipher.b64.encode"], [11, "module-codecipher.caesar"], [12, "module-codecipher.caesar.decode"], [13, "module-codecipher.caesar.encode"], [14, "module-codecipher.vernam"], [15, "module-codecipher.vernam.decode"], [16, "module-codecipher.vernam.encode"], [17, "module-codecipher.vigenere"], [18, "module-codecipher.vigenere.decode"], [19, "module-codecipher.vigenere.encode"], [20, "module-codecipher.vigenere.key_generator"], [21, "module-codecipher.vigenere.lookup_table"]], "a1z52n62 (class in codecipher.a1z52n62)": [[1, "codecipher.a1z52n62.A1z52N62"]], "codecipher.a1z52n62": [[1, "module-codecipher.a1z52n62"]], "a1z52n62decode (class in codecipher.a1z52n62.decode)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode"]], "_decode_data (codecipher.a1z52n62.decode.a1z52n62decode attribute)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode._decode_data"]], "codecipher.a1z52n62.decode": [[2, "module-codecipher.a1z52n62.decode"]], "decode() (codecipher.a1z52n62.decode.a1z52n62decode method)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode.decode"]], "decode_data (codecipher.a1z52n62.decode.a1z52n62decode property)": [[2, "codecipher.a1z52n62.decode.A1z52N62Decode.decode_data"]], "a1z52n62encode (class in codecipher.a1z52n62.encode)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode"]], "_encode_data (codecipher.a1z52n62.encode.a1z52n62encode attribute)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode._encode_data"]], "codecipher.a1z52n62.encode": [[3, "module-codecipher.a1z52n62.encode"]], "encode() (codecipher.a1z52n62.encode.a1z52n62encode method)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode.encode"]], "encode_data (codecipher.a1z52n62.encode.a1z52n62encode property)": [[3, "codecipher.a1z52n62.encode.A1z52N62Encode.encode_data"]], "alephtawbetshin (class in codecipher.atbs)": [[4, "codecipher.atbs.AlephTawBetShin"]], "codecipher.atbs": [[4, "module-codecipher.atbs"]], "alephtawbetshindecode (class in codecipher.atbs.decode)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode"]], "_decode_data (codecipher.atbs.decode.alephtawbetshindecode attribute)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode._decode_data"]], "codecipher.atbs.decode": [[5, "module-codecipher.atbs.decode"]], "decode() (codecipher.atbs.decode.alephtawbetshindecode method)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode.decode"]], "decode_data (codecipher.atbs.decode.alephtawbetshindecode property)": [[5, "codecipher.atbs.decode.AlephTawBetShinDecode.decode_data"]], "alephtawbetshinencode (class in codecipher.atbs.encode)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode"]], "_encode_data (codecipher.atbs.encode.alephtawbetshinencode attribute)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode._encode_data"]], "codecipher.atbs.encode": [[6, "module-codecipher.atbs.encode"]], "encode() (codecipher.atbs.encode.alephtawbetshinencode method)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode.encode"]], "encode_data (codecipher.atbs.encode.alephtawbetshinencode property)": [[6, "codecipher.atbs.encode.AlephTawBetShinEncode.encode_data"]], "codecipher.atbs.lookup_table": [[7, "module-codecipher.atbs.lookup_table"]], "b64 (class in codecipher.b64)": [[8, "codecipher.b64.B64"]], "codecipher.b64": [[8, "module-codecipher.b64"]], "b64decode (class in codecipher.b64.decode)": [[9, "codecipher.b64.decode.B64Decode"]], "_decode_data (codecipher.b64.decode.b64decode attribute)": [[9, "codecipher.b64.decode.B64Decode._decode_data"]], "codecipher.b64.decode": [[9, "module-codecipher.b64.decode"]], "decode() (codecipher.b64.decode.b64decode method)": [[9, "codecipher.b64.decode.B64Decode.decode"]], "decode_data (codecipher.b64.decode.b64decode property)": [[9, "codecipher.b64.decode.B64Decode.decode_data"]], "b64encode (class in codecipher.b64.encode)": [[10, "codecipher.b64.encode.B64Encode"]], "_encode_data (codecipher.b64.encode.b64encode attribute)": [[10, "codecipher.b64.encode.B64Encode._encode_data"]], "codecipher.b64.encode": [[10, "module-codecipher.b64.encode"]], "encode() (codecipher.b64.encode.b64encode method)": [[10, "codecipher.b64.encode.B64Encode.encode"]], "encode_data (codecipher.b64.encode.b64encode property)": [[10, "codecipher.b64.encode.B64Encode.encode_data"]], "caesar (class in codecipher.caesar)": [[11, "codecipher.caesar.Caesar"]], "codecipher.caesar": [[11, "module-codecipher.caesar"]], "caesardecode (class in codecipher.caesar.decode)": [[12, "codecipher.caesar.decode.CaesarDecode"]], "_decode_data (codecipher.caesar.decode.caesardecode attribute)": [[12, "codecipher.caesar.decode.CaesarDecode._decode_data"]], "codecipher.caesar.decode": [[12, "module-codecipher.caesar.decode"]], "decode() (codecipher.caesar.decode.caesardecode method)": [[12, "codecipher.caesar.decode.CaesarDecode.decode"]], "decode_data (codecipher.caesar.decode.caesardecode property)": [[12, "codecipher.caesar.decode.CaesarDecode.decode_data"]], "caesarencode (class in codecipher.caesar.encode)": [[13, "codecipher.caesar.encode.CaesarEncode"]], "_encode_data (codecipher.caesar.encode.caesarencode attribute)": [[13, "codecipher.caesar.encode.CaesarEncode._encode_data"]], "codecipher.caesar.encode": [[13, "module-codecipher.caesar.encode"]], "encode() (codecipher.caesar.encode.caesarencode method)": [[13, "codecipher.caesar.encode.CaesarEncode.encode"]], "encode_data (codecipher.caesar.encode.caesarencode property)": [[13, "codecipher.caesar.encode.CaesarEncode.encode_data"]], "vernam (class in codecipher.vernam)": [[14, "codecipher.vernam.Vernam"]], "codecipher.vernam": [[14, "module-codecipher.vernam"]], "vernamdecode (class in codecipher.vernam.decode)": [[15, "codecipher.vernam.decode.VernamDecode"]], "_decode_data (codecipher.vernam.decode.vernamdecode attribute)": [[15, "codecipher.vernam.decode.VernamDecode._decode_data"]], "codecipher.vernam.decode": [[15, "module-codecipher.vernam.decode"]], "decode() (codecipher.vernam.decode.vernamdecode method)": [[15, "codecipher.vernam.decode.VernamDecode.decode"]], "decode_data (codecipher.vernam.decode.vernamdecode property)": [[15, "codecipher.vernam.decode.VernamDecode.decode_data"]], "vernamencode (class in codecipher.vernam.encode)": [[16, "codecipher.vernam.encode.VernamEncode"]], "_encode_data (codecipher.vernam.encode.vernamencode attribute)": [[16, "codecipher.vernam.encode.VernamEncode._encode_data"]], "codecipher.vernam.encode": [[16, "module-codecipher.vernam.encode"]], "encode() (codecipher.vernam.encode.vernamencode method)": [[16, "codecipher.vernam.encode.VernamEncode.encode"]], "encode_data (codecipher.vernam.encode.vernamencode property)": [[16, "codecipher.vernam.encode.VernamEncode.encode_data"]], "vigenere (class in codecipher.vigenere)": [[17, "codecipher.vigenere.Vigenere"]], "codecipher.vigenere": [[17, "module-codecipher.vigenere"]], "vigeneredecode (class in codecipher.vigenere.decode)": [[18, "codecipher.vigenere.decode.VigenereDecode"]], "_decode_data (codecipher.vigenere.decode.vigeneredecode attribute)": [[18, "codecipher.vigenere.decode.VigenereDecode._decode_data"]], "_split_data_decode() (codecipher.vigenere.decode.vigeneredecode method)": [[18, "codecipher.vigenere.decode.VigenereDecode._split_data_decode"]], "codecipher.vigenere.decode": [[18, "module-codecipher.vigenere.decode"]], "decode() (codecipher.vigenere.decode.vigeneredecode method)": [[18, "codecipher.vigenere.decode.VigenereDecode.decode"]], "decode_data (codecipher.vigenere.decode.vigeneredecode property)": [[18, "codecipher.vigenere.decode.VigenereDecode.decode_data"]], "vigenereencode (class in codecipher.vigenere.encode)": [[19, "codecipher.vigenere.encode.VigenereEncode"]], "_encode_data (codecipher.vigenere.encode.vigenereencode attribute)": [[19, "codecipher.vigenere.encode.VigenereEncode._encode_data"]], "_split_data_encode() (codecipher.vigenere.encode.vigenereencode method)": [[19, "codecipher.vigenere.encode.VigenereEncode._split_data_encode"]], "codecipher.vigenere.encode": [[19, "module-codecipher.vigenere.encode"]], "encode() (codecipher.vigenere.encode.vigenereencode method)": [[19, "codecipher.vigenere.encode.VigenereEncode.encode"]], "encode_data (codecipher.vigenere.encode.vigenereencode property)": [[19, "codecipher.vigenere.encode.VigenereEncode.encode_data"]], "keygenerator (class in codecipher.vigenere.key_generator)": [[20, "codecipher.vigenere.key_generator.KeyGenerator"]], "_data_len (codecipher.vigenere.key_generator.keygenerator attribute)": [[20, "codecipher.vigenere.key_generator.KeyGenerator._data_len"]], "_key (codecipher.vigenere.key_generator.keygenerator attribute)": [[20, "codecipher.vigenere.key_generator.KeyGenerator._key"]], "codecipher.vigenere.key_generator": [[20, "module-codecipher.vigenere.key_generator"]], "data_len (codecipher.vigenere.key_generator.keygenerator property)": [[20, "codecipher.vigenere.key_generator.KeyGenerator.data_len"]], "generate_key() (codecipher.vigenere.key_generator.keygenerator method)": [[20, "codecipher.vigenere.key_generator.KeyGenerator.generate_key"]], "key (codecipher.vigenere.key_generator.keygenerator property)": [[20, "codecipher.vigenere.key_generator.KeyGenerator.key"]], "alpha (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.ALPHA"]], "alphanum (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.ALPHANUM"]], "index_to_letter (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.INDEX_TO_LETTER"]], "letter_to_index (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.LETTER_TO_INDEX"]], "lookuptable (class in codecipher.vigenere.lookup_table)": [[21, "codecipher.vigenere.lookup_table.LookUpTable"]], "num (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.NUM"]], "white_space (codecipher.vigenere.lookup_table.lookuptable attribute)": [[21, "codecipher.vigenere.lookup_table.LookUpTable.WHITE_SPACE"]], "codecipher.vigenere.lookup_table": [[21, "module-codecipher.vigenere.lookup_table"]]}}) \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index ebdd81c..e82b3ad 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -4,7 +4,7 @@ Module conf.py Copyright - Copyright (C) 2021-2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -27,9 +27,9 @@ sys.path.insert(0, os.path.abspath('../../')) project: str = 'codecipher' -project_copyright: str = '2024, Vladimir Roncevic ' +project_copyright: str = '2025, Vladimir Roncevic ' author: str = 'Vladimir Roncevic ' -version: str = '1.4.7' +version: str = '1.4.8' release: str = 'https://github.com/electux/codecipher/releases' extensions: List[str] = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] templates_path: List[str] = ['_templates'] diff --git a/docs/source/index.rst b/docs/source/index.rst index 45179ba..f6049b7 100755 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -136,7 +136,7 @@ Copyright and licence .. |license: apache 2.0| image:: https://img.shields.io/badge/license-apache%202.0-blue.svg :target: https://opensource.org/licenses/apache-2.0 -Copyright (C) 2021 - 2024 by `electux.github.io/codecipher `_ +Copyright (C) 2021 - 2025 by `electux.github.io/codecipher `_ **codecipher** is free software; you can redistribute it and/or modify it under the same terms as Python itself, either Python version 3.x or, diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index bc3b797..0000000 --- a/setup.cfg +++ /dev/null @@ -1,44 +0,0 @@ -# -# Module -# setup.cfg -# Copyright -# Copyright (C) 2021 - 2024 Vladimir Roncevic -# codecipher is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# codecipher is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# Info -# Defines setup for package codecipher. -# - -[metadata] -name = codecipher -version = 1.4.7 -author = Vladimir Roncevic -author_email = elektron.ronca@gmail.com -description = Python Cipher Utilities -license=GPL 2024 Free software to use and distributed it. -long_description = file: README.md -long_description_content_type = text/markdown -keywords=cipher, encryption, decryption, cryptology, cryptography -platforms = any -url = https://electux.github.io/codecipher -classifiers = - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2) - License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) - License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) - License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+) - License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) - Operating System :: OS Independent - -[options] -packages = find: -python_requires = >=3.10 diff --git a/setup.py b/setup.py index 8c42eb8..faa4cea 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ Module setup.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -25,44 +25,37 @@ from os.path import abspath, dirname, join from setuptools import setup -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/main/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' THIS_DIR: str = abspath(dirname(__file__)) long_description: Optional[str] = None with open(join(THIS_DIR, 'README.md'), encoding='utf-8') as readme: long_description = readme.read() PROGRAMMING_LANG: str = 'Programming Language :: Python ::' -VERSIONS: List[str] = ['3.10', '3.11'] +VERSIONS: List[str] = ['3.10', '3.11', '3.12'] SUPPORTED_PY_VERSIONS: List[str] = [ f'{PROGRAMMING_LANG} {VERSION}' for VERSION in VERSIONS ] LICENSE_PREFIX: str = 'License :: OSI Approved ::' LICENSES: List[str] = [ - 'GNU Lesser General Public License v2 (LGPLv2)', - 'GNU Lesser General Public License v2 or later (LGPLv2+)', - 'GNU Lesser General Public License v3 (LGPLv3)', 'GNU Lesser General Public License v3 or later (LGPLv3+)', - 'GNU Library or Lesser General Public License (LGPL)' ] -APPROVED_LICENSES: List[str] = [ - f'{LICENSE_PREFIX} {LICENSE}' for LICENSE in LICENSES -] -PYP_CLASSIFIERS: List[str] = SUPPORTED_PY_VERSIONS + APPROVED_LICENSES +PYP_CLASSIFIERS: List[str] = SUPPORTED_PY_VERSIONS setup( name='codecipher', - version='1.4.7', + version='1.4.8', description='Python Cipher Utilities', author='Vladimir Roncevic', author_email='elektron.ronca@gmail.com', url='https://electux.github.io/codecipher', - license='GPL 2024 Free software to use and distributed it.', + license='GPL-3.0-or-later', long_description=long_description, long_description_content_type='text/markdown', keywords='cipher, encryption, decryption, cryptology, cryptography', diff --git a/tests/.coverage b/tests/.coverage index fd8474b..d58f3cd 100644 Binary files a/tests/.coverage and b/tests/.coverage differ diff --git a/tests/a1z52n62_test.py b/tests/a1z52n62_test.py index 707fbb7..5fee0c4 100644 --- a/tests/a1z52n62_test.py +++ b/tests/a1z52n62_test.py @@ -4,7 +4,7 @@ Module a1z52n62_test.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -32,14 +32,14 @@ # Force close python test ################################################# sys.exit(f'\n{__file__}\n{test_error_message}\n') -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/dev/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/dev/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class A1z52N62TestCase(unittest.TestCase): diff --git a/tests/atbs_test.py b/tests/atbs_test.py index 2b191cc..47ec2c6 100644 --- a/tests/atbs_test.py +++ b/tests/atbs_test.py @@ -4,7 +4,7 @@ Module atbs_test.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -32,14 +32,14 @@ # Force close python test ################################################# sys.exit(f'\n{__file__}\n{test_error_message}\n') -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/dev/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/dev/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class AlephTawBetShinTestCase(unittest.TestCase): diff --git a/tests/ats_coverage.py b/tests/ats_coverage.py new file mode 100644 index 0000000..1db4607 --- /dev/null +++ b/tests/ats_coverage.py @@ -0,0 +1,215 @@ +# -*- coding: UTF-8 -*- + +''' +Module + ats_coverage.py +Copyright + Copyright (C) 2025 Vladimir Roncevic + ats_coverage is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + ats_coverage is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along + with this program. If not, see . +Info + Defines attribute(s) and method(s) for coverage support. +''' + +import sys +from typing import Any, Dict, List, Optional +from os.path import exists, basename +from json import load +from unittest import TestLoader, TestSuite, TextTestRunner +from argparse import Namespace + +try: + from pathlib import Path + from ats_utilities.checker import ATSChecker + from ats_utilities.console_io.success import success_message + from ats_utilities.console_io.error import error_message + from ats_utilities.option import ATSOptionParser + from ats_utilities.exceptions.ats_type_error import ATSTypeError + from ats_utilities.exceptions.ats_file_error import ATSFileError + from coverage import Coverage +except ImportError as ats_error_message: # pragma: no cover + # Force exit python ####################################################### + sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover + +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://vroncevic.github.io/ats_coverage' +__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] +__license__: str = 'https://github.com/vroncevic/ats_coverage/blob/dev/LICENSE' +__version__: str = '1.0.0' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' + + +def run_coverage(pro_name: str) -> str: + ''' + Runs coverage for project and generates report. + + :param pro_name: Project name + :type pro_name: + :exceptions: ATSTypeError | ATSFileError + ''' + checker: ATSChecker = ATSChecker() + error_msg: Optional[str] = None + error_id: Optional[int] = None + error_msg, error_id = checker.check_params([('str:pro_name', pro_name)]) + if error_id == checker.TYPE_ERROR: + raise ATSTypeError(error_msg) + if not exists(f'../{pro_name}'): + raise ATSFileError(f'missing ../{pro_name}') + cov = Coverage(source=[f'../{pro_name}']) + cov.start() + tests: TestSuite = TestLoader().discover('.', pattern='*_test.py') + test_runner = TextTestRunner(verbosity=2) + test_runner.run(tests) + cov.stop() + cov.save() + report_file_name: str = f'{pro_name}_coverage.json' + cov.json_report(outfile=report_file_name) + success_message([f'\nats_coverage: generated coverage {report_file_name}']) + return report_file_name + + +def load_report(report_file_path: str) -> Dict[str, Any]: + ''' + Loads report from report file. + + :param report_file_path: Report file path + :type report_file_path: + :exceptions: ATSTypeError | ATSFileError + ''' + checker: ATSChecker = ATSChecker() + error_msg: Optional[str] = None + error_id: Optional[int] = None + error_msg, error_id = checker.check_params([( + 'str:report_file_path', report_file_path + )]) + if error_id == checker.TYPE_ERROR: + raise ATSTypeError(error_msg) + if not exists(report_file_path): + raise ATSFileError(f'{report_file_path} does not exist.') + data: Dict[str, Any] = {} + with open(report_file_path, 'r', encoding='utf-8') as loaded_file: + data = load(loaded_file) + return data + + +def find_root_package(module_path: str) -> Optional[Path]: + ''' + Finds root package for project structure. + + :param module_path: Absolute path + :type module_path: + :exceptions: ATSTypeError + ''' + checker: ATSChecker = ATSChecker() + error_msg: Optional[str] = None + error_id: Optional[int] = None + error_msg, error_id = checker.check_params([( + 'str:module_path', module_path + )]) + if error_id == checker.TYPE_ERROR: + raise ATSTypeError(error_msg) + root: Optional[Path] = None + path: Path = Path(module_path).resolve() + while path.parent != path: + if (path / '__init__.py').exists(): + root = path + path = path.parent + return root + + +def update_readme(coverage: Dict[str, Any]) -> None: + ''' + Updates README.md file with code coverage report table. + + :param coverage: Coverage data report + :type coverage: + :exceptions: ATSTypeError + ''' + checker: ATSChecker = ATSChecker() + error_msg: Optional[str] = None + error_id: Optional[int] = None + error_msg, error_id = checker.check_params([('dict:coverage', coverage)]) + if error_id == checker.TYPE_ERROR: + raise ATSTypeError(error_msg) + readme_path: str = '../README.md' + start_marker: str = '### Code coverage' + end_marker: str = '### Docs' + lines: List[str] = [] + with open(readme_path, 'r', encoding='utf-8') as current_file: + lines = current_file.readlines() + new_lines: List[str] = [] + inside_block: bool = False + stmts: str = 'num_statements' + miss: str = 'missing_lines' + cover: str = 'percent_covered_display' + for line in lines: + if start_marker in line: + inside_block = True + new_lines.append(line) + new_lines.append('\n') + new_lines.append('| Name | Stmts | Miss | Cover |\n') + new_lines.append('|------|-------|------|-------|\n') + file_names: List[str] = coverage['files'] + for name in file_names: + root_package: Optional[Path] = find_root_package(name) + module: str = '' + if name.startswith(str(root_package)): + result: str = name[len(str(root_package)):] + result = result.lstrip('/') + module = f'{basename(str(root_package))}/{result}' + file_summary: Dict[str, Any] = coverage['files'][name] + statements: str = file_summary['summary'][stmts] + missing: str = file_summary['summary'][miss] + covered: str = file_summary['summary'][cover] + new_lines.append( + f'| `{module}` | {statements} | {missing} | {covered}%|\n' + ) + total: str = '| **Total** |' + total_statements: str = coverage['totals'][stmts] + total_missing: str = coverage['totals'][miss] + total_covered: str = coverage['totals'][cover] + total += f' {total_statements} |' + total += f' {total_missing} |' + total += f' {total_covered}% |\n' + new_lines.append(total) + continue + elif end_marker in line: + inside_block = False + new_lines.append('\n') + new_lines.append(line) + continue + if not inside_block: + new_lines.append(line) + with open(readme_path, 'w', encoding='utf-8') as update_file: + update_file.writelines(new_lines) + + +if __name__ == "__main__": + cli: ATSOptionParser = ATSOptionParser( + 'ats_coverage 2025', '1.0.0', 'GPLv3', False + ) + cli.add_operation( + '-n', '--name', dest='name', + help='generate coverage report for project (provide name)' + ) + args: Namespace = cli.parse_args(sys.argv) + if not bool(getattr(args, "name")): + error_message(['ats_coverage: missing name argument']) + sys.exit(127) + try: + pro_report_file: str = f'{getattr(args, "name")}_coverage.json' + report_data: Dict[str, Any] = load_report(pro_report_file) + update_readme(report_data) + except (ATSTypeError, ATSFileError) as e: + error_message([f'ats_coverage: {e}']) + sys.exit(128) diff --git a/tests/b64_test.py b/tests/b64_test.py index 6a12627..cb419dd 100644 --- a/tests/b64_test.py +++ b/tests/b64_test.py @@ -4,7 +4,7 @@ Module b64_test.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -32,14 +32,14 @@ # Force close python test ################################################# sys.exit(f'\n{__file__}\n{test_error_message}\n') -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/dev/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/dev/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class B64TestCase(unittest.TestCase): diff --git a/tests/caesar_test.py b/tests/caesar_test.py index d764bfd..3588751 100644 --- a/tests/caesar_test.py +++ b/tests/caesar_test.py @@ -4,7 +4,7 @@ Module caesar_test.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -32,14 +32,14 @@ # Force close python test ################################################# sys.exit(f'\n{__file__}\n{test_error_message}\n') -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/dev/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/dev/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class CaesarTestCase(unittest.TestCase): diff --git a/tests/codecipher_coverage.json b/tests/codecipher_coverage.json new file mode 100644 index 0000000..aa2784d --- /dev/null +++ b/tests/codecipher_coverage.json @@ -0,0 +1 @@ +{"meta": {"format": 3, "version": "7.6.10", "timestamp": "2025-11-01T07:55:09.848059", "branch_coverage": false, "show_contexts": false}, "files": {"/data/dev/python/codecipher/github/codecipher/codecipher/__init__.py": {"executed_lines": [3], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56, 62], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31], "functions": {"A1z52N62.__init__": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"A1z52N62": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 62, 64, 65, 77, 86, 87, 88, 89, 90, 91, 92, 94, 96, 98, 99], "summary": {"covered_lines": 30, "num_statements": 32, "percent_covered": 93.75, "percent_covered_display": "94", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": [], "functions": {"A1z52N62Decode.decode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "A1z52N62Decode.decode": {"executed_lines": [86, 87, 88, 89, 90, 91, 92, 94, 96, 98, 99], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"A1z52N62Decode": {"executed_lines": [62, 86, 87, 88, 89, 90, 91, 92, 94, 96, 98, 99], "summary": {"covered_lines": 12, "num_statements": 14, "percent_covered": 85.71428571428571, "percent_covered_display": "86", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 62, 64, 65, 77, 86, 87, 88, 89, 90, 91, 93, 95, 96, 98, 99], "summary": {"covered_lines": 30, "num_statements": 32, "percent_covered": 93.75, "percent_covered_display": "94", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": [], "functions": {"A1z52N62Encode.encode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "A1z52N62Encode.encode": {"executed_lines": [86, 87, 88, 89, 90, 91, 93, 95, 96, 98, 99], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"A1z52N62Encode": {"executed_lines": [62, 86, 87, 88, 89, 90, 91, 93, 95, 96, 98, 99], "summary": {"covered_lines": 12, "num_statements": 14, "percent_covered": 85.71428571428571, "percent_covered_display": "86", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56, 62], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31], "functions": {"AlephTawBetShin.__init__": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"AlephTawBetShin": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.py": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 58, 60, 61, 69, 71, 72, 84, 93, 94, 95, 96, 97], "summary": {"covered_lines": 27, "num_statements": 29, "percent_covered": 93.10344827586206, "percent_covered_display": "93", "missing_lines": 2, "excluded_lines": 2}, "missing_lines": [81, 82], "excluded_lines": [29, 31], "functions": {"AlephTawBetShinDecode.decode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [81, 82], "excluded_lines": []}, "AlephTawBetShinDecode.decode": {"executed_lines": [93, 94, 95, 96, 97], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 58, 60, 61, 71, 72, 84], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"AlephTawBetShinDecode": {"executed_lines": [69, 93, 94, 95, 96, 97], "summary": {"covered_lines": 6, "num_statements": 8, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [81, 82], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 58, 60, 61, 71, 72, 84], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.py": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 58, 60, 61, 69, 71, 72, 84, 93, 94, 95, 96, 97], "summary": {"covered_lines": 27, "num_statements": 29, "percent_covered": 93.10344827586206, "percent_covered_display": "93", "missing_lines": 2, "excluded_lines": 2}, "missing_lines": [81, 82], "excluded_lines": [29, 31], "functions": {"AlephTawBetShinEncode.encode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [81, 82], "excluded_lines": []}, "AlephTawBetShinEncode.encode": {"executed_lines": [93, 94, 95, 96, 97], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 58, 60, 61, 71, 72, 84], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"AlephTawBetShinEncode": {"executed_lines": [69, 93, 94, 95, 96, 97], "summary": {"covered_lines": 6, "num_statements": 8, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [81, 82], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 58, 60, 61, 71, 72, 84], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/atbs/lookup_table.py": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 33], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 33], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 33], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56, 62], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31], "functions": {"B64.__init__": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"B64": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.py": {"executed_lines": [3, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 52, 54, 55, 63, 65, 66, 78, 87, 88], "summary": {"covered_lines": 22, "num_statements": 24, "percent_covered": 91.66666666666667, "percent_covered_display": "92", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [75, 76], "excluded_lines": [], "functions": {"B64Decode.decode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [75, 76], "excluded_lines": []}, "B64Decode.decode": {"executed_lines": [87, 88], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 52, 54, 55, 65, 66, 78], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"B64Decode": {"executed_lines": [63, 87, 88], "summary": {"covered_lines": 3, "num_statements": 5, "percent_covered": 60.0, "percent_covered_display": "60", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [75, 76], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 52, 54, 55, 65, 66, 78], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.py": {"executed_lines": [3, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 52, 54, 55, 63, 65, 66, 78, 87, 88], "summary": {"covered_lines": 22, "num_statements": 24, "percent_covered": 91.66666666666667, "percent_covered_display": "92", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [75, 76], "excluded_lines": [], "functions": {"B64Encode.encode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [75, 76], "excluded_lines": []}, "B64Encode.encode": {"executed_lines": [87, 88], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 52, 54, 55, 65, 66, 78], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"B64Encode": {"executed_lines": [63, 87, 88], "summary": {"covered_lines": 3, "num_statements": 5, "percent_covered": 60.0, "percent_covered_display": "60", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [75, 76], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 52, 54, 55, 65, 66, 78], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56, 62], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31], "functions": {"Caesar.__init__": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"Caesar": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 62, 64, 65, 77, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110], "summary": {"covered_lines": 39, "num_statements": 41, "percent_covered": 95.1219512195122, "percent_covered_display": "95", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": [], "functions": {"CaesarDecode.decode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "CaesarDecode.decode": {"executed_lines": [90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CaesarDecode": {"executed_lines": [62, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110], "summary": {"covered_lines": 21, "num_statements": 23, "percent_covered": 91.30434782608695, "percent_covered_display": "91", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 62, 64, 65, 77, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110], "summary": {"covered_lines": 39, "num_statements": 41, "percent_covered": 95.1219512195122, "percent_covered_display": "95", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": [], "functions": {"CaesarEncode.encode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "CaesarEncode.encode": {"executed_lines": [90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CaesarEncode": {"executed_lines": [62, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110], "summary": {"covered_lines": 21, "num_statements": 23, "percent_covered": 91.30434782608695, "percent_covered_display": "91", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56, 62], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31], "functions": {"Vernam.__init__": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"Vernam": {"executed_lines": [62], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 56], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 62, 64, 65, 77, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 104], "summary": {"covered_lines": 34, "num_statements": 36, "percent_covered": 94.44444444444444, "percent_covered_display": "94", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": [], "functions": {"VernamDecode.decode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "VernamDecode.decode": {"executed_lines": [88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 104], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"VernamDecode": {"executed_lines": [62, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 104], "summary": {"covered_lines": 16, "num_statements": 18, "percent_covered": 88.88888888888889, "percent_covered_display": "89", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 62, 64, 65, 77, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 104], "summary": {"covered_lines": 34, "num_statements": 36, "percent_covered": 94.44444444444444, "percent_covered_display": "94", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": [], "functions": {"VernamEncode.encode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "VernamEncode.encode": {"executed_lines": [88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 104], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"VernamEncode": {"executed_lines": [62, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 104], "summary": {"covered_lines": 16, "num_statements": 18, "percent_covered": 88.88888888888889, "percent_covered_display": "89", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [74, 75], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 51, 53, 54, 64, 65, 77], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 57, 63], "summary": {"covered_lines": 17, "num_statements": 17, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [30, 32], "functions": {"Vigenere.__init__": {"executed_lines": [63], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 57], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [30, 32]}}, "classes": {"Vigenere": {"executed_lines": [63], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 57], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [30, 32]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.py": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 59, 61, 62, 70, 72, 73, 85, 99, 100, 101, 102, 103, 105, 118, 119, 120, 121, 122, 126, 129], "summary": {"covered_lines": 35, "num_statements": 37, "percent_covered": 94.5945945945946, "percent_covered_display": "95", "missing_lines": 2, "excluded_lines": 2}, "missing_lines": [82, 83], "excluded_lines": [29, 31], "functions": {"VigenereDecode.decode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [82, 83], "excluded_lines": []}, "VigenereDecode._split_data_decode": {"executed_lines": [99, 100, 101, 102, 103], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "VigenereDecode.decode": {"executed_lines": [118, 119, 120, 121, 122, 126, 129], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 59, 61, 62, 72, 73, 85, 105], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"VigenereDecode": {"executed_lines": [70, 99, 100, 101, 102, 103, 118, 119, 120, 121, 122, 126, 129], "summary": {"covered_lines": 13, "num_statements": 15, "percent_covered": 86.66666666666667, "percent_covered_display": "87", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [82, 83], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 59, 61, 62, 72, 73, 85, 105], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.py": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 59, 61, 62, 70, 72, 73, 85, 99, 100, 101, 102, 103, 105, 118, 119, 120, 121, 122, 126, 129], "summary": {"covered_lines": 35, "num_statements": 37, "percent_covered": 94.5945945945946, "percent_covered_display": "95", "missing_lines": 2, "excluded_lines": 2}, "missing_lines": [82, 83], "excluded_lines": [29, 31], "functions": {"VigenereEncode.encode_data": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [82, 83], "excluded_lines": []}, "VigenereEncode._split_data_encode": {"executed_lines": [99, 100, 101, 102, 103], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "VigenereEncode.encode": {"executed_lines": [118, 119, 120, 121, 122, 126, 129], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 59, 61, 62, 72, 73, 85, 105], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}, "classes": {"VigenereEncode": {"executed_lines": [70, 99, 100, 101, 102, 103, 118, 119, 120, 121, 122, 126, 129], "summary": {"covered_lines": 13, "num_statements": 15, "percent_covered": 86.66666666666667, "percent_covered_display": "87", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [82, 83], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 25, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 59, 61, 62, 72, 73, 85, 105], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [29, 31]}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.py": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 53, 54, 56, 57, 67, 68, 77, 78, 80, 81, 89, 91, 92, 101, 102, 104, 111, 112, 113, 114, 117, 118, 119], "summary": {"covered_lines": 35, "num_statements": 37, "percent_covered": 94.5945945945946, "percent_covered_display": "95", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [65, 115], "excluded_lines": [], "functions": {"KeyGenerator.data_len": {"executed_lines": [77, 78], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "KeyGenerator.key": {"executed_lines": [101, 102], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "KeyGenerator.generate_key": {"executed_lines": [111, 112, 113, 114, 117, 118, 119], "summary": {"covered_lines": 7, "num_statements": 8, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [115], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 53, 54, 56, 57, 67, 68, 80, 81, 91, 92, 104], "summary": {"covered_lines": 23, "num_statements": 23, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"KeyGenerator": {"executed_lines": [77, 78, 89, 101, 102, 111, 112, 113, 114, 117, 118, 119], "summary": {"covered_lines": 12, "num_statements": 14, "percent_covered": 85.71428571428571, "percent_covered_display": "86", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [65, 115], "excluded_lines": []}, "": {"executed_lines": [3, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 53, 54, 56, 57, 67, 68, 80, 81, 91, 92, 104], "summary": {"covered_lines": 23, "num_statements": 23, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.py": {"executed_lines": [3, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 53, 54, 55, 56, 57, 58], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 53, 54, 55, 56, 57, 58], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"LookUpTable": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 53, 54, 55, 56, 57, 58], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}}, "totals": {"covered_lines": 532, "num_statements": 558, "percent_covered": 95.3405017921147, "percent_covered_display": "95", "missing_lines": 26, "excluded_lines": 20}} \ No newline at end of file diff --git a/tests/codecipher_coverage.xml b/tests/codecipher_coverage.xml new file mode 100644 index 0000000..8f337c8 --- /dev/null +++ b/tests/codecipher_coverage.xml @@ -0,0 +1,705 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/htmlcov/class_index.html b/tests/htmlcov/class_index.html new file mode 100644 index 0000000..0ddaed4 --- /dev/null +++ b/tests/htmlcov/class_index.html @@ -0,0 +1,443 @@ + + + + + Coverage report + + + + + +
+
+

Coverage report: + 95% +

+ +
+ +
+ + +
+
+

+ Files + Functions + Classes +

+

+ coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fileclassstatementsmissingexcludedcoverage
/data/dev/python/codecipher/github/codecipher/codecipher/__init__.py(no class)000100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.pyA1z52N62100100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.py(no class)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.pyA1z52N62Decode142086%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.py(no class)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.pyA1z52N62Encode142086%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.py(no class)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.pyAlephTawBetShin100100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.py(no class)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.pyAlephTawBetShinDecode82075%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.py(no class)2102100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.pyAlephTawBetShinEncode82075%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.py(no class)2102100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/lookup_table.py(no class)1000100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.pyB64100100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.py(no class)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.pyB64Decode52060%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.py(no class)1900100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.pyB64Encode52060%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.py(no class)1900100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.pyCaesar100100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.py(no class)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.pyCaesarDecode232091%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.py(no class)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.pyCaesarEncode232091%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.py(no class)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.pyVernam100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.py(no class)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.pyVernamDecode182089%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.py(no class)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.pyVernamEncode182089%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.py(no class)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.pyVigenere100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.py(no class)1602100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.pyVigenereDecode152087%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.py(no class)2202100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.pyVigenereEncode152087%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.py(no class)2202100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.pyKeyGenerator142086%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.py(no class)2300100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.pyLookUpTable000100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.py(no class)1600100%
Total 558262095%
+

+ No items found using the specified filter. +

+
+ + + diff --git a/tests/htmlcov/coverage_html_cb_6fb7b396.js b/tests/htmlcov/coverage_html_cb_6fb7b396.js new file mode 100644 index 0000000..1face13 --- /dev/null +++ b/tests/htmlcov/coverage_html_cb_6fb7b396.js @@ -0,0 +1,733 @@ +// Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +// For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +// Coverage.py HTML report browser code. +/*jslint browser: true, sloppy: true, vars: true, plusplus: true, maxerr: 50, indent: 4 */ +/*global coverage: true, document, window, $ */ + +coverage = {}; + +// General helpers +function debounce(callback, wait) { + let timeoutId = null; + return function(...args) { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => { + callback.apply(this, args); + }, wait); + }; +}; + +function checkVisible(element) { + const rect = element.getBoundingClientRect(); + const viewBottom = Math.max(document.documentElement.clientHeight, window.innerHeight); + const viewTop = 30; + return !(rect.bottom < viewTop || rect.top >= viewBottom); +} + +function on_click(sel, fn) { + const elt = document.querySelector(sel); + if (elt) { + elt.addEventListener("click", fn); + } +} + +// Helpers for table sorting +function getCellValue(row, column = 0) { + const cell = row.cells[column] // nosemgrep: eslint.detect-object-injection + if (cell.childElementCount == 1) { + var child = cell.firstElementChild; + if (child.tagName === "A") { + child = child.firstElementChild; + } + if (child instanceof HTMLDataElement && child.value) { + return child.value; + } + } + return cell.innerText || cell.textContent; +} + +function rowComparator(rowA, rowB, column = 0) { + let valueA = getCellValue(rowA, column); + let valueB = getCellValue(rowB, column); + if (!isNaN(valueA) && !isNaN(valueB)) { + return valueA - valueB; + } + return valueA.localeCompare(valueB, undefined, {numeric: true}); +} + +function sortColumn(th) { + // Get the current sorting direction of the selected header, + // clear state on other headers and then set the new sorting direction. + const currentSortOrder = th.getAttribute("aria-sort"); + [...th.parentElement.cells].forEach(header => header.setAttribute("aria-sort", "none")); + var direction; + if (currentSortOrder === "none") { + direction = th.dataset.defaultSortOrder || "ascending"; + } + else if (currentSortOrder === "ascending") { + direction = "descending"; + } + else { + direction = "ascending"; + } + th.setAttribute("aria-sort", direction); + + const column = [...th.parentElement.cells].indexOf(th) + + // Sort all rows and afterwards append them in order to move them in the DOM. + Array.from(th.closest("table").querySelectorAll("tbody tr")) + .sort((rowA, rowB) => rowComparator(rowA, rowB, column) * (direction === "ascending" ? 1 : -1)) + .forEach(tr => tr.parentElement.appendChild(tr)); + + // Save the sort order for next time. + if (th.id !== "region") { + let th_id = "file"; // Sort by file if we don't have a column id + let current_direction = direction; + const stored_list = localStorage.getItem(coverage.INDEX_SORT_STORAGE); + if (stored_list) { + ({th_id, direction} = JSON.parse(stored_list)) + } + localStorage.setItem(coverage.INDEX_SORT_STORAGE, JSON.stringify({ + "th_id": th.id, + "direction": current_direction + })); + if (th.id !== th_id || document.getElementById("region")) { + // Sort column has changed, unset sorting by function or class. + localStorage.setItem(coverage.SORTED_BY_REGION, JSON.stringify({ + "by_region": false, + "region_direction": current_direction + })); + } + } + else { + // Sort column has changed to by function or class, remember that. + localStorage.setItem(coverage.SORTED_BY_REGION, JSON.stringify({ + "by_region": true, + "region_direction": direction + })); + } +} + +// Find all the elements with data-shortcut attribute, and use them to assign a shortcut key. +coverage.assign_shortkeys = function () { + document.querySelectorAll("[data-shortcut]").forEach(element => { + document.addEventListener("keypress", event => { + if (event.target.tagName.toLowerCase() === "input") { + return; // ignore keypress from search filter + } + if (event.key === element.dataset.shortcut) { + element.click(); + } + }); + }); +}; + +// Create the events for the filter box. +coverage.wire_up_filter = function () { + // Populate the filter and hide100 inputs if there are saved values for them. + const saved_filter_value = localStorage.getItem(coverage.FILTER_STORAGE); + if (saved_filter_value) { + document.getElementById("filter").value = saved_filter_value; + } + const saved_hide100_value = localStorage.getItem(coverage.HIDE100_STORAGE); + if (saved_hide100_value) { + document.getElementById("hide100").checked = JSON.parse(saved_hide100_value); + } + + // Cache elements. + const table = document.querySelector("table.index"); + const table_body_rows = table.querySelectorAll("tbody tr"); + const no_rows = document.getElementById("no_rows"); + + // Observe filter keyevents. + const filter_handler = (event => { + // Keep running total of each metric, first index contains number of shown rows + const totals = new Array(table.rows[0].cells.length).fill(0); + // Accumulate the percentage as fraction + totals[totals.length - 1] = { "numer": 0, "denom": 0 }; // nosemgrep: eslint.detect-object-injection + + var text = document.getElementById("filter").value; + // Store filter value + localStorage.setItem(coverage.FILTER_STORAGE, text); + const casefold = (text === text.toLowerCase()); + const hide100 = document.getElementById("hide100").checked; + // Store hide value. + localStorage.setItem(coverage.HIDE100_STORAGE, JSON.stringify(hide100)); + + // Hide / show elements. + table_body_rows.forEach(row => { + var show = false; + // Check the text filter. + for (let column = 0; column < totals.length; column++) { + cell = row.cells[column]; + if (cell.classList.contains("name")) { + var celltext = cell.textContent; + if (casefold) { + celltext = celltext.toLowerCase(); + } + if (celltext.includes(text)) { + show = true; + } + } + } + + // Check the "hide covered" filter. + if (show && hide100) { + const [numer, denom] = row.cells[row.cells.length - 1].dataset.ratio.split(" "); + show = (numer !== denom); + } + + if (!show) { + // hide + row.classList.add("hidden"); + return; + } + + // show + row.classList.remove("hidden"); + totals[0]++; + + for (let column = 0; column < totals.length; column++) { + // Accumulate dynamic totals + cell = row.cells[column] // nosemgrep: eslint.detect-object-injection + if (cell.classList.contains("name")) { + continue; + } + if (column === totals.length - 1) { + // Last column contains percentage + const [numer, denom] = cell.dataset.ratio.split(" "); + totals[column]["numer"] += parseInt(numer, 10); // nosemgrep: eslint.detect-object-injection + totals[column]["denom"] += parseInt(denom, 10); // nosemgrep: eslint.detect-object-injection + } + else { + totals[column] += parseInt(cell.textContent, 10); // nosemgrep: eslint.detect-object-injection + } + } + }); + + // Show placeholder if no rows will be displayed. + if (!totals[0]) { + // Show placeholder, hide table. + no_rows.style.display = "block"; + table.style.display = "none"; + return; + } + + // Hide placeholder, show table. + no_rows.style.display = null; + table.style.display = null; + + const footer = table.tFoot.rows[0]; + // Calculate new dynamic sum values based on visible rows. + for (let column = 0; column < totals.length; column++) { + // Get footer cell element. + const cell = footer.cells[column]; // nosemgrep: eslint.detect-object-injection + if (cell.classList.contains("name")) { + continue; + } + + // Set value into dynamic footer cell element. + if (column === totals.length - 1) { + // Percentage column uses the numerator and denominator, + // and adapts to the number of decimal places. + const match = /\.([0-9]+)/.exec(cell.textContent); + const places = match ? match[1].length : 0; + const { numer, denom } = totals[column]; // nosemgrep: eslint.detect-object-injection + cell.dataset.ratio = `${numer} ${denom}`; + // Check denom to prevent NaN if filtered files contain no statements + cell.textContent = denom + ? `${(numer * 100 / denom).toFixed(places)}%` + : `${(100).toFixed(places)}%`; + } + else { + cell.textContent = totals[column]; // nosemgrep: eslint.detect-object-injection + } + } + }); + + document.getElementById("filter").addEventListener("input", debounce(filter_handler)); + document.getElementById("hide100").addEventListener("input", debounce(filter_handler)); + + // Trigger change event on setup, to force filter on page refresh + // (filter value may still be present). + document.getElementById("filter").dispatchEvent(new Event("input")); + document.getElementById("hide100").dispatchEvent(new Event("input")); +}; +coverage.FILTER_STORAGE = "COVERAGE_FILTER_VALUE"; +coverage.HIDE100_STORAGE = "COVERAGE_HIDE100_VALUE"; + +// Set up the click-to-sort columns. +coverage.wire_up_sorting = function () { + document.querySelectorAll("[data-sortable] th[aria-sort]").forEach( + th => th.addEventListener("click", e => sortColumn(e.target)) + ); + + // Look for a localStorage item containing previous sort settings: + let th_id = "file", direction = "ascending"; + const stored_list = localStorage.getItem(coverage.INDEX_SORT_STORAGE); + if (stored_list) { + ({th_id, direction} = JSON.parse(stored_list)); + } + let by_region = false, region_direction = "ascending"; + const sorted_by_region = localStorage.getItem(coverage.SORTED_BY_REGION); + if (sorted_by_region) { + ({ + by_region, + region_direction + } = JSON.parse(sorted_by_region)); + } + + const region_id = "region"; + if (by_region && document.getElementById(region_id)) { + direction = region_direction; + } + // If we are in a page that has a column with id of "region", sort on + // it if the last sort was by function or class. + let th; + if (document.getElementById(region_id)) { + th = document.getElementById(by_region ? region_id : th_id); + } + else { + th = document.getElementById(th_id); + } + th.setAttribute("aria-sort", direction === "ascending" ? "descending" : "ascending"); + th.click() +}; + +coverage.INDEX_SORT_STORAGE = "COVERAGE_INDEX_SORT_2"; +coverage.SORTED_BY_REGION = "COVERAGE_SORT_REGION"; + +// Loaded on index.html +coverage.index_ready = function () { + coverage.assign_shortkeys(); + coverage.wire_up_filter(); + coverage.wire_up_sorting(); + + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + + on_click(".button_show_hide_help", coverage.show_hide_help); +}; + +// -- pyfile stuff -- + +coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS"; + +coverage.pyfile_ready = function () { + // If we're directed to a particular line number, highlight the line. + var frag = location.hash; + if (frag.length > 2 && frag[1] === "t") { + document.querySelector(frag).closest(".n").classList.add("highlight"); + coverage.set_sel(parseInt(frag.substr(2), 10)); + } + else { + coverage.set_sel(0); + } + + on_click(".button_toggle_run", coverage.toggle_lines); + on_click(".button_toggle_mis", coverage.toggle_lines); + on_click(".button_toggle_exc", coverage.toggle_lines); + on_click(".button_toggle_par", coverage.toggle_lines); + + on_click(".button_next_chunk", coverage.to_next_chunk_nicely); + on_click(".button_prev_chunk", coverage.to_prev_chunk_nicely); + on_click(".button_top_of_page", coverage.to_top); + on_click(".button_first_chunk", coverage.to_first_chunk); + + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + on_click(".button_to_index", coverage.to_index); + + on_click(".button_show_hide_help", coverage.show_hide_help); + + coverage.filters = undefined; + try { + coverage.filters = localStorage.getItem(coverage.LINE_FILTERS_STORAGE); + } catch(err) {} + + if (coverage.filters) { + coverage.filters = JSON.parse(coverage.filters); + } + else { + coverage.filters = {run: false, exc: true, mis: true, par: true}; + } + + for (cls in coverage.filters) { + coverage.set_line_visibilty(cls, coverage.filters[cls]); // nosemgrep: eslint.detect-object-injection + } + + coverage.assign_shortkeys(); + coverage.init_scroll_markers(); + coverage.wire_up_sticky_header(); + + document.querySelectorAll("[id^=ctxs]").forEach( + cbox => cbox.addEventListener("click", coverage.expand_contexts) + ); + + // Rebuild scroll markers when the window height changes. + window.addEventListener("resize", coverage.build_scroll_markers); +}; + +coverage.toggle_lines = function (event) { + const btn = event.target.closest("button"); + const category = btn.value + const show = !btn.classList.contains("show_" + category); + coverage.set_line_visibilty(category, show); + coverage.build_scroll_markers(); + coverage.filters[category] = show; + try { + localStorage.setItem(coverage.LINE_FILTERS_STORAGE, JSON.stringify(coverage.filters)); + } catch(err) {} +}; + +coverage.set_line_visibilty = function (category, should_show) { + const cls = "show_" + category; + const btn = document.querySelector(".button_toggle_" + category); + if (btn) { + if (should_show) { + document.querySelectorAll("#source ." + category).forEach(e => e.classList.add(cls)); + btn.classList.add(cls); + } + else { + document.querySelectorAll("#source ." + category).forEach(e => e.classList.remove(cls)); + btn.classList.remove(cls); + } + } +}; + +// Return the nth line div. +coverage.line_elt = function (n) { + return document.getElementById("t" + n)?.closest("p"); +}; + +// Set the selection. b and e are line numbers. +coverage.set_sel = function (b, e) { + // The first line selected. + coverage.sel_begin = b; + // The next line not selected. + coverage.sel_end = (e === undefined) ? b+1 : e; +}; + +coverage.to_top = function () { + coverage.set_sel(0, 1); + coverage.scroll_window(0); +}; + +coverage.to_first_chunk = function () { + coverage.set_sel(0, 1); + coverage.to_next_chunk(); +}; + +coverage.to_prev_file = function () { + window.location = document.getElementById("prevFileLink").href; +} + +coverage.to_next_file = function () { + window.location = document.getElementById("nextFileLink").href; +} + +coverage.to_index = function () { + location.href = document.getElementById("indexLink").href; +} + +coverage.show_hide_help = function () { + const helpCheck = document.getElementById("help_panel_state") + helpCheck.checked = !helpCheck.checked; +} + +// Return a string indicating what kind of chunk this line belongs to, +// or null if not a chunk. +coverage.chunk_indicator = function (line_elt) { + const classes = line_elt?.className; + if (!classes) { + return null; + } + const match = classes.match(/\bshow_\w+\b/); + if (!match) { + return null; + } + return match[0]; +}; + +coverage.to_next_chunk = function () { + const c = coverage; + + // Find the start of the next colored chunk. + var probe = c.sel_end; + var chunk_indicator, probe_line; + while (true) { + probe_line = c.line_elt(probe); + if (!probe_line) { + return; + } + chunk_indicator = c.chunk_indicator(probe_line); + if (chunk_indicator) { + break; + } + probe++; + } + + // There's a next chunk, `probe` points to it. + var begin = probe; + + // Find the end of this chunk. + var next_indicator = chunk_indicator; + while (next_indicator === chunk_indicator) { + probe++; + probe_line = c.line_elt(probe); + next_indicator = c.chunk_indicator(probe_line); + } + c.set_sel(begin, probe); + c.show_selection(); +}; + +coverage.to_prev_chunk = function () { + const c = coverage; + + // Find the end of the prev colored chunk. + var probe = c.sel_begin-1; + var probe_line = c.line_elt(probe); + if (!probe_line) { + return; + } + var chunk_indicator = c.chunk_indicator(probe_line); + while (probe > 1 && !chunk_indicator) { + probe--; + probe_line = c.line_elt(probe); + if (!probe_line) { + return; + } + chunk_indicator = c.chunk_indicator(probe_line); + } + + // There's a prev chunk, `probe` points to its last line. + var end = probe+1; + + // Find the beginning of this chunk. + var prev_indicator = chunk_indicator; + while (prev_indicator === chunk_indicator) { + probe--; + if (probe <= 0) { + return; + } + probe_line = c.line_elt(probe); + prev_indicator = c.chunk_indicator(probe_line); + } + c.set_sel(probe+1, end); + c.show_selection(); +}; + +// Returns 0, 1, or 2: how many of the two ends of the selection are on +// the screen right now? +coverage.selection_ends_on_screen = function () { + if (coverage.sel_begin === 0) { + return 0; + } + + const begin = coverage.line_elt(coverage.sel_begin); + const end = coverage.line_elt(coverage.sel_end-1); + + return ( + (checkVisible(begin) ? 1 : 0) + + (checkVisible(end) ? 1 : 0) + ); +}; + +coverage.to_next_chunk_nicely = function () { + if (coverage.selection_ends_on_screen() === 0) { + // The selection is entirely off the screen: + // Set the top line on the screen as selection. + + // This will select the top-left of the viewport + // As this is most likely the span with the line number we take the parent + const line = document.elementFromPoint(0, 0).parentElement; + if (line.parentElement !== document.getElementById("source")) { + // The element is not a source line but the header or similar + coverage.select_line_or_chunk(1); + } + else { + // We extract the line number from the id + coverage.select_line_or_chunk(parseInt(line.id.substring(1), 10)); + } + } + coverage.to_next_chunk(); +}; + +coverage.to_prev_chunk_nicely = function () { + if (coverage.selection_ends_on_screen() === 0) { + // The selection is entirely off the screen: + // Set the lowest line on the screen as selection. + + // This will select the bottom-left of the viewport + // As this is most likely the span with the line number we take the parent + const line = document.elementFromPoint(document.documentElement.clientHeight-1, 0).parentElement; + if (line.parentElement !== document.getElementById("source")) { + // The element is not a source line but the header or similar + coverage.select_line_or_chunk(coverage.lines_len); + } + else { + // We extract the line number from the id + coverage.select_line_or_chunk(parseInt(line.id.substring(1), 10)); + } + } + coverage.to_prev_chunk(); +}; + +// Select line number lineno, or if it is in a colored chunk, select the +// entire chunk +coverage.select_line_or_chunk = function (lineno) { + var c = coverage; + var probe_line = c.line_elt(lineno); + if (!probe_line) { + return; + } + var the_indicator = c.chunk_indicator(probe_line); + if (the_indicator) { + // The line is in a highlighted chunk. + // Search backward for the first line. + var probe = lineno; + var indicator = the_indicator; + while (probe > 0 && indicator === the_indicator) { + probe--; + probe_line = c.line_elt(probe); + if (!probe_line) { + break; + } + indicator = c.chunk_indicator(probe_line); + } + var begin = probe + 1; + + // Search forward for the last line. + probe = lineno; + indicator = the_indicator; + while (indicator === the_indicator) { + probe++; + probe_line = c.line_elt(probe); + indicator = c.chunk_indicator(probe_line); + } + + coverage.set_sel(begin, probe); + } + else { + coverage.set_sel(lineno); + } +}; + +coverage.show_selection = function () { + // Highlight the lines in the chunk + document.querySelectorAll("#source .highlight").forEach(e => e.classList.remove("highlight")); + for (let probe = coverage.sel_begin; probe < coverage.sel_end; probe++) { + coverage.line_elt(probe).querySelector(".n").classList.add("highlight"); + } + + coverage.scroll_to_selection(); +}; + +coverage.scroll_to_selection = function () { + // Scroll the page if the chunk isn't fully visible. + if (coverage.selection_ends_on_screen() < 2) { + const element = coverage.line_elt(coverage.sel_begin); + coverage.scroll_window(element.offsetTop - 60); + } +}; + +coverage.scroll_window = function (to_pos) { + window.scroll({top: to_pos, behavior: "smooth"}); +}; + +coverage.init_scroll_markers = function () { + // Init some variables + coverage.lines_len = document.querySelectorAll("#source > p").length; + + // Build html + coverage.build_scroll_markers(); +}; + +coverage.build_scroll_markers = function () { + const temp_scroll_marker = document.getElementById("scroll_marker") + if (temp_scroll_marker) temp_scroll_marker.remove(); + // Don't build markers if the window has no scroll bar. + if (document.body.scrollHeight <= window.innerHeight) { + return; + } + + const marker_scale = window.innerHeight / document.body.scrollHeight; + const line_height = Math.min(Math.max(3, window.innerHeight / coverage.lines_len), 10); + + let previous_line = -99, last_mark, last_top; + + const scroll_marker = document.createElement("div"); + scroll_marker.id = "scroll_marker"; + document.getElementById("source").querySelectorAll( + "p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par" + ).forEach(element => { + const line_top = Math.floor(element.offsetTop * marker_scale); + const line_number = parseInt(element.querySelector(".n a").id.substr(1)); + + if (line_number === previous_line + 1) { + // If this solid missed block just make previous mark higher. + last_mark.style.height = `${line_top + line_height - last_top}px`; + } + else { + // Add colored line in scroll_marker block. + last_mark = document.createElement("div"); + last_mark.id = `m${line_number}`; + last_mark.classList.add("marker"); + last_mark.style.height = `${line_height}px`; + last_mark.style.top = `${line_top}px`; + scroll_marker.append(last_mark); + last_top = line_top; + } + + previous_line = line_number; + }); + + // Append last to prevent layout calculation + document.body.append(scroll_marker); +}; + +coverage.wire_up_sticky_header = function () { + const header = document.querySelector("header"); + const header_bottom = ( + header.querySelector(".content h2").getBoundingClientRect().top - + header.getBoundingClientRect().top + ); + + function updateHeader() { + if (window.scrollY > header_bottom) { + header.classList.add("sticky"); + } + else { + header.classList.remove("sticky"); + } + } + + window.addEventListener("scroll", updateHeader); + updateHeader(); +}; + +coverage.expand_contexts = function (e) { + var ctxs = e.target.parentNode.querySelector(".ctxs"); + + if (!ctxs.classList.contains("expanded")) { + var ctxs_text = ctxs.textContent; + var width = Number(ctxs_text[0]); + ctxs.textContent = ""; + for (var i = 1; i < ctxs_text.length; i += width) { + key = ctxs_text.substring(i, i + width).trim(); + ctxs.appendChild(document.createTextNode(contexts[key])); + ctxs.appendChild(document.createElement("br")); + } + ctxs.classList.add("expanded"); + } +}; + +document.addEventListener("DOMContentLoaded", () => { + if (document.body.classList.contains("indexfile")) { + coverage.index_ready(); + } + else { + coverage.pyfile_ready(); + } +}); diff --git a/tests/htmlcov/favicon_32_cb_58284776.png b/tests/htmlcov/favicon_32_cb_58284776.png new file mode 100644 index 0000000..8649f04 Binary files /dev/null and b/tests/htmlcov/favicon_32_cb_58284776.png differ diff --git a/tests/htmlcov/function_index.html b/tests/htmlcov/function_index.html new file mode 100644 index 0000000..7612ffd --- /dev/null +++ b/tests/htmlcov/function_index.html @@ -0,0 +1,675 @@ + + + + + Coverage report + + + + + +
+
+

Coverage report: + 95% +

+ +
+ +
+ + +
+
+

+ Files + Functions + Classes +

+

+ coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Filefunctionstatementsmissingexcludedcoverage
/data/dev/python/codecipher/github/codecipher/codecipher/__init__.py(no function)000100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.pyA1z52N62.__init__100100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.py(no function)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.pyA1z52N62Decode.decode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.pyA1z52N62Decode.decode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.pyA1z52N62Decode.decode1100100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.py(no function)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.pyA1z52N62Encode.encode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.pyA1z52N62Encode.encode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.pyA1z52N62Encode.encode1100100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.py(no function)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.pyAlephTawBetShin.__init__100100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.py(no function)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.pyAlephTawBetShinDecode.decode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.pyAlephTawBetShinDecode.decode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.pyAlephTawBetShinDecode.decode500100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.py(no function)2102100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.pyAlephTawBetShinEncode.encode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.pyAlephTawBetShinEncode.encode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.pyAlephTawBetShinEncode.encode500100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.py(no function)2102100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/lookup_table.py(no function)1000100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.pyB64.__init__100100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.py(no function)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.pyB64Decode.decode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.pyB64Decode.decode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.pyB64Decode.decode200100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.py(no function)1900100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.pyB64Encode.encode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.pyB64Encode.encode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.pyB64Encode.encode200100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.py(no function)1900100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.pyCaesar.__init__100100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.py(no function)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.pyCaesarDecode.decode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.pyCaesarDecode.decode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.pyCaesarDecode.decode2000100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.py(no function)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.pyCaesarEncode.encode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.pyCaesarEncode.encode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.pyCaesarEncode.encode2000100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.py(no function)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.pyVernam.__init__100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.py(no function)1502100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.pyVernamDecode.decode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.pyVernamDecode.decode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.pyVernamDecode.decode1500100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.py(no function)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.pyVernamEncode.encode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.pyVernamEncode.encode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.pyVernamEncode.encode1500100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.py(no function)1800100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.pyVigenere.__init__100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.py(no function)1602100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.pyVigenereDecode.decode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.pyVigenereDecode.decode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.pyVigenereDecode._split_data_decode500100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.pyVigenereDecode.decode700100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.py(no function)2202100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.pyVigenereEncode.encode_data100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.pyVigenereEncode.encode_data2200%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.pyVigenereEncode._split_data_encode500100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.pyVigenereEncode.encode700100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.py(no function)2202100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.pyKeyGenerator.data_len1100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.pyKeyGenerator.data_len200100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.pyKeyGenerator.key100100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.pyKeyGenerator.key200100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.pyKeyGenerator.generate_key81088%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.py(no function)2300100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.py(no function)1600100%
Total 558262095%
+

+ No items found using the specified filter. +

+
+ + + diff --git a/tests/htmlcov/index.html b/tests/htmlcov/index.html new file mode 100644 index 0000000..7cd5980 --- /dev/null +++ b/tests/htmlcov/index.html @@ -0,0 +1,258 @@ + + + + + Coverage report + + + + + +
+
+

Coverage report: + 95% +

+ +
+ +
+ + +
+
+

+ Files + Functions + Classes +

+

+ coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Filestatementsmissingexcludedcoverage
/data/dev/python/codecipher/github/codecipher/codecipher/__init__.py000100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.py1602100%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.py322094%
/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.py322094%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.py1602100%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.py292293%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.py292293%
/data/dev/python/codecipher/github/codecipher/codecipher/atbs/lookup_table.py1000100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.py1602100%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.py242092%
/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.py242092%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.py1602100%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.py412095%
/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.py412095%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.py1602100%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.py362094%
/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.py362094%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.py1702100%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.py372295%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.py372295%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.py372095%
/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.py1600100%
Total558262095%
+

+ No items found using the specified filter. +

+
+ + + diff --git a/tests/htmlcov/keybd_closed_cb_ce680311.png b/tests/htmlcov/keybd_closed_cb_ce680311.png new file mode 100644 index 0000000..ba119c4 Binary files /dev/null and b/tests/htmlcov/keybd_closed_cb_ce680311.png differ diff --git a/tests/htmlcov/status.json b/tests/htmlcov/status.json new file mode 100644 index 0000000..9cd74cb --- /dev/null +++ b/tests/htmlcov/status.json @@ -0,0 +1 @@ +{"note":"This file is an internal implementation detail to speed up HTML report generation. Its format can change at any time. You might be looking for the JSON report: https://coverage.rtfd.io/cmd.html#cmd-json","format":5,"version":"7.6.10","globals":"75472d795e478e2a70f12094bad3d89c","files":{"z_7dc3960ecaf412e4___init___py":{"hash":"f4cac1f1083e129afa20f2f342c23c1e","index":{"url":"z_7dc3960ecaf412e4___init___py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":0,"n_excluded":0,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_96938f9400a5cdf6___init___py":{"hash":"d8331db09f9d8af0d7601a02461b3cb4","index":{"url":"z_96938f9400a5cdf6___init___py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":16,"n_excluded":2,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_96938f9400a5cdf6_decode_py":{"hash":"bfe8726156149cfc6855498e771e729c","index":{"url":"z_96938f9400a5cdf6_decode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":32,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_96938f9400a5cdf6_encode_py":{"hash":"3cb0f5225867225a201978d4e03ef41b","index":{"url":"z_96938f9400a5cdf6_encode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":32,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_9927f90504198b80___init___py":{"hash":"95ea4f26d546ec4ae5e199099cdea6b5","index":{"url":"z_9927f90504198b80___init___py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":16,"n_excluded":2,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_9927f90504198b80_decode_py":{"hash":"4c449b3a90c2c83914072ff597264b2b","index":{"url":"z_9927f90504198b80_decode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":29,"n_excluded":2,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_9927f90504198b80_encode_py":{"hash":"38120ce683b88295cb0662276032b801","index":{"url":"z_9927f90504198b80_encode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":29,"n_excluded":2,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_9927f90504198b80_lookup_table_py":{"hash":"e5144183bef94c289bae596618526357","index":{"url":"z_9927f90504198b80_lookup_table_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/atbs/lookup_table.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":10,"n_excluded":0,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_8f54ab6b5b508ca0___init___py":{"hash":"738540ed921a9c045fa43d9dfa559e62","index":{"url":"z_8f54ab6b5b508ca0___init___py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":16,"n_excluded":2,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_8f54ab6b5b508ca0_decode_py":{"hash":"ddbb57f6709f86fd5a0a8f0823f65a1e","index":{"url":"z_8f54ab6b5b508ca0_decode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":24,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_8f54ab6b5b508ca0_encode_py":{"hash":"18688324516b14bb3e62d5c1c9342170","index":{"url":"z_8f54ab6b5b508ca0_encode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":24,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_094bd7de807a5f14___init___py":{"hash":"91a240027ae1ff550cdb8b36702f36bb","index":{"url":"z_094bd7de807a5f14___init___py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":16,"n_excluded":2,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_094bd7de807a5f14_decode_py":{"hash":"848e445f1888e31ef0fcf66fda64b84c","index":{"url":"z_094bd7de807a5f14_decode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":41,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_094bd7de807a5f14_encode_py":{"hash":"e69615b6838d556d263d9e85784beed4","index":{"url":"z_094bd7de807a5f14_encode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":41,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_aba196749d301797___init___py":{"hash":"683db5ca8547a390e7435ac5add52681","index":{"url":"z_aba196749d301797___init___py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":16,"n_excluded":2,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_aba196749d301797_decode_py":{"hash":"b259df959f65c314809d3717b2412aee","index":{"url":"z_aba196749d301797_decode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":36,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_aba196749d301797_encode_py":{"hash":"58b395bc286dedac7a74dc2b98d5f1dd","index":{"url":"z_aba196749d301797_encode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":36,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_75799433d8182c47___init___py":{"hash":"b73e4e6cf58cb5d43a70de2fba4ea55c","index":{"url":"z_75799433d8182c47___init___py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":17,"n_excluded":2,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_75799433d8182c47_decode_py":{"hash":"9b2483a8d9ca801b9479cf5f4448061d","index":{"url":"z_75799433d8182c47_decode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":37,"n_excluded":2,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_75799433d8182c47_encode_py":{"hash":"db543c754da846703542c9f13639789d","index":{"url":"z_75799433d8182c47_encode_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":37,"n_excluded":2,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_75799433d8182c47_key_generator_py":{"hash":"0624230860464585b462816a5f5372fc","index":{"url":"z_75799433d8182c47_key_generator_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":37,"n_excluded":0,"n_missing":2,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}},"z_75799433d8182c47_lookup_table_py":{"hash":"d1650af7cf63ae1b5b7c36c494b29a50","index":{"url":"z_75799433d8182c47_lookup_table_py.html","file":"/data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.py","description":"","nums":{"precision":0,"n_files":1,"n_statements":16,"n_excluded":0,"n_missing":0,"n_branches":0,"n_partial_branches":0,"n_missing_branches":0}}}}} \ No newline at end of file diff --git a/tests/htmlcov/style_cb_8e611ae1.css b/tests/htmlcov/style_cb_8e611ae1.css new file mode 100644 index 0000000..3cdaf05 --- /dev/null +++ b/tests/htmlcov/style_cb_8e611ae1.css @@ -0,0 +1,337 @@ +@charset "UTF-8"; +/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */ +/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */ +/* Don't edit this .css file. Edit the .scss file instead! */ +html, body, h1, h2, h3, p, table, td, th { margin: 0; padding: 0; border: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; } + +body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 1em; background: #fff; color: #000; } + +@media (prefers-color-scheme: dark) { body { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { body { color: #eee; } } + +html > body { font-size: 16px; } + +a:active, a:focus { outline: 2px dashed #007acc; } + +p { font-size: .875em; line-height: 1.4em; } + +table { border-collapse: collapse; } + +td { vertical-align: top; } + +table tr.hidden { display: none !important; } + +p#no_rows { display: none; font-size: 1.15em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; } + +a.nav { text-decoration: none; color: inherit; } + +a.nav:hover { text-decoration: underline; color: inherit; } + +.hidden { display: none; } + +header { background: #f8f8f8; width: 100%; z-index: 2; border-bottom: 1px solid #ccc; } + +@media (prefers-color-scheme: dark) { header { background: black; } } + +@media (prefers-color-scheme: dark) { header { border-color: #333; } } + +header .content { padding: 1rem 3.5rem; } + +header h2 { margin-top: .5em; font-size: 1em; } + +header h2 a.button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; background: #eee; color: inherit; text-decoration: none; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; } + +@media (prefers-color-scheme: dark) { header h2 a.button { background: #333; } } + +@media (prefers-color-scheme: dark) { header h2 a.button { border-color: #444; } } + +header h2 a.button.current { border: 2px solid; background: #fff; border-color: #999; cursor: default; } + +@media (prefers-color-scheme: dark) { header h2 a.button.current { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { header h2 a.button.current { border-color: #777; } } + +header p.text { margin: .5em 0 -.5em; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { header p.text { color: #aaa; } } + +header.sticky { position: fixed; left: 0; right: 0; height: 2.5em; } + +header.sticky .text { display: none; } + +header.sticky h1, header.sticky h2 { font-size: 1em; margin-top: 0; display: inline-block; } + +header.sticky .content { padding: 0.5rem 3.5rem; } + +header.sticky .content p { font-size: 1em; } + +header.sticky ~ #source { padding-top: 6.5em; } + +main { position: relative; z-index: 1; } + +footer { margin: 1rem 3.5rem; } + +footer .content { padding: 0; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { footer .content { color: #aaa; } } + +#index { margin: 1rem 0 0 3.5rem; } + +h1 { font-size: 1.25em; display: inline-block; } + +#filter_container { float: right; margin: 0 2em 0 0; line-height: 1.66em; } + +#filter_container #filter { width: 10em; padding: 0.2em 0.5em; border: 2px solid #ccc; background: #fff; color: #000; } + +@media (prefers-color-scheme: dark) { #filter_container #filter { border-color: #444; } } + +@media (prefers-color-scheme: dark) { #filter_container #filter { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { #filter_container #filter { color: #eee; } } + +#filter_container #filter:focus { border-color: #007acc; } + +#filter_container :disabled ~ label { color: #ccc; } + +@media (prefers-color-scheme: dark) { #filter_container :disabled ~ label { color: #444; } } + +#filter_container label { font-size: .875em; color: #666; } + +@media (prefers-color-scheme: dark) { #filter_container label { color: #aaa; } } + +header button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; background: #eee; color: inherit; text-decoration: none; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; } + +@media (prefers-color-scheme: dark) { header button { background: #333; } } + +@media (prefers-color-scheme: dark) { header button { border-color: #444; } } + +header button:active, header button:focus { outline: 2px dashed #007acc; } + +header button.run { background: #eeffee; } + +@media (prefers-color-scheme: dark) { header button.run { background: #373d29; } } + +header button.run.show_run { background: #dfd; border: 2px solid #00dd00; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.run.show_run { background: #373d29; } } + +header button.mis { background: #ffeeee; } + +@media (prefers-color-scheme: dark) { header button.mis { background: #4b1818; } } + +header button.mis.show_mis { background: #fdd; border: 2px solid #ff0000; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.mis.show_mis { background: #4b1818; } } + +header button.exc { background: #f7f7f7; } + +@media (prefers-color-scheme: dark) { header button.exc { background: #333; } } + +header button.exc.show_exc { background: #eee; border: 2px solid #808080; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.exc.show_exc { background: #333; } } + +header button.par { background: #ffffd5; } + +@media (prefers-color-scheme: dark) { header button.par { background: #650; } } + +header button.par.show_par { background: #ffa; border: 2px solid #bbbb00; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { header button.par.show_par { background: #650; } } + +#help_panel, #source p .annotate.long { display: none; position: absolute; z-index: 999; background: #ffffcc; border: 1px solid #888; border-radius: .2em; color: #333; padding: .25em .5em; } + +#source p .annotate.long { white-space: normal; float: right; top: 1.75em; right: 1em; height: auto; } + +#help_panel_wrapper { float: right; position: relative; } + +#keyboard_icon { margin: 5px; } + +#help_panel_state { display: none; } + +#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; color: #333; } + +#help_panel .keyhelp p { margin-top: .75em; } + +#help_panel .legend { font-style: italic; margin-bottom: 1em; } + +.indexfile #help_panel { width: 25em; } + +.pyfile #help_panel { width: 18em; } + +#help_panel_state:checked ~ #help_panel { display: block; } + +kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; border-radius: 3px; } + +#source { padding: 1em 0 1em 3.5rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; } + +#source p { position: relative; white-space: pre; } + +#source p * { box-sizing: border-box; } + +#source p .n { float: left; text-align: right; width: 3.5rem; box-sizing: border-box; margin-left: -3.5rem; padding-right: 1em; color: #999; user-select: none; } + +@media (prefers-color-scheme: dark) { #source p .n { color: #777; } } + +#source p .n.highlight { background: #ffdd00; } + +#source p .n a { scroll-margin-top: 6em; text-decoration: none; color: #999; } + +@media (prefers-color-scheme: dark) { #source p .n a { color: #777; } } + +#source p .n a:hover { text-decoration: underline; color: #999; } + +@media (prefers-color-scheme: dark) { #source p .n a:hover { color: #777; } } + +#source p .t { display: inline-block; width: 100%; box-sizing: border-box; margin-left: -.5em; padding-left: 0.3em; border-left: 0.2em solid #fff; } + +@media (prefers-color-scheme: dark) { #source p .t { border-color: #1e1e1e; } } + +#source p .t:hover { background: #f2f2f2; } + +@media (prefers-color-scheme: dark) { #source p .t:hover { background: #282828; } } + +#source p .t:hover ~ .r .annotate.long { display: block; } + +#source p .t .com { color: #008000; font-style: italic; line-height: 1px; } + +@media (prefers-color-scheme: dark) { #source p .t .com { color: #6a9955; } } + +#source p .t .key { font-weight: bold; line-height: 1px; } + +#source p .t .str { color: #0451a5; } + +@media (prefers-color-scheme: dark) { #source p .t .str { color: #9cdcfe; } } + +#source p.mis .t { border-left: 0.2em solid #ff0000; } + +#source p.mis.show_mis .t { background: #fdd; } + +@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t { background: #4b1818; } } + +#source p.mis.show_mis .t:hover { background: #f2d2d2; } + +@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t:hover { background: #532323; } } + +#source p.run .t { border-left: 0.2em solid #00dd00; } + +#source p.run.show_run .t { background: #dfd; } + +@media (prefers-color-scheme: dark) { #source p.run.show_run .t { background: #373d29; } } + +#source p.run.show_run .t:hover { background: #d2f2d2; } + +@media (prefers-color-scheme: dark) { #source p.run.show_run .t:hover { background: #404633; } } + +#source p.exc .t { border-left: 0.2em solid #808080; } + +#source p.exc.show_exc .t { background: #eee; } + +@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t { background: #333; } } + +#source p.exc.show_exc .t:hover { background: #e2e2e2; } + +@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t:hover { background: #3c3c3c; } } + +#source p.par .t { border-left: 0.2em solid #bbbb00; } + +#source p.par.show_par .t { background: #ffa; } + +@media (prefers-color-scheme: dark) { #source p.par.show_par .t { background: #650; } } + +#source p.par.show_par .t:hover { background: #f2f2a2; } + +@media (prefers-color-scheme: dark) { #source p.par.show_par .t:hover { background: #6d5d0c; } } + +#source p .r { position: absolute; top: 0; right: 2.5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; } + +#source p .annotate { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; color: #666; padding-right: .5em; } + +@media (prefers-color-scheme: dark) { #source p .annotate { color: #ddd; } } + +#source p .annotate.short:hover ~ .long { display: block; } + +#source p .annotate.long { width: 30em; right: 2.5em; } + +#source p input { display: none; } + +#source p input ~ .r label.ctx { cursor: pointer; border-radius: .25em; } + +#source p input ~ .r label.ctx::before { content: "â–¶ "; } + +#source p input ~ .r label.ctx:hover { background: #e8f4ff; color: #666; } + +@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { background: #0f3a42; } } + +@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { color: #aaa; } } + +#source p input:checked ~ .r label.ctx { background: #d0e8ff; color: #666; border-radius: .75em .75em 0 0; padding: 0 .5em; margin: -.25em 0; } + +@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { background: #056; } } + +@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { color: #aaa; } } + +#source p input:checked ~ .r label.ctx::before { content: "â–¼ "; } + +#source p input:checked ~ .ctxs { padding: .25em .5em; overflow-y: scroll; max-height: 10.5em; } + +#source p label.ctx { color: #999; display: inline-block; padding: 0 .5em; font-size: .8333em; } + +@media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } } + +#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; } + +@media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } + +#index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; } + +#index table.index { margin-left: -.5em; } + +#index td, #index th { text-align: right; padding: .25em .5em; border-bottom: 1px solid #eee; } + +@media (prefers-color-scheme: dark) { #index td, #index th { border-color: #333; } } + +#index td.name, #index th.name { text-align: left; width: auto; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; min-width: 15em; } + +#index th { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-style: italic; color: #333; cursor: pointer; } + +@media (prefers-color-scheme: dark) { #index th { color: #ddd; } } + +#index th:hover { background: #eee; } + +@media (prefers-color-scheme: dark) { #index th:hover { background: #333; } } + +#index th .arrows { color: #666; font-size: 85%; font-family: sans-serif; font-style: normal; pointer-events: none; } + +#index th[aria-sort="ascending"], #index th[aria-sort="descending"] { white-space: nowrap; background: #eee; padding-left: .5em; } + +@media (prefers-color-scheme: dark) { #index th[aria-sort="ascending"], #index th[aria-sort="descending"] { background: #333; } } + +#index th[aria-sort="ascending"] .arrows::after { content: " â–²"; } + +#index th[aria-sort="descending"] .arrows::after { content: " â–¼"; } + +#index td.name { font-size: 1.15em; } + +#index td.name a { text-decoration: none; color: inherit; } + +#index td.name .no-noun { font-style: italic; } + +#index tr.total td, #index tr.total_dynamic td { font-weight: bold; border-top: 1px solid #ccc; border-bottom: none; } + +#index tr.region:hover { background: #eee; } + +@media (prefers-color-scheme: dark) { #index tr.region:hover { background: #333; } } + +#index tr.region:hover td.name { text-decoration: underline; color: inherit; } + +#scroll_marker { position: fixed; z-index: 3; right: 0; top: 0; width: 16px; height: 100%; background: #fff; border-left: 1px solid #eee; will-change: transform; } + +@media (prefers-color-scheme: dark) { #scroll_marker { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { #scroll_marker { border-color: #333; } } + +#scroll_marker .marker { background: #ccc; position: absolute; min-height: 3px; width: 100%; } + +@media (prefers-color-scheme: dark) { #scroll_marker .marker { background: #444; } } diff --git a/tests/htmlcov/z_094bd7de807a5f14___init___py.html b/tests/htmlcov/z_094bd7de807a5f14___init___py.html new file mode 100644 index 0000000..2a53b1d --- /dev/null +++ b/tests/htmlcov/z_094bd7de807a5f14___init___py.html @@ -0,0 +1,159 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/caesar/__init__.py: + 100% +

+ +

+ 16 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 __init__.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class Caesar with attribute(s) and method(s). 

+

20 Creates container class with aggregate backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from typing import List 

+

25 

+

26try: 

+

27 from codecipher.caesar.encode import CaesarEncode 

+

28 from codecipher.caesar.decode import CaesarDecode 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43class Caesar(CaesarEncode, CaesarDecode): 

+

44 ''' 

+

45 Defines class Caesar with attribute(s) and method(s). 

+

46 Creates container class with aggregate backend API. 

+

47 

+

48 It defines: 

+

49 

+

50 :attributes: 

+

51 | None. 

+

52 :methods: 

+

53 | __init__ - Initials Caesar constructor. 

+

54 ''' 

+

55 

+

56 def __init__(self) -> None: 

+

57 ''' 

+

58 Initials Caesar constructor. 

+

59 

+

60 :exceptions: None 

+

61 ''' 

+

62 super().__init__() 

+
+ + + diff --git a/tests/htmlcov/z_094bd7de807a5f14_decode_py.html b/tests/htmlcov/z_094bd7de807a5f14_decode_py.html new file mode 100644 index 0000000..7218067 --- /dev/null +++ b/tests/htmlcov/z_094bd7de807a5f14_decode_py.html @@ -0,0 +1,207 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.py: 95% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/caesar/decode.py: + 95% +

+ +

+ 41 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 decode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class CaesarDecode with attribute(s) and method(s). 

+

20 Creates decode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from typing import List, Optional 

+

25 

+

26__author__: str = 'Vladimir Roncevic' 

+

27__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

28__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

29__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

30__version__: str = '1.4.8' 

+

31__maintainer__: str = 'Vladimir Roncevic' 

+

32__email__: str = 'elektron.ronca@gmail.com' 

+

33__status__: str = 'Updated' 

+

34 

+

35 

+

36@dataclass 

+

37class CaesarDecode: 

+

38 ''' 

+

39 Defines class CaesarDecode with attribute(s) and method(s). 

+

40 Creates decode class with backend API. 

+

41 

+

42 It defines: 

+

43 

+

44 :attributes: 

+

45 | _decode_data - Data decode container. 

+

46 :methods: 

+

47 | decode_data - Property methods for decode data. 

+

48 | decode - Decode data from Caesar format. 

+

49 ''' 

+

50 

+

51 _decode_data: Optional[str] = field(default=None) 

+

52 

+

53 @property 

+

54 def decode_data(self) -> Optional[str]: 

+

55 ''' 

+

56 Property method for getting decode data. 

+

57 

+

58 :return: Decode data in str format | None 

+

59 :rtype: <Optional[str]> 

+

60 :exceptions: None 

+

61 ''' 

+

62 return self._decode_data 

+

63 

+

64 @decode_data.setter 

+

65 def decode_data(self, decode_data: Optional[str]) -> None: 

+

66 ''' 

+

67 Property method for setting decode data. 

+

68 

+

69 :param decode_data: Decoded data | None 

+

70 :type decode_data: <Optional[str]> 

+

71 :return: None 

+

72 :exceptions: None 

+

73 ''' 

+

74 if bool(decode_data): 

+

75 self._decode_data = decode_data 

+

76 

+

77 def decode( 

+

78 self, data: Optional[str], shift_counter: Optional[int] 

+

79 ) -> None: 

+

80 ''' 

+

81 Decoding data from Caesar format. 

+

82 

+

83 :param data: Data which should be decoded | None 

+

84 :type data: <Optional[str]> 

+

85 :param shift_counter: Defining the shift count | None 

+

86 :type shift_counter: <Optional[int]> 

+

87 :return: None 

+

88 :exceptions: None 

+

89 ''' 

+

90 if bool(data) and bool(shift_counter): 

+

91 decode_list: List[str] = [] 

+

92 for element in data: 

+

93 if element.isspace() or element.isnumeric(): 

+

94 decode_list.append(element) 

+

95 continue 

+

96 element_index: Optional[int] = None 

+

97 new_index: Optional[int] = None 

+

98 new_unicode: Optional[int] = None 

+

99 new_character: Optional[str] = None 

+

100 if element.isupper(): 

+

101 element_index = ord(element) - ord('A') 

+

102 new_index = (element_index - shift_counter) % 26 

+

103 new_unicode = new_index + ord('A') 

+

104 else: 

+

105 element_index = ord(element) - ord('a') 

+

106 new_index = (element_index - shift_counter) % 26 

+

107 new_unicode = new_index + ord('a') 

+

108 new_character = chr(new_unicode) 

+

109 decode_list.append(new_character) 

+

110 self._decode_data = ''.join(decode_list) 

+
+ + + diff --git a/tests/htmlcov/z_094bd7de807a5f14_encode_py.html b/tests/htmlcov/z_094bd7de807a5f14_encode_py.html new file mode 100644 index 0000000..4619c1c --- /dev/null +++ b/tests/htmlcov/z_094bd7de807a5f14_encode_py.html @@ -0,0 +1,207 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.py: 95% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/caesar/encode.py: + 95% +

+ +

+ 41 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 encode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class CaesarEncode with attribute(s) and method(s). 

+

20 Creates encode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from typing import List, Optional 

+

25 

+

26__author__: str = 'Vladimir Roncevic' 

+

27__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

28__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

29__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

30__version__: str = '1.4.8' 

+

31__maintainer__: str = 'Vladimir Roncevic' 

+

32__email__: str = 'elektron.ronca@gmail.com' 

+

33__status__: str = 'Updated' 

+

34 

+

35 

+

36@dataclass 

+

37class CaesarEncode: 

+

38 ''' 

+

39 Defines class CaesarEncode with attribute(s) and method(s). 

+

40 Creates encode class with backend API. 

+

41 

+

42 It defines: 

+

43 

+

44 :attributes: 

+

45 | _encode_data - Data encode container. 

+

46 :methods: 

+

47 | encode_data - Property methods for encode data. 

+

48 | encode - Encode data to Caesar format. 

+

49 ''' 

+

50 

+

51 _encode_data: Optional[str] = field(default=None) 

+

52 

+

53 @property 

+

54 def encode_data(self) -> Optional[str]: 

+

55 ''' 

+

56 Property method for getting encode data. 

+

57 

+

58 :return: Encoded data | None 

+

59 :rtype: <Optional[str]> 

+

60 :exceptions: None 

+

61 ''' 

+

62 return self._encode_data 

+

63 

+

64 @encode_data.setter 

+

65 def encode_data(self, encode_data: Optional[str]) -> None: 

+

66 ''' 

+

67 Property method for setting encode data. 

+

68 

+

69 :param encode_data: Encode data | None 

+

70 :type encode_data: <Optional[str]> 

+

71 :return: None 

+

72 :exceptions: None 

+

73 ''' 

+

74 if bool(encode_data): 

+

75 self._encode_data = encode_data 

+

76 

+

77 def encode( 

+

78 self, data: Optional[str], shift_counter: Optional[int] 

+

79 ) -> None: 

+

80 ''' 

+

81 Encoding data to Caesar format. 

+

82 

+

83 :param data: Data which should be encoded | None 

+

84 :type data: <Optional[str]> 

+

85 :param shift_counter: Defining the shift count | None 

+

86 :type shift_counter: <Optional[int]> 

+

87 :return: None 

+

88 :exceptions: None 

+

89 ''' 

+

90 if bool(data) and bool(shift_counter): 

+

91 encode_list: List[str] = [] 

+

92 for element in data: 

+

93 if element.isspace() or element.isnumeric(): 

+

94 encode_list.append(element) 

+

95 continue 

+

96 element_index: Optional[int] = None 

+

97 new_index: Optional[int] = None 

+

98 new_unicode: Optional[int] = None 

+

99 new_character: Optional[str] = None 

+

100 if element.isupper(): 

+

101 element_index = ord(element) - ord('A') 

+

102 new_index = (element_index + shift_counter) % 26 

+

103 new_unicode = new_index + ord('A') 

+

104 else: 

+

105 element_index = ord(element) - ord('a') 

+

106 new_index = (element_index + shift_counter) % 26 

+

107 new_unicode = new_index + ord('a') 

+

108 new_character = chr(new_unicode) 

+

109 encode_list.append(new_character) 

+

110 self._encode_data = ''.join(encode_list) 

+
+ + + diff --git a/tests/htmlcov/z_75799433d8182c47___init___py.html b/tests/htmlcov/z_75799433d8182c47___init___py.html new file mode 100644 index 0000000..f0c1251 --- /dev/null +++ b/tests/htmlcov/z_75799433d8182c47___init___py.html @@ -0,0 +1,160 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/__init__.py: + 100% +

+ +

+ 17 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 __init__.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class Vigenere with attribute(s) and method(s). 

+

20 Creates container class with aggregate backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from typing import List 

+

25 

+

26try: 

+

27 from codecipher.vigenere.encode import VigenereEncode 

+

28 from codecipher.vigenere.decode import VigenereDecode 

+

29 from codecipher.vigenere.key_generator import KeyGenerator 

+

30except ImportError as ats_error_message: # pragma: no cover 

+

31 # Force exit python ####################################################### 

+

32 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

33 

+

34__author__: str = 'Vladimir Roncevic' 

+

35__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

36__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

37__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

38__version__: str = '1.4.8' 

+

39__maintainer__: str = 'Vladimir Roncevic' 

+

40__email__: str = 'elektron.ronca@gmail.com' 

+

41__status__: str = 'Updated' 

+

42 

+

43 

+

44class Vigenere(VigenereEncode, VigenereDecode, KeyGenerator): 

+

45 ''' 

+

46 Defines class Vigenere with attribute(s) and method(s). 

+

47 Creates container class with aggregate backend API. 

+

48 

+

49 It defines: 

+

50 

+

51 :attributes: 

+

52 | None. 

+

53 :methods: 

+

54 | __init__ - Initials Vigenere constructor. 

+

55 ''' 

+

56 

+

57 def __init__(self) -> None: 

+

58 ''' 

+

59 Initials Vigenere constructor. 

+

60 

+

61 :exceptions: None 

+

62 ''' 

+

63 super().__init__() 

+
+ + + diff --git a/tests/htmlcov/z_75799433d8182c47_decode_py.html b/tests/htmlcov/z_75799433d8182c47_decode_py.html new file mode 100644 index 0000000..79a39bd --- /dev/null +++ b/tests/htmlcov/z_75799433d8182c47_decode_py.html @@ -0,0 +1,226 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.py: 95% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/decode.py: + 95% +

+ +

+ 37 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 decode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class VigenereDecode with attribute(s) and method(s). 

+

20 Creates decode class with backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from dataclasses import dataclass, field 

+

25from typing import List, Optional 

+

26 

+

27try: 

+

28 from codecipher.vigenere.lookup_table import LookUpTable 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43@dataclass 

+

44class VigenereDecode: 

+

45 ''' 

+

46 Defines class VigenereDecode with attribute(s) and method(s). 

+

47 Creates decode class with backend API. 

+

48 

+

49 It defines: 

+

50 

+

51 :attributes: 

+

52 | _decode_data - Data decode container. 

+

53 :methods: 

+

54 | decode_data - Property methods for decode data. 

+

55 | _split_data - Splitting data for decoding. 

+

56 | decode - Decode data from Vigenere format. 

+

57 ''' 

+

58 

+

59 _decode_data: Optional[str] = field(default=None) 

+

60 

+

61 @property 

+

62 def decode_data(self) -> Optional[str]: 

+

63 ''' 

+

64 Property method for getting decode data. 

+

65 

+

66 :return: Decode data in str format | None 

+

67 :rtype: <Optional[str]> 

+

68 :exceptions: None 

+

69 ''' 

+

70 return self._decode_data 

+

71 

+

72 @decode_data.setter 

+

73 def decode_data(self, decode_data_val: Optional[str]) -> None: 

+

74 ''' 

+

75 Property method for setting decode data. 

+

76 

+

77 :param decode_data_val: Decoded data | None 

+

78 :type decode_data_val: <Optional[str]> 

+

79 :return: None 

+

80 :exceptions: None 

+

81 ''' 

+

82 if bool(decode_data_val): 

+

83 self._decode_data = decode_data_val 

+

84 

+

85 def _split_data_decode( 

+

86 self, data_to_decode: Optional[str], key: Optional[str] 

+

87 ) -> List[str]: 

+

88 ''' 

+

89 Splitting data for decoding. 

+

90 

+

91 :param data_to_decode: Data which should be decoded | None 

+

92 :type data_to_decode: <Optional[str]> 

+

93 :param key: Key for decoding | None 

+

94 :type key: <Optional[str]> 

+

95 :return: List with data for decoding 

+

96 :rtype: <List[str]> 

+

97 :exceptions: None 

+

98 ''' 

+

99 elements: List[str] = [] 

+

100 if bool(data_to_decode) and bool(key): 

+

101 for i in range(0, len(data_to_decode), len(key)): 

+

102 elements.append(data_to_decode[i: i + len(key)]) 

+

103 return elements 

+

104 

+

105 def decode( 

+

106 self, data_to_decode: Optional[str], key: Optional[str] 

+

107 ) -> None: 

+

108 ''' 

+

109 Decoding data from Vigenere format. 

+

110 

+

111 :param data_to_decode: Data which should be decoded 

+

112 :type data_to_decode: <Optional[str]> 

+

113 :param key: Key for decoding 

+

114 :type key: <Optional[str]> 

+

115 :return: None 

+

116 :exceptions: None 

+

117 ''' 

+

118 if bool(data_to_decode) and bool(key): 

+

119 decode_list: List[str] = [] 

+

120 for element in self._split_data_decode(data_to_decode, key): 

+

121 for index, letter in enumerate(element): 

+

122 process_index: int = ( 

+

123 LookUpTable.LETTER_TO_INDEX[letter] - 

+

124 LookUpTable.LETTER_TO_INDEX[key[index]] 

+

125 ) % len(LookUpTable.ALPHANUM) 

+

126 decode_list.append( 

+

127 LookUpTable.INDEX_TO_LETTER[process_index] 

+

128 ) 

+

129 self._decode_data = ''.join(decode_list) 

+
+ + + diff --git a/tests/htmlcov/z_75799433d8182c47_encode_py.html b/tests/htmlcov/z_75799433d8182c47_encode_py.html new file mode 100644 index 0000000..a2cae74 --- /dev/null +++ b/tests/htmlcov/z_75799433d8182c47_encode_py.html @@ -0,0 +1,226 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.py: 95% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/encode.py: + 95% +

+ +

+ 37 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 encode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class VigenereEncode with attribute(s) and method(s). 

+

20 Creates encode class with backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from dataclasses import dataclass, field 

+

25from typing import List, Optional 

+

26 

+

27try: 

+

28 from codecipher.vigenere.lookup_table import LookUpTable 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43@dataclass 

+

44class VigenereEncode: 

+

45 ''' 

+

46 Defines class VigenereEncode with attribute(s) and method(s). 

+

47 Creates encode class with backend API. 

+

48 

+

49 It defines: 

+

50 

+

51 :attributes: 

+

52 | _encode_data - Data encode container. 

+

53 :methods: 

+

54 | encode_data - Property methods for encode data. 

+

55 | _split_data - Splitting data for encoding. 

+

56 | encode - Encode data to Vigenere format. 

+

57 ''' 

+

58 

+

59 _encode_data: Optional[str] = field(default=None) 

+

60 

+

61 @property 

+

62 def encode_data(self) -> Optional[str]: 

+

63 ''' 

+

64 Property method for getting encode data. 

+

65 

+

66 :return: Encoded data | None 

+

67 :rtype: <Optional[str]> 

+

68 :exceptions: None 

+

69 ''' 

+

70 return self._encode_data 

+

71 

+

72 @encode_data.setter 

+

73 def encode_data(self, encode_data_val: Optional[str]) -> None: 

+

74 ''' 

+

75 Property method for setting encode data. 

+

76 

+

77 :param encode_data_val: Encode data | None 

+

78 :type encode_data_val: <Optional[str]> 

+

79 :return: None 

+

80 :exceptions: None 

+

81 ''' 

+

82 if bool(encode_data_val): 

+

83 self._encode_data = encode_data_val 

+

84 

+

85 def _split_data_encode( 

+

86 self, data_to_encode: Optional[str], key: Optional[str] 

+

87 ) -> List[str]: 

+

88 ''' 

+

89 Splitting data for encoding. 

+

90 

+

91 :param data_to_encode: Data which should be encoded | None 

+

92 :type data_to_encode: <Optional[str]> 

+

93 :param key: Key for encoding | None 

+

94 :type key: <Optional[str]> 

+

95 :return: List with data for encoding 

+

96 :rtype: <List[str]> 

+

97 :exceptions: None 

+

98 ''' 

+

99 elements: List[str] = [] 

+

100 if bool(data_to_encode) and bool(key): 

+

101 for i in range(0, len(data_to_encode), len(key)): 

+

102 elements.append(data_to_encode[i: i + len(key)]) 

+

103 return elements 

+

104 

+

105 def encode( 

+

106 self, data_to_encode: Optional[str], key: Optional[str] 

+

107 ) -> None: 

+

108 ''' 

+

109 Encoding data to Vigenere format. 

+

110 

+

111 :param data_to_encode: Data which should be encoded | None 

+

112 :type data_to_encode: <Optional[str]> 

+

113 :param key: Key for encoding | None 

+

114 :type key: <Optional[str]> 

+

115 :return: None 

+

116 :exceptions: None 

+

117 ''' 

+

118 if bool(data_to_encode) and bool(key): 

+

119 encode_list: List[str] = [] 

+

120 for element in self._split_data_encode(data_to_encode, key): 

+

121 for index, letter in enumerate(element): 

+

122 process_index: int = ( 

+

123 LookUpTable.LETTER_TO_INDEX[letter] + 

+

124 LookUpTable.LETTER_TO_INDEX[key[index]] 

+

125 ) % len(LookUpTable.ALPHANUM) 

+

126 encode_list.append( 

+

127 LookUpTable.INDEX_TO_LETTER[process_index] 

+

128 ) 

+

129 self._encode_data = ''.join(encode_list) 

+
+ + + diff --git a/tests/htmlcov/z_75799433d8182c47_key_generator_py.html b/tests/htmlcov/z_75799433d8182c47_key_generator_py.html new file mode 100644 index 0000000..ba0771d --- /dev/null +++ b/tests/htmlcov/z_75799433d8182c47_key_generator_py.html @@ -0,0 +1,216 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.py: 95% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/key_generator.py: + 95% +

+ +

+ 37 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 key_generator.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class KeyGenerator with attribute(s) and method(s). 

+

20 Creates key generator class for Vigener encoding/decoding. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from typing import List, Optional 

+

25 

+

26__author__: str = 'Vladimir Roncevic' 

+

27__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

28__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

29__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

30__version__: str = '1.4.8' 

+

31__maintainer__: str = 'Vladimir Roncevic' 

+

32__email__: str = 'elektron.ronca@gmail.com' 

+

33__status__: str = 'Updated' 

+

34 

+

35 

+

36@dataclass 

+

37class KeyGenerator: 

+

38 ''' 

+

39 Defines class KeyGenerator with attribute(s) and method(s). 

+

40 Creates key generator class for Vigener encoding/decoding. 

+

41 

+

42 It defines: 

+

43 

+

44 :attributes: 

+

45 | _data_len - Data length. 

+

46 | _key - Key for encoding/decoding. 

+

47 :methods: 

+

48 | data - Property methods for data length. 

+

49 | key - Property methods for key. 

+

50 | generate_key - Generates key for encoding/decoding. 

+

51 ''' 

+

52 

+

53 _data_len: Optional[int] = field(default=None) 

+

54 _key: Optional[str] = field(default=None) 

+

55 

+

56 @property 

+

57 def data_len(self) -> Optional[int]: 

+

58 ''' 

+

59 Property method for getting data length. 

+

60 

+

61 :return: Data length | None 

+

62 :rtype: <Optional[int]> 

+

63 :exceptions: None 

+

64 ''' 

+

65 return self._data_len 

+

66 

+

67 @data_len.setter 

+

68 def data_len(self, data_length: Optional[int]) -> None: 

+

69 ''' 

+

70 Property method for setting data length. 

+

71 

+

72 :param data: Data length | None 

+

73 :type data: <Optional[int]> 

+

74 :return: None 

+

75 :exceptions: None 

+

76 ''' 

+

77 if bool(data_length): 

+

78 self._data_len = data_length 

+

79 

+

80 @property 

+

81 def key(self) -> Optional[str]: 

+

82 ''' 

+

83 Property method for getting key. 

+

84 

+

85 :return: Key for encoding/decoding | None 

+

86 :rtype: <Optional[str]> 

+

87 :exceptions: None 

+

88 ''' 

+

89 return self._key 

+

90 

+

91 @key.setter 

+

92 def key(self, key: Optional[str]) -> None: 

+

93 ''' 

+

94 Property method for setting key. 

+

95 

+

96 :param key: Key for encoding/decoding | None 

+

97 :type key: <Optional[str]> 

+

98 :return: None 

+

99 :exceptions: None 

+

100 ''' 

+

101 if bool(key): 

+

102 self._key = key 

+

103 

+

104 def generate_key(self) -> None: 

+

105 ''' 

+

106 Generates key for encoding/decoding. 

+

107 

+

108 :return: None 

+

109 :exceptions: None 

+

110 ''' 

+

111 if bool(self._key): 

+

112 key_list: List[str] = list(self._key) 

+

113 if bool(key_list) and bool(self._data_len): 

+

114 if self._data_len == len(key_list): 

+

115 pass 

+

116 else: 

+

117 for i in range(self._data_len - len(key_list)): 

+

118 key_list.append(key_list[i % len(key_list)]) 

+

119 self._key = ''. join(key_list) 

+
+ + + diff --git a/tests/htmlcov/z_75799433d8182c47_lookup_table_py.html b/tests/htmlcov/z_75799433d8182c47_lookup_table_py.html new file mode 100644 index 0000000..75d4f03 --- /dev/null +++ b/tests/htmlcov/z_75799433d8182c47_lookup_table_py.html @@ -0,0 +1,155 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vigenere/lookup_table.py: + 100% +

+ +

+ 16 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 lookup_table.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class LookUpTable with attribute(s). 

+

20 Creates lookup table class with support for encoding/decoding. 

+

21''' 

+

22 

+

23from typing import List, Dict 

+

24 

+

25__author__: str = 'Vladimir Roncevic' 

+

26__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

27__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

28__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

29__version__: str = '1.4.8' 

+

30__maintainer__: str = 'Vladimir Roncevic' 

+

31__email__: str = 'elektron.ronca@gmail.com' 

+

32__status__: str = 'Updated' 

+

33 

+

34 

+

35class LookUpTable: 

+

36 ''' 

+

37 Defines class LookUpTable with attribute(s) and method(s). 

+

38 Creates lookup table class with support for encoding/decoding. 

+

39 

+

40 It defines: 

+

41 

+

42 :attributes: 

+

43 | ALPHA - Define alphabet for encoding/decoding. 

+

44 | NUM - Defines numeric for encoding/decoding. 

+

45 | WHITE_SPACE - Defines white space for encoding/decoding. 

+

46 | ALPHANUM - Aggregated chars for encoding/decoding. 

+

47 | LETTER_TO_INDEX - Indexed letters for encoding/decoding. 

+

48 | INDEX_TO_LETTER - Indexed letters for encoding/decoding. 

+

49 :methods: 

+

50 | None 

+

51 ''' 

+

52 

+

53 ALPHA: str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 

+

54 NUM: str = '0123456789' 

+

55 WHITE_SPACE: str = ' ' 

+

56 ALPHANUM: str = ''.join([ALPHA, NUM, WHITE_SPACE]) 

+

57 LETTER_TO_INDEX: Dict[str, int] = dict(zip(ALPHANUM, range(len(ALPHANUM)))) 

+

58 INDEX_TO_LETTER: Dict[int, str] = dict(zip(range(len(ALPHANUM)), ALPHANUM)) 

+
+ + + diff --git a/tests/htmlcov/z_7dc3960ecaf412e4___init___py.html b/tests/htmlcov/z_7dc3960ecaf412e4___init___py.html new file mode 100644 index 0000000..917e7f6 --- /dev/null +++ b/tests/htmlcov/z_7dc3960ecaf412e4___init___py.html @@ -0,0 +1,115 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/__init__.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/__init__.py: + 100% +

+ +

+ 0 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 __init__.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18''' 

+
+ + + diff --git a/tests/htmlcov/z_8f54ab6b5b508ca0___init___py.html b/tests/htmlcov/z_8f54ab6b5b508ca0___init___py.html new file mode 100644 index 0000000..4f24da8 --- /dev/null +++ b/tests/htmlcov/z_8f54ab6b5b508ca0___init___py.html @@ -0,0 +1,159 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/b64/__init__.py: + 100% +

+ +

+ 16 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 __init__.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class B64 with attribute(s) and method(s). 

+

20 Creates container class with aggregate backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from typing import List 

+

25 

+

26try: 

+

27 from codecipher.b64.encode import B64Encode 

+

28 from codecipher.b64.decode import B64Decode 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43class B64(B64Encode, B64Decode): 

+

44 ''' 

+

45 Defines class B64 with attribute(s) and method(s). 

+

46 Creates container class with aggregate backend API. 

+

47 

+

48 It defines: 

+

49 

+

50 :attributes: 

+

51 | None. 

+

52 :methods: 

+

53 | __init__ - Initials B64 constructor. 

+

54 ''' 

+

55 

+

56 def __init__(self) -> None: 

+

57 ''' 

+

58 Initials B64 constructor. 

+

59 

+

60 :exceptions: None 

+

61 ''' 

+

62 super().__init__() 

+
+ + + diff --git a/tests/htmlcov/z_8f54ab6b5b508ca0_decode_py.html b/tests/htmlcov/z_8f54ab6b5b508ca0_decode_py.html new file mode 100644 index 0000000..24f7046 --- /dev/null +++ b/tests/htmlcov/z_8f54ab6b5b508ca0_decode_py.html @@ -0,0 +1,185 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.py: 92% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/b64/decode.py: + 92% +

+ +

+ 24 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 decode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class AlephTawBetShinDecode with attribute(s) and method(s). 

+

20 Creates decode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from base64 import b64decode 

+

25from typing import List, Optional 

+

26 

+

27__author__: str = 'Vladimir Roncevic' 

+

28__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

29__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

30__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

31__version__: str = '1.4.8' 

+

32__maintainer__: str = 'Vladimir Roncevic' 

+

33__email__: str = 'elektron.ronca@gmail.com' 

+

34__status__: str = 'Updated' 

+

35 

+

36 

+

37@dataclass 

+

38class B64Decode: 

+

39 ''' 

+

40 Defines class AlephTawBetShinDecode with attribute(s) and method(s). 

+

41 Creates decode class with backend API. 

+

42 

+

43 It defines: 

+

44 

+

45 :attributes: 

+

46 | _decode_data - Data decode container. 

+

47 :methods: 

+

48 | decode_data - Property methods for decode data. 

+

49 | decode - Decode data from AlephTawBetShin format. 

+

50 ''' 

+

51 

+

52 _decode_data: Optional[str] = field(default=None) 

+

53 

+

54 @property 

+

55 def decode_data(self) -> Optional[str]: 

+

56 ''' 

+

57 Property method for getting decode data. 

+

58 

+

59 :return: Decode data in str format | None 

+

60 :rtype: <Optional[str]> 

+

61 :exceptions: None 

+

62 ''' 

+

63 return self._decode_data 

+

64 

+

65 @decode_data.setter 

+

66 def decode_data(self, decode_data: Optional[str]) -> None: 

+

67 ''' 

+

68 Property method for setting decode data. 

+

69 

+

70 :param decode_data: Decoded data 

+

71 :type decode_data: <Optional[str]> 

+

72 :return: None 

+

73 :exceptions: None 

+

74 ''' 

+

75 if bool(decode_data): 

+

76 self._decode_data = decode_data 

+

77 

+

78 def decode(self, data: Optional[str]) -> None: 

+

79 ''' 

+

80 Decoding data from AlephTawBetShin format. 

+

81 

+

82 :param data: Data which should be decoded | None 

+

83 :type data: <Optional[str]> 

+

84 :return: None 

+

85 :exceptions: None 

+

86 ''' 

+

87 if bool(data): 

+

88 self._decode_data = b64decode(data).decode() 

+
+ + + diff --git a/tests/htmlcov/z_8f54ab6b5b508ca0_encode_py.html b/tests/htmlcov/z_8f54ab6b5b508ca0_encode_py.html new file mode 100644 index 0000000..bef1331 --- /dev/null +++ b/tests/htmlcov/z_8f54ab6b5b508ca0_encode_py.html @@ -0,0 +1,185 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.py: 92% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/b64/encode.py: + 92% +

+ +

+ 24 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 encode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class B64Encode with attribute(s) and method(s). 

+

20 Creates encode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from base64 import b64encode 

+

25from typing import List, Optional 

+

26 

+

27__author__: str = 'Vladimir Roncevic' 

+

28__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

29__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

30__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

31__version__: str = '1.4.8' 

+

32__maintainer__: str = 'Vladimir Roncevic' 

+

33__email__: str = 'elektron.ronca@gmail.com' 

+

34__status__: str = 'Updated' 

+

35 

+

36 

+

37@dataclass 

+

38class B64Encode: 

+

39 ''' 

+

40 Defines class B64Encode with attribute(s) and method(s). 

+

41 Creates encode class with backend API. 

+

42 

+

43 It defines: 

+

44 

+

45 :attributes: 

+

46 | _encode_data - Data encode container. 

+

47 :methods: 

+

48 | encode_data - Property methods for encode data. 

+

49 | encode - Encode data to AlephTawBetShin format. 

+

50 ''' 

+

51 

+

52 _encode_data: Optional[str] = field(default=None) 

+

53 

+

54 @property 

+

55 def encode_data(self) -> Optional[str]: 

+

56 ''' 

+

57 Property method for getting encode data. 

+

58 

+

59 :return: Encoded data | None 

+

60 :rtype: <Optional[str]> 

+

61 :exceptions: None 

+

62 ''' 

+

63 return self._encode_data 

+

64 

+

65 @encode_data.setter 

+

66 def encode_data(self, encode_data: Optional[str]) -> None: 

+

67 ''' 

+

68 Property method for setting encode data. 

+

69 

+

70 :param encode_data: Encode data | None 

+

71 :type encode_data: <Optional[str]> 

+

72 :return: None 

+

73 :exceptions: None 

+

74 ''' 

+

75 if bool(encode_data): 

+

76 self._encode_data = encode_data 

+

77 

+

78 def encode(self, data: Optional[str]) -> None: 

+

79 ''' 

+

80 Encoding data to AlephTawBetShin format. 

+

81 

+

82 :param data: Data which should be encoded | None 

+

83 :type data: <Optional[str]> 

+

84 :return: None 

+

85 :exceptions: None 

+

86 ''' 

+

87 if bool(data): 

+

88 self._encode_data = (b64encode(data.encode())).decode() 

+
+ + + diff --git a/tests/htmlcov/z_96938f9400a5cdf6___init___py.html b/tests/htmlcov/z_96938f9400a5cdf6___init___py.html new file mode 100644 index 0000000..b7d9db0 --- /dev/null +++ b/tests/htmlcov/z_96938f9400a5cdf6___init___py.html @@ -0,0 +1,159 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/__init__.py: + 100% +

+ +

+ 16 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 __init__.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class A1z52N62 with attribute(s) and method(s). 

+

20 Creates container class with aggregate backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from typing import List 

+

25 

+

26try: 

+

27 from codecipher.a1z52n62.encode import A1z52N62Encode 

+

28 from codecipher.a1z52n62.decode import A1z52N62Decode 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43class A1z52N62(A1z52N62Encode, A1z52N62Decode): 

+

44 ''' 

+

45 Defines class A1z52N62 with attribute(s) and method(s). 

+

46 Creates container class with aggregate backend API. 

+

47 

+

48 It defines: 

+

49 

+

50 :attributes: 

+

51 | None. 

+

52 :methods: 

+

53 | __init__ - Initials A1z52N62 constructor. 

+

54 ''' 

+

55 

+

56 def __init__(self) -> None: 

+

57 ''' 

+

58 Initials A1z52N62 constructor. 

+

59 

+

60 :exceptions: None 

+

61 ''' 

+

62 super().__init__() 

+
+ + + diff --git a/tests/htmlcov/z_96938f9400a5cdf6_decode_py.html b/tests/htmlcov/z_96938f9400a5cdf6_decode_py.html new file mode 100644 index 0000000..c22a718 --- /dev/null +++ b/tests/htmlcov/z_96938f9400a5cdf6_decode_py.html @@ -0,0 +1,196 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.py: 94% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/decode.py: + 94% +

+ +

+ 32 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 decode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class A1z52N62Decode with attribute(s) and method(s). 

+

20 Creates decode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from typing import List, Optional 

+

25 

+

26__author__: str = 'Vladimir Roncevic' 

+

27__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

28__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

29__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

30__version__: str = '1.4.8' 

+

31__maintainer__: str = 'Vladimir Roncevic' 

+

32__email__: str = 'elektron.ronca@gmail.com' 

+

33__status__: str = 'Updated' 

+

34 

+

35 

+

36@dataclass 

+

37class A1z52N62Decode: 

+

38 ''' 

+

39 Defines class A1z52N62Decode with attribute(s) and method(s). 

+

40 Creates decode class with backend API. 

+

41 

+

42 It defines: 

+

43 

+

44 :attributes: 

+

45 | _decode_data - Data decode container. 

+

46 :methods: 

+

47 | decode_data - Property methods for decode data. 

+

48 | decode - Decode data from A1z52N62 format. 

+

49 ''' 

+

50 

+

51 _decode_data: Optional[str] = field(default=None) 

+

52 

+

53 @property 

+

54 def decode_data(self) -> Optional[str]: 

+

55 ''' 

+

56 Property method for getting decode data. 

+

57 

+

58 :return: Decode data in str format | None 

+

59 :rtype: <Optional[str]> 

+

60 :exceptions: None 

+

61 ''' 

+

62 return self._decode_data 

+

63 

+

64 @decode_data.setter 

+

65 def decode_data(self, decode_data: Optional[str]) -> None: 

+

66 ''' 

+

67 Property method for setting decode data. 

+

68 

+

69 :param decode_data: Decoded data | None 

+

70 :type decode_data: <Optional[str]> 

+

71 :return: None 

+

72 :exceptions: None 

+

73 ''' 

+

74 if bool(decode_data): 

+

75 self._decode_data = decode_data 

+

76 

+

77 def decode(self, data: Optional[str]) -> None: 

+

78 ''' 

+

79 Decoding data from A1z52N62 format. 

+

80 

+

81 :param data: Data which should be decoded | None 

+

82 :type data: <Optional[str]> 

+

83 :return: None 

+

84 :exceptions: None 

+

85 ''' 

+

86 if bool(data): 

+

87 decode_list: List[str] = [] 

+

88 for element in data.split(' - '): 

+

89 if element.isnumeric(): 

+

90 if int(element) <= 52: 

+

91 if int(element) <= 26: 

+

92 decode_list.append(chr(int(element) + 64)) 

+

93 else: 

+

94 decode_list.append(chr(int(element) + 96 - 27)) 

+

95 else: 

+

96 decode_list.append(str(int(element) - 53)) 

+

97 else: 

+

98 decode_list.append(element) 

+

99 self._decode_data = ''.join(decode_list) 

+
+ + + diff --git a/tests/htmlcov/z_96938f9400a5cdf6_encode_py.html b/tests/htmlcov/z_96938f9400a5cdf6_encode_py.html new file mode 100644 index 0000000..1a5791e --- /dev/null +++ b/tests/htmlcov/z_96938f9400a5cdf6_encode_py.html @@ -0,0 +1,196 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.py: 94% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/a1z52n62/encode.py: + 94% +

+ +

+ 32 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 encode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class A1z52N62Encode with attribute(s) and method(s). 

+

20 Creates encode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from typing import List, Optional 

+

25 

+

26__author__: str = 'Vladimir Roncevic' 

+

27__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

28__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

29__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

30__version__: str = '1.4.8' 

+

31__maintainer__: str = 'Vladimir Roncevic' 

+

32__email__: str = 'elektron.ronca@gmail.com' 

+

33__status__: str = 'Updated' 

+

34 

+

35 

+

36@dataclass 

+

37class A1z52N62Encode: 

+

38 ''' 

+

39 Defines class A1z52N62Encode with attribute(s) and method(s). 

+

40 Creates encode class with backend API. 

+

41 

+

42 It defines: 

+

43 

+

44 :attributes: 

+

45 | _encode_data - Data encode container. 

+

46 :methods: 

+

47 | encode_data - Property methods for encode data. 

+

48 | encode - Encode data to A1z52N62 format. 

+

49 ''' 

+

50 

+

51 _encode_data: Optional[str] = field(default=None) 

+

52 

+

53 @property 

+

54 def encode_data(self) -> Optional[str]: 

+

55 ''' 

+

56 Property method for getting encode data. 

+

57 

+

58 :return: Encoded data 

+

59 :rtype: <Optional[str]> 

+

60 :exceptions: None 

+

61 ''' 

+

62 return self._encode_data 

+

63 

+

64 @encode_data.setter 

+

65 def encode_data(self, encode_data: Optional[str]) -> None: 

+

66 ''' 

+

67 Property method for setting encode data. 

+

68 

+

69 :param encode_data: Encode data | None 

+

70 :type encode_data: <Optional[str]> 

+

71 :return: None 

+

72 :exceptions: None 

+

73 ''' 

+

74 if bool(encode_data): 

+

75 self._encode_data = encode_data 

+

76 

+

77 def encode(self, data: Optional[str]) -> None: 

+

78 ''' 

+

79 Encoding data to A1z52N62 format. 

+

80 

+

81 :param data: Data which should be encoded | None 

+

82 :type data: <Optional[str]> 

+

83 :return: None 

+

84 :exceptions: None 

+

85 ''' 

+

86 if bool(data): 

+

87 encode_list: List[str] = [] 

+

88 for element in data: 

+

89 if element.isalpha(): 

+

90 if element.isupper(): 

+

91 encode_list.append(str(ord(element) - 64)) 

+

92 else: 

+

93 encode_list.append(str(ord(element) - 96 + 27)) 

+

94 else: 

+

95 if element.isnumeric(): 

+

96 encode_list.append(str(int(element) + 53)) 

+

97 else: 

+

98 encode_list.append(element) 

+

99 self._encode_data = ' - '.join(encode_list) 

+
+ + + diff --git a/tests/htmlcov/z_9927f90504198b80___init___py.html b/tests/htmlcov/z_9927f90504198b80___init___py.html new file mode 100644 index 0000000..db404a7 --- /dev/null +++ b/tests/htmlcov/z_9927f90504198b80___init___py.html @@ -0,0 +1,159 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/__init__.py: + 100% +

+ +

+ 16 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 __init__.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class AlephTawBetShin with attribute(s) and method(s). 

+

20 Creates container class with aggregate backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from typing import List 

+

25 

+

26try: 

+

27 from codecipher.atbs.encode import AlephTawBetShinEncode 

+

28 from codecipher.atbs.decode import AlephTawBetShinDecode 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43class AlephTawBetShin(AlephTawBetShinEncode, AlephTawBetShinDecode): 

+

44 ''' 

+

45 Defines class AlephTawBetShin with attribute(s) and method(s). 

+

46 Creates container class with aggregate backend API. 

+

47 

+

48 It defines: 

+

49 

+

50 :attributes: 

+

51 | None. 

+

52 :methods: 

+

53 | __init__ - Initials AlephTawBetShin constructor. 

+

54 ''' 

+

55 

+

56 def __init__(self) -> None: 

+

57 ''' 

+

58 Initials AlephTawBetShin constructor. 

+

59 

+

60 :exceptions: None 

+

61 ''' 

+

62 super().__init__() 

+
+ + + diff --git a/tests/htmlcov/z_9927f90504198b80_decode_py.html b/tests/htmlcov/z_9927f90504198b80_decode_py.html new file mode 100644 index 0000000..90c1414 --- /dev/null +++ b/tests/htmlcov/z_9927f90504198b80_decode_py.html @@ -0,0 +1,194 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.py: 93% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/decode.py: + 93% +

+ +

+ 29 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 decode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class AlephTawBetShinDecode with attribute(s) and method(s). 

+

20 Creates decode class with backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from dataclasses import dataclass, field 

+

25from typing import List, Optional 

+

26 

+

27try: 

+

28 from codecipher.atbs.lookup_table import LOOKUP_TABLE 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43@dataclass 

+

44class AlephTawBetShinDecode: 

+

45 ''' 

+

46 Defines class AlephTawBetShinDecode with attribute(s) and method(s). 

+

47 Creates decode class with backend API. 

+

48 

+

49 It defines: 

+

50 

+

51 :attributes: 

+

52 | _decode_data - Data decode container. 

+

53 :methods: 

+

54 | decode_data - Property methods for decode data. 

+

55 | decode - Decode data from AlephTawBetShin format. 

+

56 ''' 

+

57 

+

58 _decode_data: Optional[str] = field(default=None) 

+

59 

+

60 @property 

+

61 def decode_data(self) -> Optional[str]: 

+

62 ''' 

+

63 Property method for getting decode data. 

+

64 

+

65 :return: Decode data in str format | None 

+

66 :rtype: <Optional[str]> 

+

67 :exceptions: None 

+

68 ''' 

+

69 return self._decode_data 

+

70 

+

71 @decode_data.setter 

+

72 def decode_data(self, decode_data: Optional[str]) -> None: 

+

73 ''' 

+

74 Property method for setting decode data. 

+

75 

+

76 :param decode_data: Decoded data | None 

+

77 :type decode_data: <Optional[str]> 

+

78 :return: None 

+

79 :exceptions: None 

+

80 ''' 

+

81 if bool(decode_data): 

+

82 self._decode_data = decode_data 

+

83 

+

84 def decode(self, data: Optional[str]) -> None: 

+

85 ''' 

+

86 Decoding data from AlephTawBetShin format. 

+

87 

+

88 :param data: Data which should be decoded | None 

+

89 :type data: <Optional[str]> 

+

90 :return: None 

+

91 :exceptions: None 

+

92 ''' 

+

93 if bool(data): 

+

94 decode_list: List[str] = [] 

+

95 for element in data: 

+

96 decode_list.append(LOOKUP_TABLE[element]) 

+

97 self._decode_data = ''.join(decode_list) 

+
+ + + diff --git a/tests/htmlcov/z_9927f90504198b80_encode_py.html b/tests/htmlcov/z_9927f90504198b80_encode_py.html new file mode 100644 index 0000000..eca89be --- /dev/null +++ b/tests/htmlcov/z_9927f90504198b80_encode_py.html @@ -0,0 +1,194 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.py: 93% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/encode.py: + 93% +

+ +

+ 29 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 encode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class AlephTawBetShinEncode with attribute(s) and method(s). 

+

20 Creates encode class with backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from dataclasses import dataclass, field 

+

25from typing import List, Optional 

+

26 

+

27try: 

+

28 from codecipher.atbs.lookup_table import LOOKUP_TABLE 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43@dataclass 

+

44class AlephTawBetShinEncode: 

+

45 ''' 

+

46 Defines class AlephTawBetShinEncode with attribute(s) and method(s). 

+

47 Creates encode class with backend API. 

+

48 

+

49 It defines: 

+

50 

+

51 :attributes: 

+

52 | _encode_data - Data encode container. 

+

53 :methods: 

+

54 | encode_data - Property methods for encode data. 

+

55 | encode - Encode data to AlephTawBetShin format. 

+

56 ''' 

+

57 

+

58 _encode_data: Optional[str] = field(default=None) 

+

59 

+

60 @property 

+

61 def encode_data(self) -> Optional[str]: 

+

62 ''' 

+

63 Property method for getting encode data. 

+

64 

+

65 :return: Encoded data | None 

+

66 :rtype: <Optional[str]> 

+

67 :exceptions: None 

+

68 ''' 

+

69 return self._encode_data 

+

70 

+

71 @encode_data.setter 

+

72 def encode_data(self, encode_data: Optional[str]) -> None: 

+

73 ''' 

+

74 Property method for setting encode data. 

+

75 

+

76 :param encode_data: Encode data | None 

+

77 :type encode_data: <Optional[str]> 

+

78 :return: None 

+

79 :exceptions: None 

+

80 ''' 

+

81 if bool(encode_data): 

+

82 self._encode_data = encode_data 

+

83 

+

84 def encode(self, data: Optional[str]) -> None: 

+

85 ''' 

+

86 Encoding data to AlephTawBetShin format. 

+

87 

+

88 :param data: Data which should be encoded | None 

+

89 :type data: <Optional[str]> 

+

90 :return: None 

+

91 :exceptions: None 

+

92 ''' 

+

93 if bool(data): 

+

94 encode_list: List[str] = [] 

+

95 for element in data: 

+

96 encode_list.append(LOOKUP_TABLE[element]) 

+

97 self._encode_data = ''.join(encode_list) 

+
+ + + diff --git a/tests/htmlcov/z_9927f90504198b80_lookup_table_py.html b/tests/htmlcov/z_9927f90504198b80_lookup_table_py.html new file mode 100644 index 0000000..18feee4 --- /dev/null +++ b/tests/htmlcov/z_9927f90504198b80_lookup_table_py.html @@ -0,0 +1,144 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/lookup_table.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/atbs/lookup_table.py: + 100% +

+ +

+ 10 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 lookup_table.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines dict LOOKUP_TABLE for AlephTawBetShin format. 

+

20''' 

+

21 

+

22from typing import List, Dict 

+

23 

+

24__author__: str = 'Vladimir Roncevic' 

+

25__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

26__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

27__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

28__version__: str = '1.4.8' 

+

29__maintainer__: str = 'Vladimir Roncevic' 

+

30__email__: str = 'elektron.ronca@gmail.com' 

+

31__status__: str = 'Updated' 

+

32 

+

33LOOKUP_TABLE: Dict[str, str] = { 

+

34 'A': 'Z', 'B': 'Y', 'C': 'X', 'D': 'W', 'E': 'V', 

+

35 'F': 'U', 'G': 'T', 'H': 'S', 'I': 'R', 'J': 'Q', 

+

36 'K': 'P', 'L': 'O', 'M': 'N', 'N': 'M', 'O': 'L', 

+

37 'P': 'K', 'Q': 'J', 'R': 'I', 'S': 'H', 'T': 'G', 

+

38 'U': 'F', 'V': 'E', 'W': 'D', 'X': 'C', 'Y': 'B', 

+

39 'Z': 'A', 'a': 'z', 'b': 'y', 'c': 'x', 'd': 'w', 

+

40 'e': 'v', 'f': 'u', 'g': 't', 'h': 's', 'i': 'r', 

+

41 'j': 'q', 'k': 'p', 'l': 'o', 'm': 'n', 'n': 'm', 

+

42 'o': 'l', 'p': 'k', 'q': 'j', 'r': 'i', 's': 'h', 

+

43 't': 'g', 'u': 'f', 'v': 'e', 'w': 'd', 'x': 'c', 

+

44 'y': 'b', 'z': 'a', ' ': ' ', '\n': '\n', '0': '9', 

+

45 '1': '8', '2': '7', '3': '6', '4': '5', '5': '4', 

+

46 '6': '3', '7': '2', '8': '1', '9': '0' 

+

47} 

+
+ + + diff --git a/tests/htmlcov/z_aba196749d301797___init___py.html b/tests/htmlcov/z_aba196749d301797___init___py.html new file mode 100644 index 0000000..faeae56 --- /dev/null +++ b/tests/htmlcov/z_aba196749d301797___init___py.html @@ -0,0 +1,159 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.py: 100% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vernam/__init__.py: + 100% +

+ +

+ 16 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 __init__.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class Vernam with attribute(s) and method(s). 

+

20 Creates container class with aggregate backend API. 

+

21''' 

+

22 

+

23import sys 

+

24from typing import List 

+

25 

+

26try: 

+

27 from codecipher.vernam.encode import VernamEncode 

+

28 from codecipher.vernam.decode import VernamDecode 

+

29except ImportError as ats_error_message: # pragma: no cover 

+

30 # Force exit python ####################################################### 

+

31 sys.exit(f'\n{__file__}\n{ats_error_message}\n') # pragma: no cover 

+

32 

+

33__author__: str = 'Vladimir Roncevic' 

+

34__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

35__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

36__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

37__version__: str = '1.4.8' 

+

38__maintainer__: str = 'Vladimir Roncevic' 

+

39__email__: str = 'elektron.ronca@gmail.com' 

+

40__status__: str = 'Updated' 

+

41 

+

42 

+

43class Vernam(VernamEncode, VernamDecode): 

+

44 ''' 

+

45 Defines class Vernam with attribute(s) and method(s). 

+

46 Creates container class with aggregate backend API. 

+

47 

+

48 It defines: 

+

49 

+

50 :attributes: 

+

51 | None. 

+

52 :methods: 

+

53 | __init__ - Initials Vernam constructor. 

+

54 ''' 

+

55 

+

56 def __init__(self) -> None: 

+

57 ''' 

+

58 Initials Vernam constructor. 

+

59 

+

60 :exceptions: None 

+

61 ''' 

+

62 super().__init__() 

+
+ + + diff --git a/tests/htmlcov/z_aba196749d301797_decode_py.html b/tests/htmlcov/z_aba196749d301797_decode_py.html new file mode 100644 index 0000000..e2d844a --- /dev/null +++ b/tests/htmlcov/z_aba196749d301797_decode_py.html @@ -0,0 +1,201 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.py: 94% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vernam/decode.py: + 94% +

+ +

+ 36 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 decode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class VernamDecode with attribute(s) and method(s). 

+

20 Creates decode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from typing import List, Optional 

+

25 

+

26__author__: str = 'Vladimir Roncevic' 

+

27__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

28__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

29__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

30__version__: str = '1.4.8' 

+

31__maintainer__: str = 'Vladimir Roncevic' 

+

32__email__: str = 'elektron.ronca@gmail.com' 

+

33__status__: str = 'Updated' 

+

34 

+

35 

+

36@dataclass 

+

37class VernamDecode: 

+

38 ''' 

+

39 Defines class VernamDecode with attribute(s) and method(s). 

+

40 Creates decode class with backend API. 

+

41 

+

42 It defines: 

+

43 

+

44 :attributes: 

+

45 | _decode_data - Data decode container. 

+

46 :methods: 

+

47 | decode_data - Property methods for decode data. 

+

48 | decode - Decode data from Vernam format. 

+

49 ''' 

+

50 

+

51 _decode_data: Optional[str] = field(default=None) 

+

52 

+

53 @property 

+

54 def decode_data(self) -> Optional[str]: 

+

55 ''' 

+

56 Property method for getting decode data. 

+

57 

+

58 :return: Decode data in str format | None 

+

59 :rtype: <Optional[str]> 

+

60 :exceptions: None 

+

61 ''' 

+

62 return self._decode_data 

+

63 

+

64 @decode_data.setter 

+

65 def decode_data(self, decode_data: Optional[str]) -> None: 

+

66 ''' 

+

67 Property method for setting decode data. 

+

68 

+

69 :param decode_data: Decoded data | None 

+

70 :type decode_data: <Optional[str]> 

+

71 :return: None 

+

72 :exceptions: None 

+

73 ''' 

+

74 if bool(decode_data): 

+

75 self._decode_data = decode_data 

+

76 

+

77 def decode(self, data: Optional[str], key: Optional[str]) -> None: 

+

78 ''' 

+

79 Decoding data from Vernam format. 

+

80 

+

81 :param data: Data which should be decoded | None 

+

82 :type data: <Optional[str]> 

+

83 :param key: Key for decoding | None 

+

84 :type key: <Optional[str]> 

+

85 :return: None 

+

86 :exceptions: None 

+

87 ''' 

+

88 if bool(data) and bool(key): 

+

89 decode_list: List[str] = [] 

+

90 key = (key * (len(data) // len(key))) + key[:len(data) % len(key)] 

+

91 for i, element in enumerate(data): 

+

92 if element.isalpha() and key[i].isalpha(): 

+

93 key_code: int = ord(key[i].lower()) - 96 

+

94 code: int = ord(element.lower()) - 96 

+

95 ans: int = code - key_code + 1 

+

96 if ans < 1: 

+

97 ans += 26 

+

98 if element.isupper(): 

+

99 decode_list.append(chr(ans + 96).upper()) 

+

100 else: 

+

101 decode_list.append(chr(ans + 96)) 

+

102 else: 

+

103 decode_list.append(element) 

+

104 self._decode_data = ''.join(decode_list) 

+
+ + + diff --git a/tests/htmlcov/z_aba196749d301797_encode_py.html b/tests/htmlcov/z_aba196749d301797_encode_py.html new file mode 100644 index 0000000..f0cb4aa --- /dev/null +++ b/tests/htmlcov/z_aba196749d301797_encode_py.html @@ -0,0 +1,201 @@ + + + + + Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.py: 94% + + + + + +
+
+

+ Coverage for /data/dev/python/codecipher/github/codecipher/codecipher/vernam/encode.py: + 94% +

+ +

+ 36 statements   + + + +

+

+ « prev     + ^ index     + » next +       + coverage.py v7.6.10, + created at 2025-11-01 07:55 +0100 +

+ +
+
+
+

1# -*- coding: UTF-8 -*- 

+

2 

+

3''' 

+

4Module 

+

5 encode.py 

+

6Copyright 

+

7 Copyright (C) 2021 - 2025 Vladimir Roncevic <elektron.ronca@gmail.com> 

+

8 codecipher is free software: you can redistribute it and/or modify it 

+

9 under the terms of the GNU General Public License as published by the 

+

10 Free Software Foundation, either version 3 of the License, or 

+

11 (at your option) any later version. 

+

12 codecipher is distributed in the hope that it will be useful, but 

+

13 WITHOUT ANY WARRANTY; without even the implied warranty of 

+

14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

+

15 See the GNU General Public License for more details. 

+

16 You should have received a copy of the GNU General Public License along 

+

17 with this program. If not, see <http://www.gnu.org/licenses/>. 

+

18Info 

+

19 Defines class VernamEncode with attribute(s) and method(s). 

+

20 Creates encode class with backend API. 

+

21''' 

+

22 

+

23from dataclasses import dataclass, field 

+

24from typing import List, Optional 

+

25 

+

26__author__: str = 'Vladimir Roncevic' 

+

27__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' 

+

28__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] 

+

29__license__: str = 'https://github.com/electux/codecipher/blob/main/LICENSE' 

+

30__version__: str = '1.4.8' 

+

31__maintainer__: str = 'Vladimir Roncevic' 

+

32__email__: str = 'elektron.ronca@gmail.com' 

+

33__status__: str = 'Updated' 

+

34 

+

35 

+

36@dataclass 

+

37class VernamEncode: 

+

38 ''' 

+

39 Defines class VernamEncode with attribute(s) and method(s). 

+

40 Creates encode class with backend API. 

+

41 

+

42 It defines: 

+

43 

+

44 :attributes: 

+

45 | _encode_data - Data encode container. 

+

46 :methods: 

+

47 | encode_data - Property methods for encode data. 

+

48 | encode - Encode data to Vernam format. 

+

49 ''' 

+

50 

+

51 _encode_data: Optional[str] = field(default=None) 

+

52 

+

53 @property 

+

54 def encode_data(self) -> Optional[str]: 

+

55 ''' 

+

56 Property method for getting encode data. 

+

57 

+

58 :return: Encoded data | None 

+

59 :rtype: <Optional[str]> 

+

60 :exceptions: None 

+

61 ''' 

+

62 return self._encode_data 

+

63 

+

64 @encode_data.setter 

+

65 def encode_data(self, encode_data: Optional[str]) -> None: 

+

66 ''' 

+

67 Property method for setting encode data. 

+

68 

+

69 :param encode_data: Encode data | None 

+

70 :type encode_data: <Optional[str]> 

+

71 :return: None 

+

72 :exceptions: None 

+

73 ''' 

+

74 if bool(encode_data): 

+

75 self._encode_data = encode_data 

+

76 

+

77 def encode(self, data: Optional[str], key: Optional[str]) -> None: 

+

78 ''' 

+

79 Encoding data to Vernam format. 

+

80 

+

81 :param data: Data which should be encoded | None 

+

82 :type data: <Optional[str]> 

+

83 :param key: Key for encoding | None 

+

84 :type key: <Optional[str]> 

+

85 :return: None 

+

86 :exceptions: None 

+

87 ''' 

+

88 if bool(data) and bool(key): 

+

89 encode_list: List[str] = [] 

+

90 key = (key * (len(data) // len(key))) + key[:len(data) % len(key)] 

+

91 for i, element in enumerate(data): 

+

92 if element.isalpha() and key[i].isalpha(): 

+

93 key_code: int = ord(key[i].lower()) - 96 

+

94 text_code: int = ord(element.lower()) - 96 

+

95 ans: int = text_code + key_code - 1 

+

96 if ans > 26: 

+

97 ans -= 26 

+

98 if element.isupper(): 

+

99 encode_list.append(chr(ans + 96).upper()) 

+

100 else: 

+

101 encode_list.append(chr(ans + 96)) 

+

102 else: 

+

103 encode_list.append(element) 

+

104 self._encode_data = ''.join(encode_list) 

+
+ + + diff --git a/tests/run_coverage.sh b/tests/run_coverage.sh index a2ccf66..bd38487 100755 --- a/tests/run_coverage.sh +++ b/tests/run_coverage.sh @@ -7,5 +7,11 @@ # @author Vladimir Roncevic # +rm -rf htmlcov codecipher_coverage.xml codecipher_coverage.json .coverage python3 -m coverage run -m --source=../codecipher unittest discover -s ./ -p '*_test.py' -vvv -python3 -m coverage html +python3 -m coverage html -d htmlcov +python3 -m coverage xml -o codecipher_coverage.xml +python3 -m coverage json -o codecipher_coverage.json +python3 -m coverage report --format=markdown -m +python3 ats_coverage.py -n codecipher +echo "Done" diff --git a/tests/vernam_test.py b/tests/vernam_test.py index b2bfef8..17d4fab 100644 --- a/tests/vernam_test.py +++ b/tests/vernam_test.py @@ -4,7 +4,7 @@ Module vernam_test.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -32,14 +32,14 @@ # Force close python test ################################################# sys.exit(f'\n{__file__}\n{test_error_message}\n') -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/dev/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/dev/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class VernamTestCase(unittest.TestCase): diff --git a/tests/vigenere_test.py b/tests/vigenere_test.py index 1e4bafb..5d0e125 100644 --- a/tests/vigenere_test.py +++ b/tests/vigenere_test.py @@ -4,7 +4,7 @@ Module vigenere_test.py Copyright - Copyright (C) 2021 - 2024 Vladimir Roncevic + Copyright (C) 2021 - 2025 Vladimir Roncevic codecipher is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -32,14 +32,14 @@ # Force close python test ################################################# sys.exit(f'\n{__file__}\n{test_error_message}\n') -__author__ = 'Vladimir Roncevic' -__copyright__ = '(C) 2024, https://electux.github.io/codecipher' +__author__: str = 'Vladimir Roncevic' +__copyright__: str = '(C) 2025, https://electux.github.io/codecipher' __credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation'] -__license__ = 'https://github.com/electux/codecipher/blob/dev/LICENSE' -__version__ = '1.4.7' -__maintainer__ = 'Vladimir Roncevic' -__email__ = 'elektron.ronca@gmail.com' -__status__ = 'Updated' +__license__: str = 'https://github.com/electux/codecipher/blob/dev/LICENSE' +__version__: str = '1.4.8' +__maintainer__: str = 'Vladimir Roncevic' +__email__: str = 'elektron.ronca@gmail.com' +__status__: str = 'Updated' class VigenereTestCase(unittest.TestCase):