Skip to main content

A Python package for abstract linear algebra

Project description

ablina

Documentation

https://ablina.readthedocs.io/en/latest

Installation

Ablina can be installed using pip:

pip install ablina

or by directly cloning the git repository:

git clone https://github.com/daniyal1249/ablina.git

and running the following in the cloned repo:

pip install .

Overview

>>> from ablina import *

Define a Vector Space

To define a subspace of $ℝ^n$ or $ℂ^n$, use fn

>>> V = fn('V', R, 3)
>>> print(V.info())
V (Subspace of R^3)
-------------------
Field      R
Identity   [0, 0, 0]
Basis      [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
Dimension  3
Vector     [c0, c1, c2]

You can provide a list of constraints

>>> U = fn('U', R, 3, constraints=['v0 == 0', '2*v1 == v2'])
>>> print(U.info())
U (Subspace of R^3)
-------------------
Field      R
Identity   [0, 0, 0]
Basis      [[0, 1, 2]]
Dimension  1
Vector     [0, c0, 2*c0]

Or specify a basis

>>> W = fn('W', R, 3, basis=[[1, 0, 0], [0, 1, 0]])
>>> print(W.info())
W (Subspace of R^3)
-------------------
Field      R
Identity   [0, 0, 0]
Basis      [[1, 0, 0], [0, 1, 0]]
Dimension  2
Vector     [c0, c1, 0]

Operations with Vectors

Check whether a vector is an element of a vector space

>>> [1, 2, 0] in W
True
>>> [1, 2, 1] in W
False

Generate a random vector from a vector space

>>> U.vector()
[0, 2, 4]
>>> U.vector(arbitrary=True)
[0, c0, 2*c0]

Find the coordinate vector representation of a vector

>>> W.to_coordinate([1, 2, 0])
[1, 2]
>>> W.from_coordinate([1, 2])
[1, 2, 0]
>>> W.to_coordinate([1, 2, 0], basis=[[1, 1, 0], [1, -1, 0]])
[3/2, -1/2]

Check whether a list of vectors is linearly independent

>>> V.is_independent([1, 1, 0], [1, 0, 0])
True
>>> V.is_independent([1, 2, 3], [2, 4, 6])
False

Operations on Vector Spaces

Check for equality of two vector spaces

>>> U == W
False

Check whether a vector space is a subspace of another

>>> V.is_subspace(U)
True
>>> U.is_subspace(V)
False

Take the sum of two vector spaces

>>> X = U.sum(W)
>>> print(X.info())
U + W (Subspace of R^3)
-----------------------
Field      R
Identity   [0, 0, 0]
Basis      [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
Dimension  3
Vector     [c0, c1, c2]

Take the intersection of two vector spaces

>>> X = U.intersection(W)
>>> print(X.info())
U ∩ W (Subspace of R^3)
-----------------------
Field      R
Identity   [0, 0, 0]
Basis      []
Dimension  0
Vector     [0, 0, 0]

Take the span of a list of vectors

>>> S = V.span('S', [1, 2, 3], [4, 5, 6])
>>> print(S.info())
S (Subspace of R^3)
-------------------
Field      R
Identity   [0, 0, 0]
Basis      [[1, 0, -1], [0, 1, 2]]
Dimension  2
Vector     [c0, c1, -c0 + 2*c1]

Define a Linear Map

>>> def mapping(vec):
>>>     return [vec[0], vec[1], 0]
>>>
>>> T = LinearMap('T', domain=V, codomain=W, mapping=mapping)
>>> print(T.info())
T : V → W
---------
Field        R
Rank         2
Nullity      1
Injective?   False
Surjective?  True
Bijective?   False
Matrix       [[1, 0, 0], [0, 1, 0]]
>>> T([0, 0, 0])
[0, 0, 0]
>>> T([1, 2, 3])
[1, 2, 0]

Operations with Linear Maps

Find the image of a linear map

>>> im = T.image()
>>> print(im.info())
im(T) (Subspace of R^3)
-----------------------
Field      R
Identity   [0, 0, 0]
Basis      [[1, 0, 0], [0, 1, 0]]
Dimension  2
Vector     [c0, c1, 0]

Find the kernel of a linear map

>>> ker = T.kernel()
>>> print(ker.info())
ker(T) (Subspace of R^3)
------------------------
Field      R
Identity   [0, 0, 0]
Basis      [[0, 0, 1]]
Dimension  1
Vector     [0, 0, c0]

Define an Inner Product

Here we define the standard dot product

>>> def mapping(vec1, vec2):
>>>     return sum(i * j for i, j in zip(vec1, vec2))
>>>
>>> dot = InnerProduct('dot', vectorspace=V, mapping=mapping)
>>> print(dot.info())
dot : V × V → R
---------------
Orthonormal Basis  [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
Matrix             [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
>>> dot([1, 2, 3], [1, 2, 3])
14

Operations with Inner Products

Compute the norm of a vector

>>> dot.norm([1, 2, 3])
sqrt(14)

Check whether a list of vectors is pairwise orthogonal

>>> dot.is_orthogonal([1, 2, 3], [4, 5, 6])
False
>>> dot.is_orthogonal([0, 0, 0], [1, 2, 3])
True

Check whether a list of vectors is orthonormal

>>> dot.is_orthonormal([1, 0, 0], [0, 1, 0], [0, 0, 1])
True

Take the orthogonal complement of a vector space

>>> X = dot.ortho_complement(U)
>>> print(X.info())
perp(U) (Subspace of R^3)
-------------------------
Field      R
Identity   [0, 0, 0]
Basis      [[1, 0, 0], [0, 1, -1/2]]
Dimension  2
Vector     [c0, c1, -c1/2]

Define a Linear Operator

>>> def mapping(vec):
>>>     return [vec[0], 2*vec[1], 3*vec[2]]
>>>
>>> T = LinearOperator('T', vectorspace=V, mapping=mapping)
>>> print(T.info())
T : V → V
---------
Field        R
Rank         3
Nullity      0
Injective?   True
Surjective?  True
Bijective?   True
Matrix       [[1, 0, 0], [0, 2, 0], [0, 0, 3]]
>>> T([1, 1, 1])
[1, 2, 3]

Operations with Linear Operators

Given an inner product, check whether a linear operator

>>> T.is_symmetric(dot)
True
>>> T.is_hermitian(dot)
True
>>> T.is_orthogonal(dot)
False
>>> T.is_unitary(dot)
False
>>> T.is_normal(dot)
True

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

ablina-0.4.3.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ablina-0.4.3-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

Details for the file ablina-0.4.3.tar.gz.

File metadata

  • Download URL: ablina-0.4.3.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.5

File hashes

Hashes for ablina-0.4.3.tar.gz
Algorithm Hash digest
SHA256 44243c6eeb6c3d72c113c0bfe92155dc01f13e22b4523d4d12d1f841835f1c85
MD5 b7483712b368c6906dbb53ac0d6bf34c
BLAKE2b-256 b18b790f47e9e27232916d365c0428782bf9f23e92cd0c59ce50c0a990218f63

See more details on using hashes here.

File details

Details for the file ablina-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: ablina-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 27.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.5

File hashes

Hashes for ablina-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2945d2245c6b9a76f9cf110d92e3289994b4959dc937aab6f33650487dd37e0b
MD5 af871f1d65798020c8fc643837531006
BLAKE2b-256 5fd93b3ad1d7e1aa19343ac8cc9f943b7eebe63280a236d3cb036d3865223104

See more details on using hashes here.

Supported by

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