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
Script to work around some quirks of the blender obj importer

ObjFix 1.0 (WIP) Script to work around some quirks of the blender obj importer Installation Download this repo In Blender, press "Edit" on the top-bar

Red_3D 4 Nov 20, 2021
An application for automation of the mining function in the game Alienworlds.IO

alienautomation A Python script made to automate the tidious job of mining on AlienWorlds This script: Automatically opens the browser Automatically l

anonieXdev 42 Dec 03, 2022
AndroidEnv is a Python library that exposes an Android device as a Reinforcement Learning (RL) environment.

AndroidEnv is a Python library that exposes an Android device as a Reinforcement Learning (RL) environment.

DeepMind 814 Dec 26, 2022
The code for 2021 MGTV AI Challenge Anti Stealing Link, and the online result ranks 10th.

赛题介绍 芒果TV-第二届“马栏山杯”国际音视频算法大赛-防盗链 随着业务的发展,芒果的视频内容也深受网友的喜欢,不少视频网站和应用开始盗播芒果的视频内容,盗链网站不经过芒果TV的前端系统,跳过广告播放,且消耗大量的服务器、带宽资源,直接给公司带来了巨大的经济损失,因此防盗链在日常运营中显得尤为重要

tongji40 16 Jun 17, 2022
A simple desktop application to scan and export Genshin Impact Artifacts.

「天目」 -- Amenoma 简体中文 | English 「天目流的诀窍就是滴水穿石的耐心和全力以赴的意志」 扫描背包中的圣遗物,并导出至 json 格式。之后可导入圣遗物分析工具( 莫娜占卜铺 、 MingyuLab 、 Genshin Optimizer 进行计算与规划等。 已支持 原神2.

夏至 475 Dec 30, 2022
Just a simple python script to generate graphs of salt state requisites.

saltstatevis Just a simple python script to generate graphs of salt state requisites. Installation Requirements You will need to install graphviz to r

Dwayn Matthies 3 May 04, 2022
Buffer overflow example for python

Buffer overflow example for python

Mehmet 1 Jan 04, 2022
Just imagine normal bancho, but you can have multiple profiles and funorange speed up maps ranked

Local osu! server Just imagine normal bancho, but you can have multiple profiles and funorange speed up maps ranked (coming soon)! Windows Setup Insta

Cover 25 Nov 15, 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
Utility to play with ADCS, allows to request tickets and collect information about related objects

certi Utility to play with ADCS, allows to request tickets and collect information about related objects. Basically, it's the impacket copy of Certify

Eloy 185 Dec 29, 2022
Use Ghidra Structs in Python

Strudra Welcome to Strudra, a way to craft Ghidra structs in python, using ghidra_bridge. Example First, init Strudra - you can pass in a custom Ghidr

Dominik Maier 27 Nov 24, 2022
A simple program to recolour simple png icon-like pictures with just one colour + transparent or white background. Resulting images all have transparent background and a new colour.

A simple program to recolour simple png icon-like pictures with just one colour + transparent or white background. Resulting images all have transparent background and a new colour.

Anna Tůmová 0 Jan 30, 2022
tetrados is a tool to generate a density of states using the linear tetrahedron method from a band structure.

tetrados tetrados is a tool to generate a density of states using the linear tetrahedron method from a band structure. Currently, only VASP calculatio

Alex Ganose 1 Dec 21, 2021
Cardano SundaeSwap ISO SPO vote ranking script

Cardano SundaeSwap ISO SPOs vote ranking This Python 3 script uses the database populated by cardano-db-sync from the Cardano blockchain to generate a

SM₳UG 1 Nov 17, 2021
sumCulator Это калькулятор, который умеет складывать 2 числа.

sumCulator Это калькулятор, который умеет складывать 2 числа. Но есть условия: Эти 2 числа не могут быть отрицательными (всё-таки это вычитание, а не

0 Jul 12, 2022
Python script to automate the change of desktop background

wallomator Python script to automate the change of desktop background A python script that automates the process of changing the desktop background. I

Mohammed Haaris Javed 10 Jun 16, 2022
A Curated Collection of Awesome Python Scripts

A Curated Collection of Awesome Python Scripts that will make you go wow. This repository will help you in getting those green squares. Hop in and enjoy the journey of open source. 🚀

Prathima Kadari 248 Dec 31, 2022
Find all solutions to SUBSET-SUM, including negative, positive, and repeating numbers

subsetsum The subsetsum Python module can enumerate all combinations within a list of integers which sums to a specific value. It works for both negat

Trevor Phillips 9 May 27, 2022
京东热爱狂欢趴&京东扫码获取cookie

京东热爱狂欢趴 一键完成任务脚本来袭 活动地址: https://wbbny.m.jd.com/babelDiy/Zeus/2s7hhSTbhMgxpGoa9JDnbDzJTaBB/index.html#/home 2021-06-02更新: 1、删除京东星推官 2、更新脚本,修复火爆问题 2021

xoyi 48 Dec 28, 2022
It's an .exe file that can notify your chia profit and warning message every time automatically.

chia-Notify-with-Line 警示程式 It's an .exe file that can notify your chia profit and warning message every time automatically. 這是我自行設計的小程式,有轉成.exe檔了,可以在沒

You,Yu 1 Oct 28, 2021