An open-source systems and controls toolbox for Python3

Overview

Travis-CI License Gitter Coveralls Documentation Status Download Counts

harold

A control systems package for Python>=3.6.

Introduction

This package is written with the ambition of providing a full-fledged control systems software that serves a control engineer/student/researcher with complete access to the source code with permissive rights (see LICENSE file). Moreover, via working with a proper high-level computer programming language many proprietary software obstacles are avoided and users can incorporate this package into their workflow in any way they see fit.

Quick Reference and Documentation

The documentation is online at ReadTheDocs. A brief tutorial about the basics can be found under the notebooks folder to see harold in action.

Roadmap

The items that are in the pipeline and what possibly lies ahead is enumerated in our roadmap.

Useful Links

  • There is already an almost-matured control toolbox which is led by Richard Murray et al. (click for the Github page) and it can perform already most of the essential tasks. Hence, if you want to have something that resembles the basics of matlab control toolbox, you should give it a try. However, it is somewhat limited to SISO tools and also relies on SLICOT library which can lead to installation hassle and/or licensing problems for nontrivial tasks.
  • You can also use the tools available in SciPy signal module for basics of LTI system manipulations. SciPy is a powerful all-purpose scientific package. This makes it extremely useful however admittedly every discipline has a limited presence hence the limited functionality. If you are looking for a quick LTI system manipulation and don't want to install yet another package, then it might be the tool for you.
  • Instead, if you are interested in robust control you probably would appreciate the Skogestad-Python project. They are replicating the code parts of the now-classic book completely in Python. Awesome!

Help Wanted!

If you are missing out a feature, or found a bug, get in contact. Such reports and PR submissions are more than welcome!

Contact

If you have questions/comments feel free to shoot one to [email protected] or join the Gitter chatroom.

