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
Python 101 Forever

๐Ÿš€ Python 101 Forever ๐Ÿš€ Official Python 101 Forever GitHub repository. START HERE - CHECK README SUBSCRIBE FOR UPDATES HERE Sponsors Contac

Hack Bulgaria 58 Nov 30, 2022
token vesting escrow with cliff and clawback

Yearn Vesting Escrow A modified version of Curve Vesting Escrow contracts with added functionality: An escrow can have a start_date in the past.

62 Dec 08, 2022
DG - A(n) (unusual) programming language

DG - A(n) (unusual) programming language General structure There are no infix-operators (i.e. 1 + 1) Each operator takes 2 parameters When there are m

1 Mar 05, 2022
Statically typed BNF with semantic actions; A frontend of frontend frameworks; Use your grammar everywhere.

Statically typed BNF with semantic actions; A frontend of frontend frameworks; Use your grammar everywhere.

Taine Zhao 56 Dec 14, 2022
An account generator for guilded.gg that I made a while back and decided to bring back up

An account generator for guilded.gg that I made a while back and decided to bring back up

8 Nov 17, 2022
Exploring basic lambda calculus in Python

Lambda Exploring basic lambda calculus in Python. In this repo I have used the lambda function built into python to get a more intiutive feel of lambd

Bhardwaj Bhaskar 2 Nov 12, 2021
Demo repository for Saltconf21 talk - Testing strategies for Salt states

Saltconf21 testing strategies Demonstration repository for my Saltconf21 talk "Strategies for testing Salt states" Talk recording Slides and demos Get

Barney Sowood 3 Mar 31, 2022
Pyhexdmp - Python hex dump module

Pyhexdmp - Python hex dump module

25 Oct 23, 2022
Provide error messages for Python exceptions, even if the original message is empty

errortext is a Python package to provide error messages for Python exceptions, even if the original message is empty.

Thomas Aglassinger 0 Dec 07, 2021
A tool for generating skill map/tree like diagram

skillmap A tool for generating skill map/tree like diagram. What is a skill map/tree? Skill tree is a term used in video games, and it can be used for

Yue 98 Jan 07, 2023
1st Online Python Editor With Live Syntax Checking and Execution

PythonBuddy ๐Ÿ–Š๏ธ ๐Ÿ Online Python 3 Programming with Live Pylint Syntax Checking! Usage Fetch from repo: git clone https://github.com/ethanchewy/Python

Ethan Chiu 255 Dec 23, 2022
Direct Multi-view Multi-person 3D Human Pose Estimation

Implementation of NeurIPS-2021 paper: Direct Multi-view Multi-person 3D Human Pose Estimation [paper] [video-YouTube, video-Bilibili] [slides] This is

Sea AI Lab 253 Jan 05, 2023
ASCII-Wordle - A port of the game Wordle to terminal emulators/CMD

ASCII-Wordle A 'port' of Wordle to text-based interfaces A near-feature complete

32 Jun 11, 2022
reproduces experiments from

Installation To enable importing of modules, from the parent directory execute: pip install -e . To install requirements: python -m pip install requir

Meta Research 15 Aug 11, 2022
Custom python interface to xstan (a modified (cmd)stan)

Custom python interface to xstan (a modified (cmd)stan) Use at your own risk, currently everything is very brittle and will probably be changed in the

2 Dec 16, 2021
An advanced pencil sketch generator

Pencilate An advanced pencil sketch generator About : An advanced pencil sketch maker made in just 12 lines of code. Yes you read it right, JUST 12 LI

MAINAK CHAUDHURI 23 Dec 17, 2022
Mommas-cookbook - A Repository About Mom's Recipes

Mommas Cookbook A Repository for Mom's Recipes Contents bacalhau ร  Gomes de Sรก Beef-Rendang bacalhau ร  Gomes de Sรก, recommended by @s0undt3ch One of t

1 Jan 08, 2022
This is a multi-app executor that it used when we have some different task in a our applications and want to run them at the same time

This is a multi-app executor that it used when we have some different task in a our applications and want to run them at the same time. It uses SQLAlchemy for ORM and Alembic for database migrations.

Majid Iranpour 5 Apr 16, 2022
Cairo-bloom - A naive bloom filter implementation in Cairo

๐Ÿฅ€ cairo-bloom A naive bloom filter implementation in Cairo. A Bloom filter is a

Sam Barnes 37 Oct 01, 2022
Airflow Operator for running Soda SQL scans

Airflow Operator for running Soda SQL scans

Todd de Quincey 7 Oct 18, 2022