Skip to main content
CFSpy

PyPI - Python Version PyPI - Version PyPI - Status PyPI - Downloads PyPI - License

CFSpy

CFSpy is a package to simulate the output of a control system by means of the Chen-Fliess series.

It provides:

  • The list of iterated integrals indexed by words of a certain length or less.
  • The list of Lie derivatives indexed by words of a certain length or less.
  • A single iterated integral indexed by a given word.
  • A single Lie derivative indexed by a given word.

Overview

CFSpy is a Python library that contains the following functions:

Function Description
iter_int A function for the numerical computation of a list of iterated integrals
iter_lie A function for the analytical computation of a list of Lie derivatives
single_iter_int A function for the numerical computation of a single iterated integral
single_iter_lie A function for the analytical computation of a single Lie derivative

CFSpy is used for:

  • Simulation of the output of a control systems.
  • Reachability analysis of a control system.

Installation

Currently, CFSpy supports releases of Python 3.12.4 onwards. To install the current release:

$ pip install --upgrade CFSpy

Getting Started

Minimal Example

from CFS import iter_int, iter_lie, single_iter_int, single_iter_lie

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
import sympy as sp

# Define the Lotka-Volterra system
def system(t, x, u1_func, u2_func):
    x1, x2 = x
    u1 = u1_func(t)
    u2 = u2_func(t)
    dx1 = -x1*x2 +  x1 * u1
    dx2 = x1*x2 - x2* u2
    return [dx1, dx2]

# Input 1
def u1_func(t):
    return np.sin(t)

# Input 2
def u2_func(t):
    return np.cos(t)

# Initial condition
x0 = [1/3,2/3]

# Time range
t0 = 0
tf = 3
dt = 0.001
t_span = (t0, tf)

# Simulation of the system
solution = solve_ivp(system, t_span, x0, args=(u1_func, u2_func), dense_output=True)

# Partition of the time interval
t = np.linspace(t_span[0], t_span[1], int((tf-t0)//dt+1))
y = solution.sol(t)

# Define the symbolic variables
x1, x2 = sp.symbols('x1 x2')
x = sp.Matrix([x1, x2])


# Define the system symbolically
g = sp.transpose(sp.Matrix([[-x1*x2, x1*x2], [x1, 0], [0, - x2]]))

# Define the output symbolically
h = x1

# The truncation of the length of the words that index the Chen-Fliess series
Ntrunc = 4

# Coefficients of the Chen-Fliess series evaluated at the initial state
Ceta = np.array(iter_lie(h,g,x,Ntrunc).subs([(x[0], 1/3),(x[1], 2/3)]))

# inputs as arrays
u1 = np.sin(t)
u2 = np.cos(t)

# input array
u = np.vstack([u1, u2])

# List of iterated integral
Eu = iter_int(u,t0, tf, dt, Ntrunc)

# Chen-Fliess series
F_cu = x0[0]+np.sum(Ceta*Eu, axis = 0)

# Graph of the output and the Chen-Fliess series
plt.figure(figsize = (12,5))
plt.plot(t, y[0].T)
plt.plot(t, F_cu, color='red', linewidth=5, linestyle = '--', alpha = 0.5)
plt.xlabel('$t$')
plt.ylabel('$x_1$')
plt.legend(['Output of the system','Chen-Fliess series'])
plt.grid()
plt.show()
iter_int(), iter_lie()

For more examples, see the CFSpy demos

Resources

Contributing

All feedback is welcome.

Asking for help

Please reach out if you have any questions:

  1. Github CFSpy discussions.
  2. Github CFSpy issues.

License

CFSpy is open-source and released under the MIT License.

BibTeX

Feel free to cite my work:

@article{iperezave,
  title={CFSpy},
  author={Perez Avellaneda, Ivan},
  journal={GitHub. Note: https://github.com/iperezav/CFSpy},
  volume={1},
  year={2024}
}

Release files for CFSpy 1.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for CFSpy 1.2.3
File Size Uploaded
cfspy-1.2.3.tar.gz 9.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for CFSpy 1.2.3
File Interpreter ABI Platform
cfspy-1.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 22.6 kB

Release files / cfspy-1.2.3.tar.gz

Download URL cfspy-1.2.3.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
be8ddb31d76589934e297ce054dd0b9b9eb4ce9b463d2d83ade4e271b43c9907
BLAKE2b-256 checksum
How to use checksums
7ce724f46d4489f7ea02bee84bb008b682ffbc2da3d5ca3c661f324f1651446d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / cfspy-1.2.3-py3-none-any.whl

Download URL cfspy-1.2.3-py3-none-any.whl
Size 12.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a749ffb64637e4d9eff6898e234d9af5319af55aec3f4b8010895c6622b3c2a8
BLAKE2b-256 checksum
How to use checksums
d9183b57765d1e64464ce24883a7176904970c96afd41b90ca3c0ba3e3574486
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

1.2.3 This release

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1

1 release file

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page