Skip to main content

Multiple dispatch in Python

Project description

Plum: Multiple Dispatch in Python

CI Coverage Status Latest Docs Code style: black

Everybody likes multiple dispatch, just like everybody likes plums.

Installation

Plum requires Python 3.6 or higher.

pip install plum-dispatch

Basic Usage

Multiple dispatch allows you to implement multiple methods for the same function, where the methods specify the types of their arguments:

from plum import dispatch

@dispatch
def f(x: str):
    return "This is a string!"
    

@dispatch
def f(x: int):
    return "This is an integer!"
>>> f("1")
'This is a string!'

>>> f(1)
'This is an integer!'

We haven't implemented a method for floats, so in that case an exception will be raised:

>>> f(1.0)
NotFoundLookupError: For function "f", signature Signature(builtins.float) could not be resolved.

Instead of implementing a method for floats, let's implement a method for all numbers:

from numbers import Number

@dispatch
def f(x: Number):
    return "This is a number!"

Since a float is a Number, f(1.0) will return "This is a number!". But an int is also a Number, so f(1) can either return "This is an integer!" or "This is a number!". The rule of multiple dispatch is that the most specific method is chosen:

>>> f(1)
'This is an integer!'

since an int is a Number, but a Number is not necessarily an int.

For a function f, all available methods can be obtained with f.methods:

>>> f.methods
{Signature(builtins.str): (<function __main__.f(x:str)>, builtins.object),
 Signature(builtins.int): (<function __main__.f(x:int)>, builtins.object),
 Signature(numbers.Number): (<function __main__.f(x:numbers.Number)>,
  builtins.object)}

In the values, the first element in the tuple is the implementation and the second element the return type.

For an excellent and way more detailed overview of multiple dispatch, see the manual of the Julia Language.

Scope of Functions

Consider the following package design.

package/__init__.py

import a
import b

package/a.py

from plum import dispatch

@dispatch
def f(x: int):
   return "int"

package/b.py

from plum import dispatch

@dispatch
def f(x: float):
   return "float"

In a design like this, the methods for f recorded by dispatch are global:

>>> from package.a import f

>>> f(1.0)
'float'

This could be what you want, but it can also be undesirable, because it means that someone could accidentally overwrite your methods. To keep your functions private, you can create new dispatchers:

package/__init__.py

import a
import b

package/a.py

from plum import Dispatcher

dispatch = Dispatcher()


@dispatch
def f(x: int):
   return "int"

package/b.py

from plum import Dispatcher

dispatch = Dispatcher()


@dispatch
def f(x: float):
   return "float"
>>> from package.a import f

>>> f(1)
'int'

>>> f(1.0)
NotFoundLookupError: For function "f", signature Signature(builtins.float) could not be resolved.

>>> from package.b import f

>>> f(1)
NotFoundLookupError: For function "f", signature Signature(builtins.int) could not be resolved.

>>> f(1.0)
'float'

Classes

You can use dispatch within classes:

from plum import dispatch

class Real:
   @dispatch
   def __add__(self, other: int):
      return "int added"
   
   @dispatch
   def __add__(self, other: float):
      return "float added"
>>> real = Real()

>>> real + 1
'int added'

>>> real + 1.0
'float added'

If you use other decorators, then dispatch must be the outermost decorator:

class Real:
   @dispatch
   @decorator
   def __add__(self, other: int):
      return "int added"

Forward References

Imagine the following design:

from plum import dispatch

class Real:
    @dispatch
    def __add__(self, other: Real):
        pass # Do something here. 

If we try to run this, we get the following error:

NameError                                 Traceback (most recent call last)
<ipython-input-1-2c6fe56c8a98> in <module>
      1 from plum import dispatch
      2
----> 3 class Real:
      4     @dispatch
      5     def __add__(self, other: Real):

<ipython-input-1-2c6fe56c8a98> in Real()
      3 class Real:
      4     @dispatch
----> 5     def __add__(self, other: Real):
      6         pass # Do something here.

NameError: name 'Real' is not defined

The problem is that name Real is not yet defined, when __add__ is defined and the type hint for other is set. To circumvent this issue, you can use a forward reference:

from plum import dispatch

class Real:
    @dispatch
    def __add__(self, other: "Real"):
        pass # Do something here. 

Note: A forward reference "A" will resolve to the next defined class A in which dispatch is used. This works fine for self references. In is recommended to only use forward references for self references. For more advanced use cases of forward references, you can use plum.type.PromisedType.

Keyword Arguments and Default Values

Default arguments can be used. The type annotation must match the default value otherwise an error is thrown. As the example below illustrates, different default values can be used for different methods:

from plum import dispatch

@dispatch
def f(x: int, y: int = 3):
    return y


@dispatch
def f(x: float, y: float = 3.0):
    return y
>>> f(1)
3

>>> f(1.0)
3.0

>>> f(1.0, 4.0)
4.0

>>> f(1.0, y=4.0)
4.0

Keyword-only arguments, separated by an asterisk from the other arguments, can also be used, but are not dispatched on.

Example:

from plum import dispatch

@dispatch
def f(x, *, option="a"):
    return option
>>> f(1)
'a'

>>> f(1, option="b")
'b'

>>> f(1, "b")  # This will not work, because `option` must be given as a keyword.
NotFoundLookupError: For function "f", signature Signature(builtins.int, builtins.str) could not be resolved.

Comparison with multipledispatch

As an alternative to Plum, there is multipledispatch, which also is a great solution. Plum was developed to provide a slightly more featureful implementation of multiple dispatch.

Like multipledispatch, Plum's caching mechanism is optimised to minimise overhead.

from multipledispatch import dispatch as dispatch_md
from plum import dispatch as dispatch_plum

@dispatch_md(int)
def f_md(x):
   return x


@dispatch_plum
def f_plum(x: int):
   return x


def f_native(x):
    return x
>>> f_md(1); f_plum(1);  # Run once to populate cache.

>>> %timeit f_native(1)
82.4 ns ± 0.162 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

>>> %timeit f_md(1)
845 ns ± 77.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

>>> %timeit f_plum(1)
404 ns ± 2.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Plum synergises with OOP.

Consider the following snippet:

from multipledispatch import dispatch

class A:
    def f(self, x):
        return "fallback"
        

class B:
    @dispatch(int)
    def f(self, x):
        return x
>>> b = B()

>>> b.f(1)
1

>>> b.f("1")
NotImplementedError: Could not find signature for f: <str>

This behaviour might be undesirable: since B.f isn't matched, we could want A.f to be tried next. Plum supports this:

from plum import dispatch

class A:
    def f(self, x):
        return "fallback"


class B(A):
    @dispatch
    def f(self, x: int):
        return x
>>> b = B()

>>> b.f(1)
1

>>> b.f("1")
'fallback'

Plum supports forward references.

Plum supports parametric types from typing.

Plum attempts to stay close to Julia's type system.

For example, multipledispatch's union type is not a true union type:

from multipledispatch import dispatch

@dispatch((object, int), int)
def f(x, y):
    return "first"
    

@dispatch(int, object)
def f(x, y):
    return "second"
>>> f(1, 1)
'first'

Because the union of object and int is object, f(1, 1) should raise an ambiguity error! For example, compare with Julia:

julia> f(x::Union{Any, Int}, y::Int) = "first"
f (generic function with 1 method)

julia> f(x::Int, y::Any) = "second"
f (generic function with 2 methods)

julia> f(3, 3)
ERROR: MethodError: f(::Int64, ::Int64) is ambiguous. Candidates:
  f(x, y::Int64) in Main at REPL[1]:1
  f(x::Int64, y) in Main at REPL[2]:1

Plum does provide a true union type:

from typing import Union

from plum import dispatch

@dispatch
def f(x: Union[object, int], y: int):
    return "first"


@dispatch
def f(x: int, y: object):
    return "second"
>>> f(1, 1)
AmbiguousLookupError: For function "f", signature Signature(builtins.int, builtins.int) is ambiguous among the following:
  Signature(builtins.object, builtins.int) (precedence: 0)
  Signature(builtins.int, builtins.object) (precedence: 0)

Just to sanity check that things are indeed working correctly:

>>> f(1.0, 1)
'first'

>>> f(1, 1.0)
'second'

Plum implements method precedence.

Method precedence can be a very powerful tool to simplify more complicated designs.

Plum provides generic convert and promote functions.

Type System

Union Types

typing.Union can be used to instantiate union types:

from typing import Union

from plum import dispatch

@dispatch
def f(x):
    return "fallback"


@dispatch
def f(x: Union[int, str]):
    return "int or str"
>>> f(1)
'int or str'

>>> f("1")
'int or str'

