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
solsim is the Solana complex systems simulator. It simulates behavior of dynamical systems—DeFi protocols, DAO governance, cryptocurrencies, and more—built on the Solana blockchain

solsim is the Solana complex systems simulator. It simulates behavior of dynamical systems—DeFi protocols, DAO governance, cryptocurrencies, and more—built on the Solana blockchain

William Wolf 12 Jul 13, 2022
python3 scrip for case conversion of source code files writen in fixed form fortran

convert_FORTRAN_case python3 scrip for case conversion of source code files writen in fixed form fortran python3 scrip for case conversion of source c

null 7 Sep 20, 2022
chiarose(XCR) based on chia(XCH) source code fork, open source public chain

chia-rosechain 一个无耻的小活动 | A shameless little event 如果您喜欢这个项目,请点击star 将赠送您520朵玫瑰,可以去 facebook 留下您的(xcr)地址,和github用户名。 If you like this project, please

ddou123 376 Dec 14, 2022
Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Aristotle University 5 Jun 28, 2022
Install JetBrains Toolbox

ansible-role-jetbrains-toolbox Install JetBrains Toolbox Example Playbook This example is taken from molecule/default/converge.yml and is tested on ea

Antoine Mace 2 Feb 4, 2022
This Python3 script will monitor Upwork RSS feed and then email you the results.

Upwork RSS Parser This Python3 script will monitor Upwork RSS feed and then email you the results. Table of Contents General Info Technologies Used Fe

Chris 5 Nov 29, 2021
A free and open-source chess improvement app that combines the power of Lichess and Anki.

A free and open-source chess improvement app that combines the power of Lichess and Anki. Chessli Project Activity & Issue Tracking PyPI Build & Healt

null 93 Nov 23, 2022
TickerRain is an open-source web app that stores and analysis Reddit posts in a transparent and semi-interactive manner.

TickerRain is an open-source web app that stores and analysis Reddit posts in a transparent and semi-interactive manner

GonVas 180 Oct 8, 2022
null 1 May 12, 2022
Bionic is Python Framework for crafting beautiful, fast user experiences for web and is free and open source.

Bionic is Python Framework for crafting beautiful, fast user experiences for web and is free and open source. Getting Started This is an example of ho

null 14 Apr 10, 2022
A Python3 script to decode an encoded VBScript file, often seen with a .vbe file extension

vbe-decoder.py Decode one or multiple encoded VBScript files, often seen with a .vbe file extension. Usage usage: vbe-decoder.py [-h] [-o output] file

John Hammond 147 Nov 15, 2022
Python3 Interface to numa Linux library

py-libnuma is python3 interface to numa Linux library so that you can set task affinity and memory affinity in python level for your process which can help you to improve your code's performence.

Dalong 13 Nov 10, 2022
Rufus port to linux, writed on Python3

Rufus-for-Linux Rufus port to linux, writed on Python3 Программа будет иметь тот же интерфейс что и оригинал, и тот же функционал. Программа создается

null 6 Jan 7, 2022
IEEE ITU bunyesinde komitelere verilen Python3 egitiminin dokumanlastirilmis versiyonlari bu repository altinda tutulmaktadir.

IEEE ITU Python Egitimi Nasil Faydalanmaliyim? Dersleri izledikten sonra dokumanlardaki kodlari yorum satirlari isaretlerini kaldirarak deneyebilirsin

İTÜ IEEE Student Branch 47 Sep 4, 2022
Rufus port to linux, writed on Python3

Rufus-for-Linux Rufus port to linux, writed on Python3 Программа будет иметь тот же интерфейс что и оригинал, и тот же функционал. Программа создается

null 10 May 12, 2022
Let’s Play with Python3

Python3-FirstEdition a bunch of python programs and stuff Super Important Notice THIS IS LICENSED UNDER GNU PUBLIC LICENSE V3 also, refer to Contribut

Jym Patel 2 Nov 24, 2022
py-js: python3 objects for max

Simple (and extensible) python3 externals for MaxMSP

Shakeeb Alireza 39 Nov 20, 2022
Advanced IPv4 Subnet Calculator in Python3

Advanced IPv4 Subnet Calculator in Python3 Table of Contents Getting Started Installation How it works? SVI Configuration Template Previews Getting St

Osama Abbas 1 May 10, 2022
An extremely configurable markdown reverser for Python3.

?? Unmarkd A markdown reverser. Unmarkd is a BeautifulSoup-powered Markdown reverser written in Python and for Python. Why This is created as a StackS

ThatXliner 5 Jun 27, 2022