A Python implementation of FastDTW

Overview

fastdtw

Python implementation of FastDTW [1], which is an approximate Dynamic Time Warping (DTW) algorithm that provides optimal or near-optimal alignments with an O(N) time and memory complexity.

Install

pip install fastdtw

Example

import numpy as np
from scipy.spatial.distance import euclidean

from fastdtw import fastdtw

x = np.array([[1,1], [2,2], [3,3], [4,4], [5,5]])
y = np.array([[2,2], [3,3], [4,4]])
distance, path = fastdtw(x, y, dist=euclidean)
print(distance)

References

[1] Stan Salvador, and Philip Chan. "FastDTW: Toward accurate dynamic time warping in linear time and space." Intelligent Data Analysis 11.5 (2007): 561-580.
Comments
  • add cython

    add cython

    This also incorporated a way of calculating the dtw function, The new calculation resulted in 2x runtime performance with cython providing another 2x performance for a total of 4x. The test data was

    import fastdtw
    import numpy as np
    
    thetas = np.linspace(0, 2 * np.pi, 1000)
    x = np.sin(thetas)
    y = np.sin(thetas * 2)
    print(fastdtw.fastdtw_py(x, y, radius=1)[0])
    print(fastdtw.fastdtw_py2(x, y, radius=1)[0])
    print(fastdtw.fastdtw(x, y, radius=1)[0])
    

    with the following conventions: fastdtw_py - code in fastdtw/fastdtw_py.py fastdtw_py2 - pure python method but with new dtw function (this code is not committed but could be regenerated by moving fastdtw.pyx to a pure python module) fastdtw - cythonized code

    The new calculation method is faster because it

    * removes an unnecessary generator that adds +1 to the window in the
      dtw method.
    * minimizes accessing the defaultdict.
    * caches the list in expand window rather than recreating it every
      loop
    
    opened by esquires 19
  • add cython with alternative indexing approach

    add cython with alternative indexing approach

    Pull request #4 ended with the decision to go with an alternative indexing method that was faster. This pull request contains the indexing method. See pull request #4 for a speed comparison of the 2 methods.

    opened by esquires 16
  • To use the cython extension with windows ...

    To use the cython extension with windows ...

    I had to do the following modifications:

    1. Install the msvc for python https://www.microsoft.com/en-us/download/details.aspx?id=44266
    2. Adjust the setup.py a) to not use stdlibc++, b) to use cythonize (from Cython.Build import cythonize and in kwargs change ext_module to 'ext_modules': cythonize(extensions), c) import numpy and add include_dirs=[numpy.get_include()], in extensions:
    from setuptools import setup, find_packages, Extension
    from Cython.Build import cythonize
    import os.path
    import warnings
    import numpy
    
    classifiers = [
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 3',
        'Intended Audience :: Science/Research',
        'License :: OSI Approved :: MIT License',
        'Topic :: Scientific/Engineering'
    ]
    
    extensions = [Extension(
            'fastdtw._fastdtw',
            [os.path.join('fastdtw', "_fastdtw.pyx")],
            language="c++",
            include_dirs=[numpy.get_include()],
    #       if you want to debug from MSVC IDE uncomment the following
    #        extra_compile_args=["-Zi", "/Od"],
    #        extra_link_args=["-debug"],
    
    #        libraries=["stdc++","stdc"]
        )]
    
    kwargs = {
        'name': 'fastdtw',
        'version': '0.3.0',
        'author': 'Kazuaki Tanida',
        'url': 'https://github.com/slaypni/fastdtw',
        'description': 'Dynamic Time Warping (DTW) algorithm with an O(N) time and memory complexity.',
        'license': 'MIT',
        'keywords': ['dtw'],
        'install_requires': ['numpy'],
        'packages': find_packages(),
        'ext_modules':  cythonize(extensions),
        'test_suite': 'tests',
        'setup_requires': ['pytest-runner'],
        'tests_require': ['pytest'],
        'classifiers': classifiers
    }
    
    try:
        setup(**kwargs)
    except SystemExit:
        del kwargs['ext_modules']
        warnings.warn('compilation failed. Installing pure python package')
        setup(**kwargs)
    
    1. Modify the cpx to use the INFINITY definition from numpy:
    #from libc.math cimport INFINITY,pow, fabs
    from libc.math cimport pow, fabs
    from numpy.math cimport INFINITY
    

    Thank you for your great work!

    Jan

    opened by gitoops 8
  • cython extensions

    cython extensions

    This is a great library. Thank you for open sourcing it. It would be nice if it ran a bit faster perhaps with cython extensions. Is there any interest in that?

    opened by esquires 6
  • Make pytest-runner requirement conditional

    Make pytest-runner requirement conditional

    Don't require pytest-runner outside of tests because setup_requires behaves poorly in certain situations. For example, see https://github.com/pytest-dev/pytest-runner#conditional-requirement and https://github.com/pypa/pip/issues/410.

    opened by wshanks 5
  • fastdtw doesn't work in lambda...

    fastdtw doesn't work in lambda...

    I have two code. one is use default dist, another is use Euclidean func.. I test two code in my MacBook. and it work! but in AWS lambda it doesn't work.. but I don't know why.. because Euclidean func is work but default doesn't work.. this is AWS lambda error..

    >>> from fastdtw import fastdtw
    >>> import numpy as np
    >>> np.zeros((3,5))
    array([[ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])
    >>> a = np.zeros((3,5))
    >>> b = np.zeros((3,5))
    >>> fastdtw(a,b)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "fastdtw.py", line 65, in fastdtw
        return __fastdtw(x, y, radius, dist)
      File "fastdtw.py", line 85, in __fastdtw
        __fastdtw(x_shrinked, y_shrinked, radius=radius, dist=dist)
      File "fastdtw.py", line 80, in __fastdtw
        return dtw(x, y, dist=dist)
      File "fastdtw.py", line 128, in dtw
        (D[i-1, j-1][0]+dt, i-1, j-1), key=lambda a: a[0])
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    

    but same code In my Mackbook.. it work!

    >>> import numpy as np
    >>> from fastdtw import fastdtw
    >>> a = np.zeros((4,5))
    >>> b = np.zeros((4,5))
    >>> fastdtw(a,b)
    Out[6]: (0.0, [(0, 0), (1, 1), (2, 2), (3, 3)])
    >>> dist,path = fastdtw(a,b)
    >>> dist
    Out[8]: 0.0
    >>> path
    Out[9]: [(0, 0), (1, 1), (2, 2), (3, 3)]
    
    opened by wesky93 4
  • Incorrect DTW path for Euclidean distance?

    Incorrect DTW path for Euclidean distance?

    I'm struggling understanding a very simple example. I boiled it down to the following test:

    from fastdtw import fastdtw
    from scipy.spatial.distance import euclidean, sqeuclidean
    def test_euclidean_distance():
        q=[0,1,2,3,4,5,6,7,8]
        r=[1,2,3,4,5,6,7,8,0]
        distA, pathA = fastdtw(q, r, radius=2, dist=euclidean)
        distB, pathB = fastdtw(q, r, radius=2, dist=sqeuclidean)
        assert all([a==b for a,b in zip(pathA, pathB)])
        assert distA*distA == distB   # 9*9 == 65 fails
    

    Since the paths are the same I would expect to that also the distances are the same. The correct Euclidean distance should be sqrt(65) (only first and last elements of the input vectors contribute). Since it is 9 it looks like the Manhattan distance is used instead of the Euclidean distance.

    I have the feeling that I miss something simple. But could someone give me a hint?

    opened by weidenka 2
  • Synchronize more than 2 Time-Series

    Synchronize more than 2 Time-Series

    Hi,

    with the following code there is possible to synchronize two time series (x and y).

    import numpy as np from scipy.spatial.distance import euclidean

    from fastdtw import fastdtw
    
    x = np.array([[1,1], [2,2], [3,3], [4,4], [5,5]])
    y = np.array([[2,2], [3,3], [4,4]])
    distance, path = fastdtw(x, y, dist=euclidean)
    

    Is there any way how to synchronize more than two time series?

    I tried to: distance, path = fastdtw(x, y, z, dist=euclidean) but only size-1 arrays can be converted to Python scalars.

    opened by pit9921 2
  • FutureWarning raised due to future incompatibility with numpy >= 1.14.0

    FutureWarning raised due to future incompatibility with numpy >= 1.14.0

    Python version: 3.7.1

    It's quite an old issue, but I haven't seen it reported here yet (and it clutters up the output of scripts quite a bit).

    When using the latest version (0.3.2) of fastdtw and version of numpy>=1.14, a FutureWarning is raised:

    Minimum working example:

    In [1]: from fastdtw import fastdtw
    In [2]: x = [1, 2, 3, 4, 5]
    In [3]: y = [1, 2, 3, 4, 5]
    In [10]: fastdtw(x, y)
    /home/michael/miniconda3/envs/ds/bin/ipython:1: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
      #!/home/michael/miniconda3/envs/ds/bin/python
    Out[10]: (0.0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)])
    

    There are similarly related issues (that have since been resolved on the h5py project. https://github.com/h5py/h5py/issues/961

    Thanks!

    opened by mnicstruwig 2
  • fastdtw and dtw giving different answers.

    fastdtw and dtw giving different answers.

    timeseries1.xlsx timeseries2.xlsx

    i tried fastdtw and dtw on the two timeseries that I have uploaded.Both are giving different answers. Should it give the same answer or am I missing out something?

    opened by harsh244 2
  • question: compare sequences of strings with fastdtw

    question: compare sequences of strings with fastdtw

    I want to compare sequences of string with fastdtw, typically the lines of a text file, as done by diff.

    Is it possible? How would you do this?

    Thanks.

    opened by monperrus 2
  • Question about __expand_window()

    Question about __expand_window()

    Hi!

    Thank you for developing and sharing this library. I have been using it quite successfully.

    In function __expand_window(), is there a reason for thickening the path with radius before doubling the search window axes rather than the other way around? This way the search window becomes 4 * radius instead of 2 * radius.

    Thanks in advance, Vasco.

    opened by vascosantos 0
  • Bump certifi from 2019.3.9 to 2022.12.7

    Bump certifi from 2019.3.9 to 2022.12.7

    Bumps certifi from 2019.3.9 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump ipython from 7.4.0 to 7.16.3

    Bump ipython from 7.4.0 to 7.16.3

    Bumps ipython from 7.4.0 to 7.16.3.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Accessing fastdtw from C language

    Accessing fastdtw from C language

    Hi, I see that the main library is implemented in C. Can you please point out steps to load and call the fastdtw function from C language instead of python?

    opened by sriharsha-sammeta 0
  • Building wheel for fastdtw (setup.py) ... error

    Building wheel for fastdtw (setup.py) ... error

    Hi,

    When I used pip install fastdtw, I got this error:

    Collecting fastdtw Using cached fastdtw-0.3.4.tar.gz (133 kB) Requirement already satisfied: numpy in c:\users\alma\appdata\local\programs\python\python38\lib\site-packages (from fastdtw) (1.21.1) Building wheels for collected packages: fastdtw Building wheel for fastdtw (setup.py) ... error ERROR: Command errored out with exit status 1: command: 'c:\users\alma\appdata\local\programs\python\python38\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py'"'"'; file='"'"'C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d 'C:\Users\Alma\AppData\Local\Temp\pip-wheel-eqz2yrmr' cwd: C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2
    Complete output (46 lines): running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-3.8 creating build\lib.win-amd64-3.8\fastdtw copying fastdtw\fastdtw.py -> build\lib.win-amd64-3.8\fastdtw copying fastdtw_init_.py -> build\lib.win-amd64-3.8\fastdtw running build_ext Traceback (most recent call last): File "", line 1, in File "C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py", line 81, in setup(**kwargs) File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\setuptools_init_.py", line 153, in setup return distutils.core.setup(**attrs) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\core.py", line 148, in setup dist.run_commands() File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 966, in run_commands self.run_command(cmd) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\wheel\bdist_wheel.py", line 299, in run self.run_command('build') File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cmd.py", line 313, in run_command self.distribution.run_command(command) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\command\build.py", line 135, in run self.run_command(cmd_name) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cmd.py", line 313, in run_command self.distribution.run_command(command) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\setuptools\command\build_ext.py", line 79, in run _build_ext.run(self) File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\Cython\Distutils\old_build_ext.py", line 186, in run _build_ext.build_ext.run(self) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\command\build_ext.py", line 306, in run self.compiler = new_compiler(compiler=self.compiler, File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\ccompiler.py", line 1032, in new_compiler return klass(None, dry_run, force) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cygwinccompiler.py", line 282, in init CygwinCCompiler.init (self, verbose, dry_run, force) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cygwinccompiler.py", line 126, in init if self.ld_version >= "2.10.90": TypeError: '>=' not supported between instances of 'NoneType' and 'str'

    ERROR: Failed building wheel for fastdtw Running setup.py clean for fastdtw Failed to build fastdtw Installing collected packages: fastdtw Running setup.py install for fastdtw ... error ERROR: Command errored out with exit status 1: command: 'c:\users\alma\appdata\local\programs\python\python38\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py'"'"'; file='"'"'C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Alma\AppData\Local\Temp\pip-record-zr003v8k\install-record.txt' --single-version-externally-managed --compile --install-headers c:\users\alma\appdata\local\programs\python\python38\Include\fastdtw' cwd: C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2
    Complete output (48 lines): running install running build running build_py creating build creating build\lib.win-amd64-3.8 creating build\lib.win-amd64-3.8\fastdtw copying fastdtw\fastdtw.py -> build\lib.win-amd64-3.8\fastdtw copying fastdtw_init_.py -> build\lib.win-amd64-3.8\fastdtw running build_ext Traceback (most recent call last): File "", line 1, in File "C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py", line 81, in setup(**kwargs) File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\setuptools_init_.py", line 153, in setup return distutils.core.setup(**attrs) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\core.py", line 148, in setup dist.run_commands() File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 966, in run_commands self.run_command(cmd) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\setuptools\command\install.py", line 61, in run return orig.install.run(self) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\command\install.py", line 545, in run self.run_command('build') File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cmd.py", line 313, in run_command self.distribution.run_command(command) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\command\build.py", line 135, in run self.run_command(cmd_name) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cmd.py", line 313, in run_command self.distribution.run_command(command) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\setuptools\command\build_ext.py", line 79, in run _build_ext.run(self) File "c:\users\alma\appdata\local\programs\python\python38\lib\site-packages\Cython\Distutils\old_build_ext.py", line 186, in run _build_ext.build_ext.run(self) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\command\build_ext.py", line 306, in run self.compiler = new_compiler(compiler=self.compiler, File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\ccompiler.py", line 1032, in new_compiler return klass(None, dry_run, force) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cygwinccompiler.py", line 282, in init CygwinCCompiler.init (self, verbose, dry_run, force) File "c:\users\alma\appdata\local\programs\python\python38\lib\distutils\cygwinccompiler.py", line 126, in init if self.ld_version >= "2.10.90": TypeError: '>=' not supported between instances of 'NoneType' and 'str'

    ERROR: Command errored out with exit status 1: 'c:\users\alma\appdata\local\programs\python\python38\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py'"'"'; file='"'"'C:\Users\Alma\AppData\Local\Temp\pip-install-ntat_l8u\fastdtw_79f25377447c4796a756f2578fb594e2\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Alma\AppData\Local\Temp\pip-record -zr003v8k\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\alma\appdata\local\programs\python\python38\In clude\fastdtw' Check the logs for full command output.

    What should I do? Thanks in advance.

    opened by yusufalma 0
  • Bump urllib3 from 1.24.1 to 1.26.5

    Bump urllib3 from 1.24.1 to 1.26.5

    Bumps urllib3 from 1.24.1 to 1.26.5.

    Release notes

    Sourced from urllib3's releases.

    1.26.5

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed deprecation warnings emitted in Python 3.10.
    • Updated vendored six library to 1.16.0.
    • Improved performance of URL parser when splitting the authority component.

    If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors

    1.26.4

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Changed behavior of the default SSLContext when connecting to HTTPS proxy during HTTPS requests. The default SSLContext now sets check_hostname=True.

    If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors

    1.26.3

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed bytes and string comparison issue with headers (Pull #2141)

    • Changed ProxySchemeUnknown error message to be more actionable if the user supplies a proxy URL without a scheme (Pull #2107)

    If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors

    1.26.2

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed an issue where wrap_socket and CERT_REQUIRED wouldn't be imported properly on Python 2.7.8 and earlier (Pull #2052)

    1.26.1

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Fixed an issue where two User-Agent headers would be sent if a User-Agent header key is passed as bytes (Pull #2047)

    1.26.0

    :warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

    • Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)

    • Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that still wish to use TLS earlier than 1.2 without a deprecation warning should opt-in explicitly by setting ssl_version=ssl.PROTOCOL_TLSv1_1 (Pull #2002) Starting in urllib3 v2.0: Connections that receive a DeprecationWarning will fail

    • Deprecated Retry options Retry.DEFAULT_METHOD_WHITELIST, Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST and Retry(method_whitelist=...) in favor of Retry.DEFAULT_ALLOWED_METHODS, Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT, and Retry(allowed_methods=...) (Pull #2000) Starting in urllib3 v2.0: Deprecated options will be removed

    ... (truncated)

    Changelog

    Sourced from urllib3's changelog.

    1.26.5 (2021-05-26)

    • Fixed deprecation warnings emitted in Python 3.10.
    • Updated vendored six library to 1.16.0.
    • Improved performance of URL parser when splitting the authority component.

    1.26.4 (2021-03-15)

    • Changed behavior of the default SSLContext when connecting to HTTPS proxy during HTTPS requests. The default SSLContext now sets check_hostname=True.

    1.26.3 (2021-01-26)

    • Fixed bytes and string comparison issue with headers (Pull #2141)

    • Changed ProxySchemeUnknown error message to be more actionable if the user supplies a proxy URL without a scheme. (Pull #2107)

    1.26.2 (2020-11-12)

    • Fixed an issue where wrap_socket and CERT_REQUIRED wouldn't be imported properly on Python 2.7.8 and earlier (Pull #2052)

    1.26.1 (2020-11-11)

    • Fixed an issue where two User-Agent headers would be sent if a User-Agent header key is passed as bytes (Pull #2047)

    1.26.0 (2020-11-10)

    • NOTE: urllib3 v2.0 will drop support for Python 2. Read more in the v2.0 Roadmap <https://urllib3.readthedocs.io/en/latest/v2-roadmap.html>_.

    • Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)

    • Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that still wish to use TLS earlier than 1.2 without a deprecation warning

    ... (truncated)

    Commits
    • d161647 Release 1.26.5
    • 2d4a3fe Improve performance of sub-authority splitting in URL
    • 2698537 Update vendored six to 1.16.0
    • 07bed79 Fix deprecation warnings for Python 3.10 ssl module
    • d725a9b Add Python 3.10 to GitHub Actions
    • 339ad34 Use pytest==6.2.4 on Python 3.10+
    • f271c9c Apply latest Black formatting
    • 1884878 [1.26] Properly proxy EOF on the SSLTransport test suite
    • a891304 Release 1.26.4
    • 8d65ea1 Merge pull request from GHSA-5phf-pp7p-vc2r
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Owner
tanitter
tanitter
Implementation of different ML Algorithms from scratch, written in Python 3.x

Implementation of different ML Algorithms from scratch, written in Python 3.x

Gautam J 393 Nov 29, 2022
A Python implementation of the Robotics Toolbox for MATLAB

Robotics Toolbox for Python A Python implementation of the Robotics Toolbox for MATLAB® GitHub repository Documentation Wiki (examples and details) Sy

Peter Corke 1.2k Jan 7, 2023
A Python implementation of GRAIL, a generic framework to learn compact time series representations.

GRAIL A Python implementation of GRAIL, a generic framework to learn compact time series representations. Requirements Python 3.6+ numpy scipy tslearn

null 3 Nov 24, 2021
Implementation of linesearch Optimization Algorithms in Python

Nonlinear Optimization Algorithms During my time as Scientific Assistant at the Karlsruhe Institute of Technology (Germany) I implemented various Opti

Paul 3 Dec 6, 2022
Home repository for the Regularized Greedy Forest (RGF) library. It includes original implementation from the paper and multithreaded one written in C++, along with various language-specific wrappers.

Regularized Greedy Forest Regularized Greedy Forest (RGF) is a tree ensemble machine learning method described in this paper. RGF can deliver better r

RGF-team 363 Dec 14, 2022
High performance implementation of Extreme Learning Machines (fast randomized neural networks).

High Performance toolbox for Extreme Learning Machines. Extreme learning machines (ELM) are a particular kind of Artificial Neural Networks, which sol

Anton Akusok 174 Dec 7, 2022
TensorFlow implementation of an arbitrary order Factorization Machine

This is a TensorFlow implementation of an arbitrary order (>=2) Factorization Machine based on paper Factorization Machines with libFM. It supports: d

Mikhail Trofimov 785 Dec 21, 2022
Relevance Vector Machine implementation using the scikit-learn API.

scikit-rvm scikit-rvm is a Python module implementing the Relevance Vector Machine (RVM) machine learning technique using the scikit-learn API. Quicks

James Ritchie 204 Nov 18, 2022
This is an implementation of the proximal policy optimization algorithm for the C++ API of Pytorch

This is an implementation of the proximal policy optimization algorithm for the C++ API of Pytorch. It uses a simple TestEnvironment to test the algorithm

Martin Huber 59 Dec 9, 2022
Unofficial pytorch implementation of the paper "Context Reasoning Attention Network for Image Super-Resolution (ICCV 2021)"

CRAN Unofficial pytorch implementation of the paper "Context Reasoning Attention Network for Image Super-Resolution (ICCV 2021)" This code doesn't exa

null 4 Nov 11, 2021
Machine learning algorithms implementation

Machine learning algorithms implementation This repository consisits of implementation of various machine learning algorithms. The algorithms implemen

Karun Dawadi 1 Jan 3, 2022
Contains an implementation (sklearn API) of the algorithm proposed in "GENDIS: GEnetic DIscovery of Shapelets" and code to reproduce all experiments.

GENDIS GENetic DIscovery of Shapelets In the time series classification domain, shapelets are small subseries that are discriminative for a certain cl

IDLab Services 90 Oct 28, 2022
2D fluid simulation implementation of Jos Stam paper on real-time fuild dynamics, including some suggested extensions.

Fluid Simulation Usage Download this repo and store it in your computer. Open a terminal and go to the root directory of this folder. Make sure you ha

Mariana Ávalos Arce 5 Dec 2, 2022
Implementation of K-Nearest Neighbors Algorithm Using PySpark

KNN With Spark Implementation of KNN using PySpark. The KNN was used on two separate datasets (https://archive.ics.uci.edu/ml/datasets/iris and https:

Zachary Petroff 4 Dec 30, 2022
NumPy-based implementation of a multilayer perceptron (MLP)

My own NumPy-based implementation of a multilayer perceptron (MLP). Several of its components can be tuned and played with, such as layer depth and size, hidden and output layer activation functions, weight decay and dropout.

null 1 Feb 10, 2022
An implementation of Relaxed Linear Adversarial Concept Erasure (RLACE)

Background This repository contains an implementation of Relaxed Linear Adversarial Concept Erasure (RLACE). Given a dataset X of dense representation

Shauli Ravfogel 4 Apr 13, 2022
Python library which makes it possible to dynamically mask/anonymize data using JSON string or python dict rules in a PySpark environment.

pyspark-anonymizer Python library which makes it possible to dynamically mask/anonymize data using JSON string or python dict rules in a PySpark envir

null 6 Jun 30, 2022
Educational python for Neural Networks, written in pure Python/NumPy.

Educational python for Neural Networks, written in pure Python/NumPy.

null 127 Oct 27, 2022
learn python in 100 days, a simple step could be follow from beginner to master of every aspect of python programming and project also include side project which you can use as demo project for your personal portfolio

learn python in 100 days, a simple step could be follow from beginner to master of every aspect of python programming and project also include side project which you can use as demo project for your personal portfolio

BDFD 6 Nov 5, 2022