>>> f(1.0)
'fallback'

Parametric Types

The parametric types typing.Tuple, typing.List, typing.Dict, typing.Iterable, and typing.Sequence can be used to dispatch on respectively tuples, lists, dictionaries, iterables, and sequence with particular types of elements. Importantly, the type system is covariant, as opposed to Julia's type system, which is invariant.

Example involving some parametric types:

from typing import Union, Tuple, List, Dict

from plum import dispatch

@dispatch
def f(x: Union[tuple, list]):
    return "tuple or list"
    
    
@dispatch
def f(x: Tuple[int, int]):
    return "tuple of two ints"
    
    
@dispatch
def f(x: List[int]):
    return "list of int"


@dispatch
def f(x: Dict[int, str]):
   return "dict of int to str"
>>> f([1, 2])
'list of int'

>>> f([1, "2"])
'tuple or list'

>>> f((1, 2))
'tuple of two ints'

>>> f((1, 2, 3))
'tuple or list'

>>> f((1, "2"))
'tuple or list'

>>> f({1: "2"})
'dict of int to str'

Note: Although parametric types are supported, parametric types do incur a significant performance hit, because the type of every element in a list or tuple must be checked. It is recommended to use parametric types only where absolutely necessary.

Variable Arguments

A variable number of arguments can be used without any problem.

from plum import dispatch

@dispatch
def f(x: int):
    return "single argument"
    

@dispatch
def f(x: int, *xs: int):
    return "multiple arguments"
>>> f(1)
'single argument'

>>> f(1, 2)
'multiple arguments'

>>> f(1, 2, 3)
'multiple arguments'

Return Types

Return types can be used without any problem.

from typing import Union

from plum import dispatch, add_conversion_method

@dispatch
def f(x: Union[int, str]) -> int:
    return x
>>> f(1)
1

>>> f("1")
TypeError: Cannot convert a "builtins.str" to a "builtins.int".

>>> add_conversion_method(type_from=str, type_to=int, f=int)

>>> f("1")
1

Conversion and Promotion

Conversion

The function convert can be used to convert objects of one type to another:

from numbers import Number

from plum import convert


class Rational:
    def __init__(self, num, denom):
        self.num = num
        self.denom = denom
>>> convert(0.5, Number)
0.5

>>> convert(Rational(1, 2), Number)
TypeError: Cannot convert a "__main__.Rational" to a "numbers.Number".

The TypeError indicates that convert does not know how to convert a Rational to a Number. Let us implement that conversion:

from operator import truediv

from plum import conversion_method
        

@conversion_method(type_from=Rational, type_to=Number)
def rational_to_number(q):
    return truediv(q.num, q.denom)
>>> convert(Rational(1, 2), Number)
0.5

Instead of the decorator conversion_method, one can also use add_conversion_method:

from plum import add_conversion_method

add_conversion_method(type_from, type_to, conversion_function)

Promotion

The function promote can be used to promote objects to a common type:

from plum import dispatch, promote, add_promotion_rule, add_conversion_method

@dispatch
def add(x, y):
    return add(*promote(x, y))
    
    
@dispatch
def add(x: int, y: int):
    return x + y
    
    
@dispatch
def add(x: float, y: float):
    return x + y
>>> add(1, 2)
3

>>> add(1.0, 2.0)
3.0

>>> add(1, 2.0)
TypeError: No promotion rule for "builtins.int" and "builtins.float".

>>> add_promotion_rule(int, float, float)

>>> add(1, 2.0)
TypeError: Cannot convert a "builtins.int" to a "builtins.float".

>>> add_conversion_method(type_from=int, type_to=float, f=float)

>>> add(1, 2.0)
3.0

Advanced Features

Abstract Function Definitions

A function can be abstractly defined using dispatch.abstract. When a function is abstractly defined, the function is created, but no methods are defined.

from plum import dispatch

@dispatch.abstract
def f(x):
    pass
>>> f
<function <function f at 0x7f9f6820aea0> with 0 method(s)>

>>> @dispatch
... def f(x: int):
...     pass

>>> f
<function <function f at 0x7f9f6820aea0> with 1 method(s)>

Method Precedence

The keyword argument precedence can be set to an integer value to specify precedence levels of methods, which are used to break ambiguity:

from plum import dispatch

class Element:
    pass


class ZeroElement(Element):
    pass


class SpecialisedElement(Element):
    pass


@dispatch
def mul_no_precedence(a: ZeroElement, b: Element):
    return "zero"


@dispatch
def mul_no_precedence(a: Element, b: SpecialisedElement):
    return "specialised operation"
    

@dispatch(precedence=1)
def mul(a: ZeroElement, b: Element):
    return "zero"


@dispatch
def mul(a: Element, b: SpecialisedElement):
    return "specialised operation"
>>> zero = ZeroElement()

>>> specialised_element = SpecialisedElement()

>>> element = Element()

>>> mul(zero, element)
'zero'

>>> mul(element, specialised_element)
'specialised operation'

>>> mul_no_precedence(zero, specialised_element)
AmbiguousLookupError: For function "mul_no_precedence", signature Signature(__main__.ZeroElement, __main__.SpecialisedElement) is ambiguous among the following:
  Signature(__main__.ZeroElement, __main__.Element) (precedence: 0)
  Signature(__main__.Element, __main__.SpecialisedElement) (precedence: 0)

>>> mul(zero, specialised_element)
'zero'

The method precedences of all implementations of a function can be obtained with the attribute precedences:

>>> mul_no_precedence.precedences
{Signature(__main__.ZeroElement, __main__.Element): 0,
 Signature(__main__.Element, __main__.SpecialisedElement): 0}

>>> mul.precedences
{Signature(__main__.ZeroElement, __main__.Element): 1,
 Signature(__main__.Element, __main__.SpecialisedElement): 0}

Parametric Classes

The decorator @parametric can be used to create parametric classes:

from plum import dispatch, parametric

@parametric
class A:
    def __init__(self, x, *, y = 3):
        self.x = x
        self.y = y
    
    
@dispatch
def f(x: A):
    return "fallback: x={}".format(x.x)
    
    
@dispatch
def f(x: A[int]):
    return "int x={}".format(x.x)
    
    
@dispatch
def f(x: A[float]):
    return "float x={}".format(x.x)
>>> A
__main__.A

>>> A[int]
__main__.A[builtins.int]

>>> issubclass(A[int], A)
True

>>> type(A(1)) == A[int]
True

>>> A[int](1)
<__main__.A[builtins.int] at 0x10c2bab70>

>>> f(A[int](1))
'int x=1'

>>> f(A(1))
'int x=1'

>>> f(A(1.0))
'float x=1.0'

>>> f(A(1 + 1j))
'fallback: x=1+1j'

Note: Calling A[pars] on parametrized type A instantiates the concrete type with parameters pars. If A(args) is called directly, the concrete type is first instantiated by taking the type of all positional arguments, and then an instance of the type is created.

This behaviour can be customized by overriding the @classmethod __infer_type_parameter__ of the parametric class. This method must return the type parameter or a tuple of type parameters.

from plum import parametric

@parametric
class NTuple:
    @classmethod
    def __infer_type_parameter__(self, *args):
        # Mimicks the type parameters of an `NTuple`.
        T = type(args[0])
        N = len(args)
        return (N, T)

    def __init__(self, *args):
        # Check that the arguments satisfy the type specification.
        T = type(self)._type_parameter[1]
        assert all(isinstance(val, T) for val in args)
        self.args = args
>>> type(NTuple(1, 2, 3))
__main__.NTuple[3, <class 'int'>]

Hooking Into Type Inference

With parametric classes, you can hook into Plum's type inference system to do cool things! Here's an example which introduces types for NumPy arrays of particular ranks:

import numpy as np
from plum import dispatch, parametric, type_of


@parametric(runtime_type_of=True)
class NPArray(np.ndarray):
    """A type for NumPy arrays where the type parameter specifies the number of
    dimensions."""


@type_of.dispatch
def type_of(x: np.ndarray):
    # Hook into Plum's type inference system to produce an appropriate instance of
    # `NPArray` for NumPy arrays.
    return NPArray[x.ndim]


@dispatch
def f(x: NPArray[1]):
    return "vector"


@dispatch
def f(x: NPArray[2]):
    return "matrix"
>>> f(np.random.randn(10))
'vector'

>>> f(np.random.randn(10, 10))
'matrix'

>>> f(np.random.randn(10, 10, 10))
NotFoundLookupError: For function "f", signature Signature(__main__.NPArray[3]) could not be resolved.

Add Multiple Methods

Dispatcher.multi can be used to implement multiple methods at once:

from typing import Union

from plum import dispatch

