Skip to main content

Computing Hermite normal form and Smith normal form.

Project description

hsnf

testing MIT License PyPI - Python Version PyPI version PyPI - Downloads

Computing Hermite normal form and Smith normal form with transformation matrices.

Usage

import numpy as np
from hsnf import column_style_hermite_normal_form, row_style_hermite_normal_form, smith_normal_form

# Integer matrix to be decomposed
M = np.array(
    [
        [-6, 111, -36, 6],
        [5, -672, 210, 74],
        [0, -255, 81, 24],
    ]
)

# Smith normal form
D, L, R = smith_normal_form(M)
"""
D = array([
[   1    0    0    0]
[   0    3    0    0]
[   0    0 2079    0]])
"""
assert np.allclose(L @ M @ R, D)
assert np.around(np.abs(np.linalg.det(L))) == 1  # unimodular
assert np.around(np.abs(np.linalg.det(R))) == 1  # unimodular

# Row-style hermite normal form
H, L = row_style_hermite_normal_form(M)
"""
H = array([
[     1      0    420  -2522]
[     0      3   1809 -10860]
[     0      0   2079 -12474]])
"""
assert np.allclose(L @ M, H)
assert np.around(np.abs(np.linalg.det(L))) == 1  # unimodular

# Column-style hermite normal form
H, R = column_style_hermite_normal_form(M)
"""
H = array([
[   3    0    0    0]
[   0    1    0    0]
[1185  474 2079    0]])
"""
assert np.allclose(np.dot(M, R), H)
assert np.around(np.abs(np.linalg.det(R))) == 1  # unimodular

Installation

hsnf works with Python3.8+ and can be installed via PyPI:

pip install hsnf

or in local:

git clone git@github.com:lan496/hsnf.git
cd hsnf
pip install .

References

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hsnf-0.3.12.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

hsnf-0.3.12-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file hsnf-0.3.12.tar.gz.

File metadata

  • Download URL: hsnf-0.3.12.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.13

File hashes

Hashes for hsnf-0.3.12.tar.gz
Algorithm Hash digest
SHA256 b3d65a281f495e45a7840a18b726c432a5061a9261bd915a795a8e2ca29bb387
MD5 63a4eb3b6fcb5a7346e9101589ad7919
BLAKE2b-256 e0c1db042a752e7b73042d4093cb16a82a097d00df467bd9bef1cc10f5c62d2c

See more details on using hashes here.

File details

Details for the file hsnf-0.3.12-py3-none-any.whl.

File metadata

  • Download URL: hsnf-0.3.12-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.13

File hashes

Hashes for hsnf-0.3.12-py3-none-any.whl
Algorithm Hash digest
SHA256 cda5038495281826663c0870db828a917d91ecb7f41a01b57ae51017c7d2bc07
MD5 ccdb98fa9c245ef244ba85bc159a3ebc
BLAKE2b-256 435c7d5516ea7136d900e0d94e24b3e7a04b01f5ea9030c584fcdb985d52d5fc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page