Comments
  • Scipy riccati solvers are too naive

    Scipy riccati solvers are too naive

    It basically implements the textbook definition. Implement the Newton + line search for both care and dare (with proper function names if possible). Slyvester and Lyapunov solvers use LAPACK versions hence they are OK on paper.

    Reminder : For control purposes, speed is irrelevant! So being implemented in Fortran doesn't mean much. The residuals and conditioning of the variables decide whether certain synthesis algorithms work or not. This needs to be state-of-art without relying on anything off-the-shelf.

    enhancement help wanted missing 
    opened by ilayn 7
  • Getting exception when adding two discrete MISO transfer functions

    Getting exception when adding two discrete MISO transfer functions

    Hi again! :-)

    I think the following code should work, but I'm getting an exception:

    import harold
    print(harold.__version__)
    tf = (harold.Transfer([[[0.0], [1.0]]], [[[1.0], [1.0]]], 0.02)
        + harold.Transfer([[[1.0], [0.5]]], [[[1.0], [1.0]]], 0.02))
    print(tf.polynomials)
    

    Here is the output:

    1.0.2.dev0+90a785b
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    ~/anaconda3/envs/py38/lib/python3.8/site-packages/harold-1.0.2.dev0+90a785b-py3.8.egg/harold/_classes.py in __add__(self, other)
        404                 try:
    --> 405                     return Transfer(self.to_array() + other.to_array(),
        406                                     dt=self._dt)
    
    ~/anaconda3/envs/py38/lib/python3.8/site-packages/harold-1.0.2.dev0+90a785b-py3.8.egg/harold/_classes.py in __init__(self, num, den, dt)
         64         (self._num, self._den,
    ---> 65          self._shape, self._isgain) = self.validate_arguments(num, den)
         66         self._p, self._m = self._shape
    
    ~/anaconda3/envs/py38/lib/python3.8/site-packages/harold-1.0.2.dev0+90a785b-py3.8.egg/harold/_classes.py in validate_arguments(num, den, verbose)
       1504             if returned_numden_list[0].size > returned_numden_list[1].size:
    -> 1505                 raise ValueError('Noncausal transfer functions are not '
       1506                                  'allowed.')
    
    ValueError: Noncausal transfer functions are not allowed.
    
    During handling of the above exception, another exception occurred:
    
    ValueError                                Traceback (most recent call last)
    <ipython-input-1-fe5c19b20276> in <module>
          1 import harold
          2 print(harold.__version__)
    ----> 3 tf = (harold.Transfer([[[0.0], [1.0]]], [[[1.0], [1.0]]], 0.02)
          4     + harold.Transfer([[[1.0], [0.5]]], [[[1.0], [1.0]]], 0.02))
          5 print(tf.polynomials)
    
    ~/anaconda3/envs/py38/lib/python3.8/site-packages/harold-1.0.2.dev0+90a785b-py3.8.egg/harold/_classes.py in __add__(self, other)
        406                                     dt=self._dt)
        407                 except ValueError:
    --> 408                     raise ValueError('Shapes are not compatible for '
        409                                      'addition. Model shapes are {0} and'
        410                                      ' {1}'.format(self._shape, other.shape))
    
    ValueError: Shapes are not compatible for addition. Model shapes are (1, 2) and (1, 2)
    
    bug 
    opened by twmacro 6
  • DOC: Update haroldpolyadd function

    DOC: Update haroldpolyadd function

    Updated the haroldpolyadd function. It now trims the zeros of the output instead the zeros of the input. Improved the docstring with a parameter and return list.

    If you like these changes I can change the haroldpolymult function as well.

    documentation 
    opened by whzup 6
  • bug in simulate_impulse_response: no

    bug in simulate_impulse_response: no "ts" if "t" is input

    Hi! This is a simple little bug. If you call simulate_impulse_response with an argument for the time vector, the internal variable "ts" never gets created. Then, this line fails:

    u[0] = 1./ts
    

    For fun, here is a complete example that mimics my real problem:

    import numpy as np
    import matplotlib.pyplot as plt
    import harold
    
    dt = 1.0 / 50.0
    
    # define 10 Hz filter with 0.7 damping:
    w = 2 * np.pi * 10.0
    num = w**2
    den = [1.0, 2*0.7*w, w**2]
    filt = harold.Transfer(num, den)
    ss = harold.transfer_to_state(filt)
    ssd = harold.discretize(ss, dt, 'foh')
    
    t = np.arange(0., 1., dt)
    y, t_ = harold.simulate_impulse_response(ssd, t)
    # y, t_ = harold.simulate_impulse_response(ssd)
    plt.plot(t_, y)
    
    bug 
    opened by twmacro 5
  • SISO Behavior when multiplied with a matrix

    SISO Behavior when multiplied with a matrix

    When a SISO Transfer() or State() multiplied with a p x m matrix, should it reject due to size mismatch or elementwise multiply with each element of the matrix P as if an overloaded Kronecker Product kron(P,G) ?

    bug help wanted question 
    opened by ilayn 5
  • bug when adding non-normalized transfer functions

    bug when adding non-normalized transfer functions

    Hi!

    Adding (110 s) / (85 s^2 + 20 s + 1) and 0.25 gives an incorrect result, but it works fine if the first transfer function is normalized. Here is a little example ... it shows that the numerator never gets divided by 85:

    import numpy as np
    import harold
    
    
    num = np.array([110.0, 0.0])
    den = np.array([85.0, 20.0, 1.0])
    
    h_a = harold.Transfer(num, den)
    h_b = harold.Transfer(num / 85.0, den / 85.0)
    
    h2 = harold.Transfer(0.25, 1.0)
    
    h_sum_a = h_a + h2
    h_sum_b = h_b + h2
    print(f"h_sum_a.num = {h_sum_a.num}")
    print(f"h_sum_a.den = {h_sum_a.den}")
    
    print()
    print(f"h_sum_b.num = {h_sum_b.num}")
    print(f"h_sum_b.den = {h_sum_b.den}")
    
    

    The output is:

    h_sum_a.num = [[2.50000000e-01 1.10058824e+02 2.94117647e-03]]
    h_sum_a.den = [[1.         0.23529412 0.01176471]]
    
    h_sum_b.num = [[0.25       1.35294118 0.00294118]]
    h_sum_b.den = [[1.         0.23529412 0.01176471]]
    
    bug prio:high 
    opened by twmacro 4
  • Error converting MIMO transfer function matrix to MIMO State Space realization

    Error converting MIMO transfer function matrix to MIMO State Space realization

    I am working with MIMO systems analysis. I tried to use harold library to convert a transfer function matrix to a state space realization and found out that there are some problems in this routine.

    I attached a jupyter notebook file that reproduces my experiment. I compared the results from harold with python control (and also Matlab, which yelds the same results from python control).

    I didn't get the time to read into your code, but due to this issue, the transmission zeros calculation for a MIMO transfer function matrix is getting wrong values as it seems to depend on the state space realization.

    Harold_test.pdf

    bug 
    opened by evertoncolling 4
  • This division by sampling time causing wrong dc gain (calculate from impulse response) in the case of discrete system with sampling time other than 1

    This division by sampling time causing wrong dc gain (calculate from impulse response) in the case of discrete system with sampling time other than 1

    Why this division by sampling time? It's causing a bug in the case of discrete system with sampling time other than 1. I am using impulse response of system for FFT convolve. This division is causing wrong DC gain. Currently I am multiplying sample time to the result of this function to correct DC gain. Is this division really required? https://github.com/ilayn/harold/blob/2bfa00fca4549313d47386991a27c84c8fc91637/harold/_time_domain.py#L252

    opened by jamestjsp 3
  • Getting exception when creating discrete MISO transfer function

    Getting exception when creating discrete MISO transfer function

    Hi!

    I'm getting an error trying to create a discrete MISO transfer function. It easiest to show via code. This works:

    import harold
    print(harold.__version__)
    print(harold.Transfer([[[1.0, 0.0]]], [[[1.0, 0.0]]], 0.02).polynomials)
    

    Output:

    1.0.2.dev0+517e57f
    (array([[1., 0.]]), array([[1., 0.]]))
    

    However, this does not work:

    print(harold.Transfer([[[1.0], [1.0, 0.0]]], [[[1.0], [1.0, 0.0]]], 0.02).polynomials)
    

    Output:

    ---------------------------------------------------------------------------
    IndexError                                Traceback (most recent call last)
    <ipython-input-4-e546dfb4f959> in <module>
    ----> 1 print(harold.Transfer([[[1.0], [1.0, 0.0]]], [[[1.0], [1.0, 0.0]]], 0.02).polynomials)
    
    ~/anaconda3/envs/py38/lib/python3.8/site-packages/harold-1.0.2.dev0+517e57f-py3.8.egg/harold/_classes.py in __init__(self, num, den, dt)
         70         self._isdiscrete = False if dt is None else True
         71
    ---> 72         self._recalc()
         73
         74     @property
    
    ~/anaconda3/envs/py38/lib/python3.8/site-packages/harold-1.0.2.dev0+517e57f-py3.8.egg/harold/_classes.py in _recalc(self)
        301             else:
        302                 # Create a dummy statespace and check the zeros there
    --> 303                 zzz = transfer_to_state((self._num, self._den),
        304                                         output='matrices')
        305                 self.zeros = transmission_zeros(*zzz)
    
    ~/anaconda3/envs/py38/lib/python3.8/site-packages/harold-1.0.2.dev0+517e57f-py3.8.egg/harold/_classes.py in transfer_to_state(G, output)
       2974             A = haroldcompanion(den[0][0])
       2975             B = np.zeros((A.shape[0], 1), dtype=float)
    -> 2976             B[-1, 0] = 1.
       2977             t1, t2 = A, B
       2978
    
    IndexError: index -1 is out of bounds for axis 0 with size 0
    
    bug 
    opened by twmacro 3
  • numerical issue creating transfer function

    numerical issue creating transfer function

    Hi!

    I'm getting an error trying to create a transfer function. Below is a little example that shows the error on my computer. I'm thinking that somehow a numeric leading "zero" shows up (it was -8.3948810935738183e-17 for me) and is not trimmed off by np.trim_zeros. That creates sizing trouble when assembling the state-space matrices.

    import harold
    
    
    # set up a 2-input, 1-output transfer function
    
    # denominator is the same for both transfer functions:
    den = [[[[84.64, 18.4, 1.0]], [[1.0, 7.2, 144.0]]]]
    
    # - same as below except last 4 digits chopped off for each number
    num = [
        [
            [[61.7973249220, 36.2498843026, 0.730119623369]],
            [[0.037784067405, 0.997499379512, 21.76362282573]],
        ]
    ]
    
    # this one works:
    tf1 = harold.Transfer(num, den)
    print(tf1)
    
    # keep those last 4 digits and it breaks:
    num = [
        [
            [[61.79732492202783, 36.24988430260625, 0.7301196233698941]],
            [[0.0377840674057878, 0.9974993795127982, 21.763622825733773]],
        ]
    ]
    
    tf2 = harold.Transfer(num, den)
    print(tf2)
    

    And here is the output:

    Continuous-Time Transfer function
     2 inputs and 1 output
    
      Poles(real)    Poles(imag)  Zeros(real)    Zeros(imag)
    -------------  -------------  -------------  -------------
        -0.108696    1.16214e-07
        -0.108696   -1.16214e-07
        -3.6        11.4473
        -3.6       -11.4473
    
    
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    ~/code/harold/bug.py in <module>
         27 ]
         28
    ---> 29 tf2 = harold.Transfer(num, den)
         30 print(tf2)
    
    ~/code/harold/harold/_classes.py in __init__(self, num, den, dt)
         70         self._isdiscrete = False if dt is None else True
         71
    ---> 72         self._recalc()
         73
         74     @property
    
    ~/code/harold/harold/_classes.py in _recalc(self)
        302                 # Create a dummy statespace and check the zeros there
        303                 zzz = transfer_to_state((self._num, self._den),
    --> 304                                         output='matrices')
        305                 self.zeros = transmission_zeros(*zzz)
        306                 self.poles = eigvals(zzz[0])
    
    ~/code/harold/harold/_classes.py in transfer_to_state(G, output)
       3036
       3037                 for row in range(p):
    -> 3038                     C[row, k:k+num[row][col].size] = num[row][col][0, ::-1]
       3039                 k += coldegrees[col]
       3040
    
    ValueError: could not broadcast input array from shape (5) into shape (4)
    
    bug 
    opened by twmacro 3
  • Cannot import name '_asarray_validated' from 'scipy.linalg.decomp'

    Cannot import name '_asarray_validated' from 'scipy.linalg.decomp'

    Including harold package leads to the following error when running a script:

      File "C:\Users\michele.franzan\AppData\Local\Programs\Python\Python310\lib\site-packages\harold\__init__.py", line 30, in <module>
        from ._classes import *
      File "C:\Users\michele.franzan\AppData\Local\Programs\Python\Python310\lib\site-packages\harold\_classes.py", line 6, in <module>
        from scipy.linalg.decomp import _asarray_validated
    ImportError: cannot import name '_asarray_validated' from 'scipy.linalg.decomp' (C:\Users\michele.franzan\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\linalg\decomp.py)
    

    I've found out that the _asarray_validated() function is included in scipy._lib._util instead of scipy.linalg.decomp.

    opened by michele-franzan 2
  • ENH: Add rootlocus

    ENH: Add rootlocus

    Though I strongly think that root locus belongs to the previous century, people keep pushing it to students. It is literally 5 lines of jupyter notebook slider widget but control curriculum is still playing in the 80s mud. Hence no point in resisting as everybody asks for it.

    enhancement feature request 
    opened by ilayn 0
  • Include a machinary to create custom __repr__() formats

    Include a machinary to create custom __repr__() formats

    Currently, the State and Transfer models print out the pre-designed strings. But different users have different needs, for example the academically oriented users prefer more about the stability properties (transmission zeros etc.) and application oriented people more interested in system properties (damping, bandwidth alike)

    There should be an entry point for sticking in a custom argument for repr

    help wanted feature request 
    opened by ilayn 0
  • MIMO Transfer data structure

    MIMO Transfer data structure

    Currently MIMO transfer num den data is kept in list of lists. This is good for quick access with different lengths of entries. For example, if some element has only 1 and the other element has s^3 + 5s^2 - 4s -7 and they can be kept as [[1], [1, 5, -4, -7]. But for some operations walking over list of lists is too slow and inconvenient. For example adding a 3D zero padded numpy array is much easier to multiply with a scalar etc.

    A MIMO transfer object can hold both the list of lists and also the 3D array version. Hence add NumPy arrays.

    feature request 
    opened by ilayn 0
Releases(v1.0.3)
  • v1.0.3(Dec 4, 2022)

  • v1.0.2(Apr 27, 2022)

    This is a long-standing update release to many functions and involves many fixes. Please feel free to give critical feedback as I have been neglecting this library for a while and I recently discovered many design issues. Thus, I'm quite open for any criticism for improvements.

    The versions 1.0.x will probably continue with minor fixes and features. However, there will be some breaking changes in 1.1.x series as this is getting very difficult to manage with the current file and function structure.

    What's Changed

    • FIX: Rework minimal_realization and staircase by @ilayn in https://github.com/ilayn/harold/pull/19
    • FIX: add missing all ddunder by @ilayn in https://github.com/ilayn/harold/pull/20
    • FIX: discrete plot holds the next value instead. by @ilayn in https://github.com/ilayn/harold/pull/21
    • MAINT: Turn off Travis emails by @ilayn in https://github.com/ilayn/harold/pull/22
    • ENH: Add random_state_model by @ilayn in https://github.com/ilayn/harold/pull/23
    • Add more tests to improve code coverage by @ilayn in https://github.com/ilayn/harold/pull/24
    • FIX: dt keyword now works properly on random_state_model by @ilayn in https://github.com/ilayn/harold/pull/25
    • FIX: transfer_to_state all static columns by @ilayn in https://github.com/ilayn/harold/pull/27
    • MAINT: DOC: Restructure Documentation by @ilayn in https://github.com/ilayn/harold/pull/26
    • ENH: Added ackermann() by @ilayn in https://github.com/ilayn/harold/pull/28
    • ENH: Controllability indices by @ilayn in https://github.com/ilayn/harold/pull/32
    • DOC: MAINT: Sphinx 1.7.8 fails to import package by @ilayn in https://github.com/ilayn/harold/pull/33
    • DOC: Add contributing.md by @ilayn in https://github.com/ilayn/harold/pull/35
    • DOC: Use intersphinx for SciPy, NumPy funcs by @ilayn in https://github.com/ilayn/harold/pull/37
    • DOC: Update haroldpolyadd function by @whzup in https://github.com/ilayn/harold/pull/36
    • DOC: Add example for haroldpolydiv by @whzup in https://github.com/ilayn/harold/pull/38
    • MAINT: Use _assertNdSquareness by @ilayn in https://github.com/ilayn/harold/pull/40
    • FIX: step_resp : Added missing integrator counts by @ilayn in https://github.com/ilayn/harold/pull/39
    • ENH: System inversion and 1/G type operations by @ilayn in https://github.com/ilayn/harold/pull/41
    • BUG: transfer_to_state common den case by @ilayn in https://github.com/ilayn/harold/pull/43
    • MAINT: Make readme a bit less personal by @ilayn in https://github.com/ilayn/harold/pull/44
    • BUG: Sampling time is not computed if a custom time array is provided by @ilayn in https://github.com/ilayn/harold/pull/46
    • FIX: Transfer add() method was wrong for nonmonic denominator entries by @ilayn in https://github.com/ilayn/harold/pull/48
    • BUG: System norm was evaluated on the wrong axis by @ilayn in https://github.com/ilayn/harold/pull/49
    • Add dummy function for 'place_poles' by @ilayn in https://github.com/ilayn/harold/pull/51
    • FIX: transfer_to_state tripping over numerical noise by @ilayn in https://github.com/ilayn/harold/pull/52
    • BUG: auto frequency grid selection is improved by @ilayn in https://github.com/ilayn/harold/pull/54
    • Numpy funcs rename by @ilayn in https://github.com/ilayn/harold/pull/55
    • ENH: Freq plots accept multiple models and styles by @ilayn in https://github.com/ilayn/harold/pull/56
    • MAINT: Minor cleanup for Py3.8 warnings by @ilayn in https://github.com/ilayn/harold/pull/59
    • raise ValueError instead of IndexError by @namannimmo10 in https://github.com/ilayn/harold/pull/60
    • Interchange outputs with inputs in docstring by @namannimmo10 in https://github.com/ilayn/harold/pull/61
    • BUG:Transfer: Exact cancellations leading initialize error by @ilayn in https://github.com/ilayn/harold/pull/66
    • ENH: Supply a list of systems for time domain plotting by @ilayn in https://github.com/ilayn/harold/pull/67
    • BUG: fix transfer_to_state static gain case by @ilayn in https://github.com/ilayn/harold/pull/70
    • MAINT: Update _classes.py for SciPy namespaces by @ilayn in https://github.com/ilayn/harold/pull/75
    • FIX:State: SIMO MISO algebra fixes by @ilayn in https://github.com/ilayn/harold/pull/78
    • TST: Fix outdated SciPy imports by @ilayn in https://github.com/ilayn/harold/pull/79
    • CI: Set up GitHub Actions by @ilayn in https://github.com/ilayn/harold/pull/80
    • TST: Update and fix post-poetry failures by @ilayn in https://github.com/ilayn/harold/pull/82
    • FIX: Transfer static add, radd for static gains by @ilayn in https://github.com/ilayn/harold/pull/83
    • MAINT: Handle cyclic imports by @ilayn in https://github.com/ilayn/harold/pull/85
    • MAINT: Remove unused badges from ReadMe by @ilayn in https://github.com/ilayn/harold/pull/86
    • MAINT: Add dcgain method to State and Transfer by @ilayn in https://github.com/ilayn/harold/pull/87
    • MAINT: pyproject and readme update by @ilayn in https://github.com/ilayn/harold/pull/88

    New Contributors

    • @whzup made their first contribution in https://github.com/ilayn/harold/pull/36
    • @namannimmo10 made their first contribution in https://github.com/ilayn/harold/pull/60

    Full Changelog: https://github.com/ilayn/harold/compare/v1.0.0...v1.0.2

    Source code(tar.gz)
    Source code(zip)
    harold-1.0.2-py3-none-any.whl(117.85 KB)
    harold-1.0.2.tar.gz(101.75 KB)
  • v1.0.1(Jun 18, 2018)

    This is a maintenance release for 1.0.0 with various fixes and small enhancements, namely random model creation and ackermann pole placement method.

    The highlight of this release is the full documentation of the functions with a proper readthedocs theme. Though the individual function documentation is still lacking proper maintenance the structure of the documentation is functional.


    • #19 FIX: Rework minimal_realization and staircase
    • #20 FIX: add missing all ddunder
    • #21 FIX: discrete plot holds the next value instead.
    • #22 MAINT: Turn off Travis emails
    • #23 ENH: Add random_state_model
    • #24 Add more tests to improve code coverage
    • #25 FIX: dt keyword now works properly on random_state_model
    • #26 MAINT: DOC: Restructure Documentation
    • #27 FIX: transfer_to_state all static columns
    • #28 ENH: Added ackermann()
    Source code(tar.gz)
    Source code(zip)
    harold-1.0.1-py3-none-any.whl(88.32 KB)
    harold-1.0.1.tar.gz(76.75 KB)
    harold-1.0.1.zip(96.42 KB)
  • v1.0.0(May 23, 2018)

    This is the initial release of harold and what has been accumulated over its inception. Most of the basic functionalities of a control systems toolbox is in place and relatively well-functioning.

    An introductory notebook and the documentation is in place (though still needs a major rework in terms of tutorial value).

    User feedback is very welcome in order to understand how this package functions out "in the wild".

    Source code(tar.gz)
    Source code(zip)
    harold-1.0.0-py3-none-any.whl(89.60 KB)
    harold-1.0.0.zip(96.30 KB)
Owner
Ilhan Polat
Ilhan Polat
How to use Microsoft Bing to search for leaks?

Installation In order to install the project, you need install its dependencies: $ pip3 install -r requirements.txt Add your Bing API key to bingKey.t

Ernestas Kardzys 2 Sep 21, 2022
Serverless demo showing users how they can capture (and obfuscate) their Lambda payloads in Datadog APM

Serverless-capture-lambda-payload-demo Serverless demo showing users how they can capture (and obfuscate) their Lambda payloads in Datadog APM This wi

Datadog, Inc. 1 Nov 02, 2021
Small pip update helpers.

pipdate pipdate is a collection of small pip update helpers. The command pipdate # or python3.9 -m pipdate updates all your pip-installed packages. (O

Nico Schlömer 69 Dec 18, 2022
Clackety Keyboards Powered by Python

KMK: Clackety Keyboards Powered by Python KMK is a feature-rich and beginner-friendly firmware for computer keyboards written and configured in Circui

KMK Firmware 780 Jan 03, 2023
Adjust the white point, gamma or make your XDR display darker without losing HDR peak luminance or the ability to adjust display brightness

XDR Tuner Adjust the white point, gamma or make your XDR display darker without losing HDR peak luminance or the ability to adjust display brightness

François Simond 16 Dec 28, 2022
Korg Volca Sample uploader for linux.

GnuVolca Korg Volca Sample uploader for linux. GnuVolca Usage Installation Via virtualenv Usage Store all the samples you want to upload on an empty d

Gonzalo Rafuls 12 Oct 11, 2022
Pokemon catch events project to demonstrate data pipeline on AWS

Pokemon Catches Data Pipeline This is a sample project to practice end-to-end data project; Terraform is used to deploy infrastructure; Kafka is the t

Vitor Carra 4 Sep 03, 2021
Python project setup, updater, and launcher

Launcher Python project setup, updater, and launcher Purpose: Increase project productivity and provide features easily. Once installed as a git submo

DAAV, LLC 1 Jan 07, 2022
Tensorboard plugin 3d with python

tensorboard-plugin-3d Overview In this example, we render a run selector dropdown component. When the user selects a run, it shows a preview of all sc

KitwareMedical 26 Nov 14, 2022
Really bad lisp implementation. Fun with pattern matching.

Lisp-py This is a horrible, ugly interpreter for a trivial lisp. Don't use it. It was written as an excuse to mess around with the new pattern matchin

Erik Derohanian 1 Nov 23, 2021
Python wrapper around Apple App Store Api

App Store Connect Api This is a Python wrapper around the Apple App Store Api : https://developer.apple.com/documentation/appstoreconnectapi So far, i

123 Jan 06, 2023
A simple 3D rigid body simulation written in python

pyRigidBody3d A simple 3D rigid body simulation written in python

30 Oct 07, 2022
Heisenbridge a bouncer-style Matrix IRC bridge

Heisenbridge brings IRC to Matrix by creating an environment where every user connects to each network individually like they would with a traditional IRC bouncer

Toni Spets 152 Dec 28, 2022
Simulation simplifiée du fonctionnement du protocole RIP

ProjetRIPlay v2 Simulation simplifiée du fonctionnement du protocole RIP par Eric Buonocore le 18/01/2022 Sur la base de l'exercice 5 du sujet zéro du

Eric Buonocore 2 Feb 15, 2022
Keyboard Layout Change - Extension for Ulauncher

Keyboard Layout Change - Extension for Ulauncher

Marco Borchi 4 Aug 26, 2022
Multi View Stereo on Internet Images

Evaluating MVS in a CPC Scenario This repository contains the set of artficats used for the ENGN8601/8602 research project. The thesis emphasizes on t

Namas Bhandari 1 Nov 10, 2021
This library is an ongoing effort towards bringing the data exchanging ability between Java/Scala and Python

PyJava This library is an ongoing effort towards bringing the data exchanging ability between Java/Scala and Python

Byzer 6 Oct 17, 2022
pythonOS: An operating system kernel made in python and assembly

pythonOS An operating system kernel made in python and assembly Wait what? It uses a custom compiler called snek that implements a part of python3.9 (

Abbix 69 Dec 23, 2022
Liquid Rocket Engine Cooling Simulation

Liquid Rocket Engine Cooling Simulation NASA CEA The implemented class calls NASA CEA via RocketCEA. INSTALL GUIDE In progress install instructions fo

John Salib 1 Jan 30, 2022
Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses

Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses. Obtain the postfix expression of the infix expression Step 1.Reverse the postfix expres

Sazzad Hossen 1 Jan 04, 2022