@dispatch.multi((int, int), (float, float))
def add(x: Union[int, float], y: Union[int, float]):
    return x + y
>>> add(1, 1)
2

>>> add(1.0, 1.0)
2.0

>>> add(1, 1.0)
NotFoundLookupError: For function "add", signature Signature(builtins.int, builtins.float) could not be resolved.

Extend a Function From Another Package

Function.dispatch can be used to extend a particular function from an external package:

from package import f

@f.dispatch
def f(x: int):
    return "new behaviour"
>>> f(1.0)
'old behaviour'

>>> f(1)
'new behaviour'

Directly Invoke a Method

Function.invoke can be used to invoke a method given types of the arguments:

from plum import dispatch

@dispatch
def f(x: int):
    return "int"
    
    
@dispatch
def f(x: str):
    return "str"
>>> f(1)
'int'

>>> f("1")
'str'

>>> f.invoke(int)("1")
'int'

>>> f.invoke(str)(1)
'str'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plum-dispatch-1.5.6.tar.gz (48.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

plum_dispatch-1.5.6-pp37-pypy37_pp73-win_amd64.whl (107.9 kB view details)

Uploaded PyPyWindows x86-64

plum_dispatch-1.5.6-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (126.8 kB view details)

Uploaded PyPymanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (128.0 kB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (113.5 kB view details)

Uploaded PyPymacOS 10.9+ x86-64

plum_dispatch-1.5.6-cp310-cp310-win_amd64.whl (126.5 kB view details)

Uploaded CPython 3.10Windows x86-64

plum_dispatch-1.5.6-cp310-cp310-win32.whl (113.8 kB view details)

Uploaded CPython 3.10Windows x86

plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_x86_64.whl (587.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_i686.whl (564.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

plum_dispatch-1.5.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (528.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (510.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.6-cp310-cp310-macosx_10_9_x86_64.whl (146.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

plum_dispatch-1.5.6-cp39-cp39-win_amd64.whl (125.8 kB view details)

Uploaded CPython 3.9Windows x86-64

plum_dispatch-1.5.6-cp39-cp39-win32.whl (113.8 kB view details)

Uploaded CPython 3.9Windows x86

plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_x86_64.whl (584.7 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_i686.whl (563.9 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

plum_dispatch-1.5.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (527.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (509.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.6-cp39-cp39-macosx_10_9_x86_64.whl (146.9 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

plum_dispatch-1.5.6-cp38-cp38-win_amd64.whl (125.8 kB view details)

Uploaded CPython 3.8Windows x86-64

plum_dispatch-1.5.6-cp38-cp38-win32.whl (113.5 kB view details)

Uploaded CPython 3.8Windows x86

plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_x86_64.whl (640.2 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_i686.whl (613.3 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

plum_dispatch-1.5.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (574.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (550.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.6-cp38-cp38-macosx_10_9_x86_64.whl (145.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

plum_dispatch-1.5.6-cp37-cp37m-win_amd64.whl (122.8 kB view details)

Uploaded CPython 3.7mWindows x86-64

plum_dispatch-1.5.6-cp37-cp37m-win32.whl (110.8 kB view details)

Uploaded CPython 3.7mWindows x86

plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_x86_64.whl (528.8 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_i686.whl (503.3 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ i686

plum_dispatch-1.5.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (470.6 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (449.4 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.6-cp37-cp37m-macosx_10_9_x86_64.whl (143.3 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

plum_dispatch-1.5.6-cp36-cp36m-win_amd64.whl (122.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

plum_dispatch-1.5.6-cp36-cp36m-win32.whl (111.0 kB view details)

Uploaded CPython 3.6mWindows x86

plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_x86_64.whl (530.7 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ x86-64

plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_i686.whl (503.5 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ i686

plum_dispatch-1.5.6-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (472.0 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (451.3 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.6-cp36-cp36m-macosx_10_9_x86_64.whl (142.7 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file plum-dispatch-1.5.6.tar.gz.

File metadata

  • Download URL: plum-dispatch-1.5.6.tar.gz
  • Upload date:
  • Size: 48.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for plum-dispatch-1.5.6.tar.gz
Algorithm Hash digest
SHA256 6f406ce1e032b46f04791b806b1923e5ab20a7234c1999441aa10c0b3a9ba7ce
MD5 49d2a04e65c0a9e537fe36610e720fa0
BLAKE2b-256 00f448e182826abf2ecb5ecfb60ddeab7aa54a9d1313d9fdc6d841c8eea5ba06

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-pp37-pypy37_pp73-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-pp37-pypy37_pp73-win_amd64.whl
  • Upload date:
  • Size: 107.9 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-pp37-pypy37_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 38ccbaf5bb9c9d227fc6dd73ced12b48e0b97dcc3991a6db66e0c8e5e9099e5a
MD5 586e5aabde4204b263f204557f1b27fa
BLAKE2b-256 f0f26128ee6ce8277904c57733897069beba185442529d522c84d98aa1940c36

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9c0fea2b1d3f49a6bb7509984eb17ed0df13c98c7f16606bc972152d3fc4f9a5
MD5 8aff17ebb7df2c832028efdbe4c84d1d
BLAKE2b-256 3c5ed7832f89676285a143891847aadc5fc7119af18e9b48e9740260ac8f1b9d

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 7c85e163e3280cf69816c09c002b24dbd278f957ebc16b7b9071279937221c8d
MD5 a1b233621bdcacca79c33e9ab9f0b239
BLAKE2b-256 15e1b85b9f62afbbe3b4dd89476f7a5ede10994c126be48fb5739a71cf344ac1

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 113.5 kB
  • Tags: PyPy, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9165a17d40394bf4ca8689287c9f655eed5715fcf115a6ba949e92873ec5606c
MD5 754ce97dd12e3410e9e1fcbfbfffb0f5
BLAKE2b-256 2d332891ff675218f3a181364e37f043eabf7e9fc137f8705231cf3ed2c1a65f

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 126.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d81a7bd647ec6bfe5f1f5504843db06f21edbeda35b2676d625bd2f3d75b98ff
MD5 bee03c8bdba3f9d591a46d380eb8f1d7
BLAKE2b-256 5ba8a26c384da5f6628e6e71f8e5dfcbce7056f7fe345457f8e92b990a613d3f

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp310-cp310-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp310-cp310-win32.whl
  • Upload date:
  • Size: 113.8 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 920b845c2c86df3f4f3f0cb6b043d703bb7bbb074de1bb8dd36450c2ee924b3b
MD5 ffe951d8d49298dc62d4b24a365d2d9f
BLAKE2b-256 0734e7efd4e2c4e02094933c1fa475ec760f84424f3d01c113c4cbf770a66a96

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 587.3 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 caf1a9590b0a600545b8ed0e561410af58ba934e976a406030591fa38c97ff21
MD5 5042cc5d487d095c664f402c14c46385
BLAKE2b-256 2e49720d3ad59926d0ef9007f0f50c98da0e16102528d8df47cbe2e022dd5229

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 564.5 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 d78f180aef9b4ff690d4d80ecc15f4046c60fb175e108d9c36043ae86e87bcf3
MD5 f914ccd11ce6660a347c420aa8ae5bf4
BLAKE2b-256 b5a329f0a85e3355a5e489fcfafc911711292594ee7c3e558dbb1f5627c53562

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 df0e325ddce0b3ee4414da9b1db6aa28453c9f36df23bcb52e454f20f6503a84
MD5 941eb2fb4ef4659e37c6db1aa8c32127
BLAKE2b-256 174068b1d6a205e6b03d62504768cac24b91585a3a08fc3f64ed838b06848f8c

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 555c114d2530b26e01232c8d101b8032510d5f8e96e0ef161acf2002bf10987c
MD5 38203f388a4a573fa2dcebf880cf6349
BLAKE2b-256 62e19f6d4946d59e4f293d94e71129a628e5d5b4895c9ec7665d5eb2b066c75c

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 146.8 kB
  • Tags: CPython 3.10, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 63997d6bd8f7049953834f3a815e70445641df47d1e4468b9800c6ab2c578ee6
MD5 84ffc6cde6d17735f1bfdb4602e22392
BLAKE2b-256 0899ed460c0dd3bea54cb4cdac721d5974ccfbf1450d3a54119ae91934804fb3

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 125.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f89df01221112d54f4927bc17e8cddfc24a00573999614c29f13a42112df20ae
MD5 3b2134a56f9b5cf226b842755bb7d854
BLAKE2b-256 a94ee7af4cb182eb61b3b89133eb17d9dde2e85fdc76b4722d721fdb5682bdb1

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp39-cp39-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp39-cp39-win32.whl
  • Upload date:
  • Size: 113.8 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 62767a2950cf541c7c25cda62f50cc8ae63aa2713f79a028992372d5328f5a3a
MD5 7c42f2fcb39ecae240313893573877db
BLAKE2b-256 f98a1cfdd4d0519fa53c572ada4a64527cc5321eadfb9b70d11f9816842cf972

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 584.7 kB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 739d86f6128b5f88f3a822e2c1a100bb3b99f84e726ba9e383a3505f0fc1eb54
MD5 4fd53e646c53605538b23b0919e66c39
BLAKE2b-256 cfdb0e0df180c12a5c47015ee7670cae54502b58be30c06ce30684f5826caa24

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 563.9 kB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0160125de2212511aa129cd82e6669e4260e5ac1c6c945163703fb8117b85e9f
MD5 81b8713f3acc0e815f22235afccde018
BLAKE2b-256 46bb57d075b1c69e673890283813d0af603d6b38e182036d0dad5c314ae3cd96

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 02e2999f9125b8f15061854071a9c041416e2d5b203e04b850bf5e7b70d0908b
MD5 7922b951a3d166f8f59187e185130749
BLAKE2b-256 5ff93aec9e1b7b2782d8de0d01b898320fb888c1d278b45bde4eaaa567794c14

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 602d45151b506cd8b21fdedb8da73cf24ef45b788cbac24a1ef9c4948fe99718
MD5 3be21c53796b10465267582da8fd6c18
BLAKE2b-256 d02c12663947dc7d243053adfc965d8fedd608d497f8efa8f6eb829262575deb

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 146.9 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 49296a218f4cb9aff1d72c846589ebd6df83c8557abdc96473e91bc0d9148bc6
MD5 6282e591a763277751010f7e13fd9190
BLAKE2b-256 d057d3da07b7ae339fa56a959c1417ae3dbaa3d5055ee8d1cb863b6469745753

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 125.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 cb979314a886b3fd9841eab8d99a84b8bb944e2977e581e2be71e45c09c8310d
MD5 7eb88fd636d7f442e07d2bdb796ac004
BLAKE2b-256 b98d153f94d24551562ab765b6acade8f66e6858ca81c472ddfa47117263465e

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp38-cp38-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp38-cp38-win32.whl
  • Upload date:
  • Size: 113.5 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 fc071fc493d0b1ff5d99c320ad92264e3fbf8a06d58bb0d46f3e98140256219b
MD5 3109b37ad924a11b39a9813b2c83ac28
BLAKE2b-256 a3ee052bf01b7af3204aceebdeee76d39a3325637e5b6be8e22a4a23cabb2cd3

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 640.2 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 cc7271087a66afb370fa09815711cb270d8cb7ba2f2f6b987f4554b429dda7c7
MD5 d793a4a575db78475b4fd8c63f31f863
BLAKE2b-256 3890f61d7275ec2eda6c47fc978587d37fb7ee8eb50bd95df069aca4725bff9a

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 613.3 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 8ff1133d4a590f0a6fcae21405857dc772436e2408f4a2aab83e6d07778f29dc
MD5 1288436d72e0ebeb2885660d93558567
BLAKE2b-256 37cfc7b3391877eb2580550e45b6288c5addae539759043e2dd5cc36438ad868

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 7eadb2d2ff7351cec3abc1d6585fcb6ef227c856b7585d98e3f75057c58b4608
MD5 e689be3b77ea53b11b8ce9c0b4162fcf
BLAKE2b-256 2b4ece03963445375b9fe352aecbb38c0ba25cabeada6c5a1281f606bcf38cf4

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 b92a2241a428030e9c0380d3bef96d4c39f6ef52bdf3fac2562fb3b0f4f829aa
MD5 ccb58f4990f4dc599a874f285f50150e
BLAKE2b-256 6a8d63230260754d6a7fa91a68576dc97c8ca885a9c1817adec61d62575f34f7

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 145.2 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 11709678db030cae67786a455c610424a2d425b4ecff005bbea2956ba8a00a1e
MD5 bd6a1cc6b1b752e9ff501c57093b2d7e
BLAKE2b-256 76c2cee9418fb005c11d54426e8611a297e63eab6e8d4e56880dc2b655287273

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 122.8 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 9229e3b088d7d45ad8f89118eb0f2320037f5e197d6719ef09332df4e43e02e9
MD5 51c8f2a2daf61592f5bc14e0a0f12b6a
BLAKE2b-256 5787ec00b2da7c6e84043f27c4241f0489efed5a1a7376ee607899001f5bca13

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp37-cp37m-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 110.8 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 49ed31a194c764a09483dc51dc0f4bc0a71c84423f10267fd93859906e1a22e6
MD5 449b181ee371339285d3f2e3fa0dc94d
BLAKE2b-256 64afd6068f818edca6019ccd6553ae74820c76f2f0c92302b45e3a01e3eee477

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 528.8 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 66fcbe1d91b14f2f42187d52649568e2c1a391281c44af68be39078bc320cde7
MD5 263dc1da0ed832ff380aafb4075bb239
BLAKE2b-256 20496a7751b95fe35b5201585d755b81806296db79cdfd78c150cb566833af67

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 503.3 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0400ab0ba6b67f3a2594e5e285c684936ee676f278e9036fe2b4827d093dadf6
MD5 fe6df0e4e812093fab0017492bbd2c6d
BLAKE2b-256 ea89057459c9f849a70dd91376c91433e4b0ea788e4872589c6f32b8c439d06d

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 eb713608497aed5364746b84f3fe577f99524b182729229fa579a1b015017506
MD5 075b8f276d2277db391db2efb899ba01
BLAKE2b-256 760e78c4d71f59d93cc64e1c0296901b92e5da3582b1e2103d9954e3e060eea7

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 ce62eba5c2eb62eeda03a8af7457990f87b5567d8b49c9223b320c5ba99de103
MD5 8ba1b45e2446c7329049265d52d9ae5b
BLAKE2b-256 e00ab6c0ce6025ec3769435f8dca905f6c22b21ee18c65cfa6b827c2e92c2dda

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 143.3 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 48690dfaa866b7866248123b5500a363f76f3f084504ac0cd10cf11aa9b8940a
MD5 2a5073d594b6fb134100ee7c89d51918
BLAKE2b-256 b67150876bd9e1311e9c0ef9609dac2a305519d725710a59d4fe939b420aef47

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 122.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 a46ba0e625db73cf295532114ffc9195f64ec5daf1080b7449f3b2a77f0cfc12
MD5 ad6441a780cbf2037f4e073fc08b6dee
BLAKE2b-256 ba94f78ad16d2457a4e7d54fd8556bf4c313590cb171488e615ea27bd843f61d

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp36-cp36m-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 111.0 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 6bc42e7b00a3039ead22299a19ae0480d06d97e0b795e05d331e9dde9dcf1bac
MD5 e4c1ee091bcb8dd75047c102e1372c76
BLAKE2b-256 b03b27dff35cf65998cc6168da53db744ec3161ecd6ed9af79107c7319799b1c

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 530.7 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 27214323b3f1e53904ff60590f4792a4d11ee9e4fdd118541a8b453fefb380fd
MD5 f0c1e8f6a7607154aa1277b6d3dfcbbf
BLAKE2b-256 bf5ba58b764fad8cbf96b7fb411fbaaa5d77b5fc8f0ccc492dd4bf1cc78459bd

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 503.5 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 fb41100456cd587c6cfd3642f8c8b3deb46fcd7579ecff420492dccb1caf5748
MD5 d34f8651f7334d7117e8a1f8404cb917
BLAKE2b-256 6322a5880034cc65fc8f1d11991a9000e7524fcc2f1a52cdac54dac3670ac5ec

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c4690e754847062ad5c52b6b2227b49493e37892c69b8342b18881dc498f5fba
MD5 56eba89fb48f02104df47cde4afe2129
BLAKE2b-256 cda7d95d9cb86a55c49bd6778ca0aa6145085ec4bf5ea99d46ef806b146d5904

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 dc9d529d1e7c5b2d1db0a9f408d9d873139596c437f4b9e88317978d80765ee9
MD5 69832e0dfd136e624f51ef09382eabec
BLAKE2b-256 397ac2d406bf63fb5b27d4aebb1bde8368980f63c64d7d094d444a7211f44196

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.6-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.6-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 142.7 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.6-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cb7f927f05747e0a1107bcfbbf591c01be7b108b35d91a711988189cfb57ed9b
MD5 ff71752a71130381b26aa3fdf1351f60
BLAKE2b-256 0dd44c9f25bbf25b9f110eb61ed8c6a79e879dc20924869287c1e73cb8f25932

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page