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.13.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: hsnf-0.3.13.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.13.tar.gz
Algorithm Hash digest
SHA256 f85bfb930456fcd4c27dd5068aeda0a89b2cbfe91643886757c3648414d15115
MD5 2e6a84455d676af0b60234577b0abdaf
BLAKE2b-256 f8da72efd29d2465558a211cf4d43b4b821260cffad832f16eaeb0eeca6c8a89

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hsnf-0.3.13-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.13-py3-none-any.whl
Algorithm Hash digest
SHA256 420df995a3cc5c536a127cc2ed91e6f5d07df33e6d29c6bd960ed1e831fac096
MD5 e9ed41e03cc9c21e3d89ed1a88b58d93
BLAKE2b-256 69589cd2d3a62f07e382b2e1cdfa484aff33f24427d17f8ee8f6cc8ccc4809cc

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