valmix

Adjust numerical values from a terminal user interface.


Keywords
multiprocessing, value, tui, user, interface
License
Apache-2.0
Install
pip install valmix==0.0.1

Documentation

Valmix

Build Documentation Coverage PyPI version

Valmix ("value mixer") gives a systematic way to tune Python program parameters from your terminal (similar to alsamixer for Linux users familiar with it). Wrap your parameters in multiprocessing values, pass them to both your program and valmix.run(), and a terminal user interface will appear 🪔 allowing you to modify parameters in real time while your program is running.

Code is shorter than words in Usage below 😉

Installation

From conda-forge

conda install -c conda-forge valmix

From PyPI

pip install valmix

Usage

Suppose you have a Python program with parameters you want to tune:

def main(kp: float, kd: float):
    pass  # your code here

Valmix gives a systematic way to tune these parameters from the command line. First, wrap your parameters in multiprocessing.Values:

import multiprocessing as mp

kp = mp.Value("f", 10.0)
kd = mp.Value("f", 1.0)

Next, update your program to read from the multiprocessing values. For example:

import numpy as np
import time

def main(kp: mp.Value, kd: mp.Value):
    with open("/tmp/output", "w") as output:
        for _ in range(100):
            u = np.clip(kp.value * 1.0 + kd.value * 0.1, 5.0, 20.0)
            output.write(f"{u}\n")
            output.flush()
            time.sleep(1.0)

Finally, run your program and Valmix together, specifying the tuning range for each value:

    # Call the main function in a separate process
    main_process = mp.Process(target=main, args=(kp, kd))
    main_process.start()

    # Display the terminal user interface in this process (blocking call)
    valmix.run(
        {
            "kp": (kp, np.arange(0.0, 20.0, 0.5)),
            "kd": (kd, np.arange(0.0, 10.0, 0.5)),
        }
    )

This will fire up a terminal user interface (TUI) where you can tune kp and kd while the program runs in the background:

image

Useful for instance to tune robot behaviors in real-time 😉

See also

Related software:

  • Textual: terminal user interface (TUI) framework for Python, used to build this tool.