Formal order analysis library
Project description
foapy
Python library for Formal Order Analysis (FOA) of symbolic sequences.
What is FOA?
Formal Order Analysis (FOA) studies the structure of symbolic sequences by:
- Mapping a sequence to its order and alphabet (the set of unique symbols in order of first appearance).
- Extracting intervals between repeated occurrences of the same symbol under different boundary modes.
- Quantifying structure with characteristics (e.g., arithmetic/geometric means, volume, average remoteness, depth, descriptive/identifying information, regularity, uniformity).
This enables robust analysis for text, biological sequences, musical motifs, logs, and any categorical time series.
Features
- Alphabets and Orders: Define alphabets and compute orders of sequences.
- Intervals and Chains: Extract intervals for multiple binding and boundary modes.
- Congeneric Decomposition: Decompose sequences into congeneric components.
- Mathematical Characteristics: Arithmetic mean, geometric mean, volume, average remoteness, depth, descriptive and identifying information, regularity, uniformity.
- Masked-array Support: FOA on partially observed sequences via
foapy.ma. - Extensive Documentation: Theory, algorithms, and examples.
Installation
- From PyPI:
pip install foapy
- From source (with tox workflows):
git clone https://github.com/intervals-mining-lab/foapy.git
cd foapy
python -m pip install --upgrade pip
python -m pip install tox
# Run tests (isolated env)
tox -e default
# Build distribution artifacts (sdist and wheel)
tox -e build
# Optionally clean build artifacts
tox -e clean
Quick start
Compute order, intervals, and a characteristic:
import foapy
# 1) Order and alphabet
source = ['a', 'b', 'a', 'c', 'd']
order = foapy.order(source)
print(order) # [0 1 0 2 3]
order_arr, alphabet = foapy.order(source, True)
print(order_arr, alphabet) # [0 1 0 2 3] ['a' 'b' 'c' 'd']
# 2) Intervals (binding to start, normal mode)
from foapy import binding, mode
intervals = foapy.intervals(['a', 'b', 'a', 'c', 'a', 'd'], binding.start, mode.normal)
print(intervals) # [1 2 2 3 2 5]
# 3) A characteristic (volume = product of intervals)
val = foapy.characteristics.volume(intervals)
print(val) # 192
Masked arrays (optional):
import numpy as np
import numpy.ma as ma
import foapy
seq = ma.masked_array(['a', 'b', 'a', 'c', 'd'], mask=[0, 1, 0, 0, 0])
order_ma = foapy.ma.order(seq)
intervals_grouped = foapy.ma.intervals(order_ma, foapy.binding.start, foapy.mode.normal)
u = foapy.characteristics.uniformity(intervals_grouped)
print(u)
Project Structure
Documentation
Online documentation: intervals-mining-lab.github.io/foapy.
The documentation in ./docs covers fundamentals, algorithms, characteristics, applications, and development notes.
Build and serve the docs locally (via tox):
# Build docs into docs/_build
tox -e docs
# Serve docs with live-reload for development
tox -e docsserve
Testing
Run the test suite (via tox):
tox -e default
# Pass arguments to pytest after --, e.g. run a subset:
tox -e default -- -k order -q
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file foapy-0.0.22.tar.gz.
File metadata
- Download URL: foapy-0.0.22.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
556502c35a6c686b77d3b2005ede1e3f27a2e562a87e932f26407488064a0e97
|
|
| MD5 |
dd5ee23a72d269d0b80b66666965dc8f
|
|
| BLAKE2b-256 |
439b94362d6a704dde76517ec7375fe7c5374c5a75a12f057d9c4f7d1d424f54
|
Provenance
The following attestation bundles were made for foapy-0.0.22.tar.gz:
Publisher:
ci.yml on intervals-mining-lab/foapy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
foapy-0.0.22.tar.gz -
Subject digest:
556502c35a6c686b77d3b2005ede1e3f27a2e562a87e932f26407488064a0e97 - Sigstore transparency entry: 402047496
- Sigstore integration time:
-
Permalink:
intervals-mining-lab/foapy@58bd76e273d030afc64b32b91d85329c9f58b03d -
Branch / Tag:
refs/tags/0.0.22 - Owner: https://github.com/intervals-mining-lab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@58bd76e273d030afc64b32b91d85329c9f58b03d -
Trigger Event:
push
-
Statement type:
File details
Details for the file foapy-0.0.22-py3-none-any.whl.
File metadata
- Download URL: foapy-0.0.22-py3-none-any.whl
- Upload date:
- Size: 33.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ae16a5ea54c2a42786af03301f5286ebd8babdde69a3538bdbf616f7e34afc0
|
|
| MD5 |
ac4df7777f260508be316b4a300ee372
|
|
| BLAKE2b-256 |
6ba86ad8d038299c2d20504ce96b2a432e4e69511c4eccf6048f9a1d6631df49
|
Provenance
The following attestation bundles were made for foapy-0.0.22-py3-none-any.whl:
Publisher:
ci.yml on intervals-mining-lab/foapy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
foapy-0.0.22-py3-none-any.whl -
Subject digest:
0ae16a5ea54c2a42786af03301f5286ebd8babdde69a3538bdbf616f7e34afc0 - Sigstore transparency entry: 402047502
- Sigstore integration time:
-
Permalink:
intervals-mining-lab/foapy@58bd76e273d030afc64b32b91d85329c9f58b03d -
Branch / Tag:
refs/tags/0.0.22 - Owner: https://github.com/intervals-mining-lab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@58bd76e273d030afc64b32b91d85329c9f58b03d -
Trigger Event:
push
-
Statement type: