Skip to main content

Computing Hermite normal form and Smith normal form.

Project description

hsnf

MIT License

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

Github: https://github.com/lan496/hsnf

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.7+ and can be installed as follows.

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

Uploaded Source

Built Distribution

hsnf-0.3.7-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for hsnf-0.3.7.tar.gz
Algorithm Hash digest
SHA256 d9344dbc7a6f35b298afcf28f99b8543996b7b9bc6385c03780d4325624a9d6c
MD5 a4f98d42e5b966264729896a76a77e9c
BLAKE2b-256 b07e28ba2711cf3e7b117f902c23b9841fca62629724439ae327c76339c11825

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for hsnf-0.3.7-py3-none-any.whl
Algorithm Hash digest
SHA256 869d421692e5e8186147fa3fa1f17ca6d1676835e525a8d89a3aa61a8ffefb07
MD5 73a76c4f0ab7cd106c82c957aabcddb6
BLAKE2b-256 4d41772128b193b13785935e75069c3c40c56d94838f2aac4319ae8b04a96c41

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