Skip to main content

A DSL for defining source code pretty printers

Project description

typeset-py

An embedded DSL for defining source code pretty printers.

Concept

The layout language is designed such that it fits well over a structurally recursive pass of some inductive data-structure; an abstract representation of the thing you wish to pretty print.

A layout is a tree of text literals composed together with either padded, unpadded compositions or with a line-break. The layout solver will select compositions in a layout and convert them into line-breaks, in order to make the layout fit within a given layout buffer width. It will do this in a greedy way, fitting as many literals on a line as possible. While doing so it will respect the annotated properties that the compositions are constructed under.

The solver being an abstract concept, is concretely implemented via two accompanying functions, a compiler implemented as compile, and a renderer implemented as render.

Null constructor

Sometimes in a data-structure there might be optional data (e.g. of type 'string option'), which when omitted should not have a layout. To make this case easy to handle, the null element of layout composition was added. The alternative would have been that you would need to keep track of an accumulator variable of the so-far-built layout in your layout function.

def layout_option(maybe_string: Optional[str]) -> Layout:
  match maybe_string:
    case None: return null()
    case data: return text(data)

Versus, e.g with an accumulator:

def layout_option(maybe_string: Optional[str], result: Layout) -> Layout:
  match maybe_string:
    case None: return result
    case data: return comp(result, text(data), True, False)

The null will be eliminated from the layout by the compiler, and will not be rendered, e.g:

foobar = comp(text('foo'), comp(null(), text('bar'), False, False), False, False)

When rendering foobar, when the layout fits in the layout buffer, the result will be:

       7
       |
foobar |
       |

Word literal constructor

These are the visible terminals that we are typesetting.

foo = text('foo')

When rendering foo, when the layout fits in the layout buffer, the result will be:

    4
    |
foo |
    |

It will simply overflow the buffer when it does not:

  2
  |
fo|o
  |

Fix constructor

Sometimes you need to render a part of some layout as inline, i.e. that its compositions should not be broken; this is what the fix constructor is for. In other words a fixed layout is treated as a literal.

foobar = fix(comp(text('foo'), text('bar'), False, False))

When rendering the fixed layout foobar, when the layout fits in the layout buffer, the result will be:

       7
       |
foobar |
       |

It will overflow the buffer when it does not:

  2
  |
fo|obar
  |

Grp constructor

The grp constructor prevents the solver from breaking its compositions, as long as there are compositions to the left of the group which could still be broken. This is useful when you need part of the layout to be treated as an item.

foobarbaz = comp(text('foo'), grp(comp(text('bar'), text('baz'), False, False)), False, False)

When rendering foobarbaz, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

If one of the literals does not fit within the layout buffer, the result will be:

       7
       |
foo    |
barbaz |
       |

In contrast, had the group not been annotated, the result would have been:

       7
       |
foobar |
baz    |
       |

Since the composition between bar and baz was not guarded, and the layout solver is greedy and wants to fit as many literals on the same line as possible without overflowing the buffer. If the group still does not fit within the layout buffer, the group will be broken and the result will be:

    4
    |
foo |
bar |
baz |
    |

Seq constructor

The seq constructor forces the solver to break all of its compositions as soon as one of them is broken. This is useful when you have data that is a sequence or is list-like in nature; when one item in the sequence is put on a new line, then so should the rest of the items in the sequence.

foobarbaz = seq(comp(text('foo'), comp(text('bar'), text('baz'), False, False), False, False))

When rendering foobarbaz, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

If one of the literals does not fit within the layout buffer, the result will be:

       7
       |
foo    |
bar    |
baz    |
       |

Since the compositions were part of a sequence; i.e when one of them broke, they all broke.

Nest constructor

The nest constructor is simply there to provide an extra level of indentation for all literals that it ranges over. The width of each level of indentation is given as a parameter to the render function.

foobarbaz = comp(text('foo'), nest(comp(text('bar'), text('baz'), False, False)), False, False)

When rendering foobarbaz with a indentation width of 2, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

If one of the literals does not fit within the layout buffer, the result will be;

       7
       |
foobar |
  baz  |
       |

And when the layout buffer will only hold one of the literals, the result will be:

    4
    |
foo |
  ba|r
  ba|z
    |

In this case bar and baz will overflow the layout buffer because of the given indentation.

Pack constructor

The pack constructor defines an indentation level, but implicitly sets the indentation width to the index of the first literal in the layout it annotates. This is e.g. useful if you are pretty printing terms in a lisp-like language, where all other arguments to an application is often 'indented' to the same buffer index as the first argument.

foobarbaz = comp(text('foo'), pack(comp(text('bar'), text('baz'), False, False)), False, False)

When rendering foobarbaz, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

When one of the literals do not fit, the result will be:

       7
       |
foobar |
   baz |
       |

When the layout buffer will only hold one literal, the result will be:

    4
    |
foo |
bar |
baz |
    |

The calculation of which buffer index to indent to is:

max((indent_level * indent_width), mark)

I.e the mark index will only be chosen if it is greater than the current indentation.

Forced linebreak composition

The forced linebreak composition does just that, it is a pre-broken composition.

foobar = line(text('foo'), text('bar'))

When rendering foobar, whether or not the layout fits in the layout buffer, the result will be:

        8
        |
foo     |
bar     |
        |

Unpadded composition

The unpadded composition will compose two layouts without any whitespace.

foobar = comp(text('foo'), text('bar'), False, False)

When rendering foobar, when the layout fits in the layout buffer, the result will be:

        8
        |
foobar  |
        |

Padded composition

The padded composition will compose two layouts with whitespace.

foobar = comp(text('foo'), text('bar'), True, False)

When rendering foobar, when the layout fits in the layout buffer, the result will be:

        8
        |
foo bar |
        |

Infix fixed compositions

The infix fixed compositions are syntactic sugar for compositions where the leftmost literal of the left operand, and the rightmost literal of the right operand are fixed together. I.e. the two following layouts are equivalent:

foobarbaz1 = comp(text('foo'), comp(text('bar'), text('baz'), False, True), False, False)
foobarbaz2 = comp(text('foo'), fix(comp(text('bar'), text('baz'), False, False)), False, False)

The example above might make it seem trivial, and that infix fixed compositions do not give you much value; but remember that you are composing layouts, not just literals. As such normalising the infix fixed composition is actually quite challenging since there are many different cases to consider when the fix is 'sunk in place' in the layout tree; this is part of what the compiler is responsible for.

Infix fixed compositions are useful when you need to fix a literal to the beginning or end of some other layout, e.g. separators between items in a sequence or list-like data structure. Without this feature you would again need to use an accumulator variable if you want to fix to the next literal, and probably need continuations if you want to fix to the last literal.

Compiling the layout

Your custom layout function (pretty printer) will build a layout, which you then need to compile and render:

...
document = compile(layout)
result = render(document, 2, 80)
print(result)
...

I.e. the layout should be given to the compiler, which gives you back a document ready for rendering, which you in turn give to the renderer along with arguments for indentation width and layout buffer width; in the above case indentation width is 2 and the layout buffer width is 80.

The reason for splitting the solver into compile and render, is in case the result is to be displayed in a buffer where the width is variable; i.e. you will not need to re-compile the layout between renderings using varying buffer width.

DSL and parsing

Additionally a small DSL has been defined, and a parser implemented, which allow you to write your layouts more succinctly (versus spelling out the full layout tree with the given constructors, which we've so far been doing throughout in this introduction!):

...
layout = parse('{0} @ null @ {1}', fragment1, fragment2)
...

The full grammar is as such:

{i}       (Indexed variable for layout fragment substitution with index i)
null      (Constructor for the empty layout)
"x"       (Constructor for a word/text layout literal over a string x)
fix u     (Constructor for a fixed layout over a layout u)
grp u     (Constructor for a group layout over a layout u)
seq u     (Constructor for a sequence layout over a layout u)
nest u    (Constructor for a indented/nested layout over a layout u)
pack u    (Constructor for a indexed margin layout over a layout u)
u @ v     (Forced linebreak composition of layouts u and v)
u @@ v    (Forced double linebreak composition of layouts u and v)
u & v     (Unpadded composition of layouts u and v)
u !& v    (Infix fixed unpadded composition of layouts u and v)
u + v     (Padded composition of layouts u and v)
u !+ v    (Infix fixed padded composition of layouts u and v)

Examples

For some examples of how to put all these layout constructors together into something more complex and useful, please reference in the examples directory.

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

typeset_soren_n-2.0.1.tar.gz (15.7 kB view details)

Uploaded Source

Built Distributions

typeset_soren_n-2.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-cp311-none-win_amd64.whl (260.9 kB view details)

Uploaded CPython 3.11 Windows x86-64

typeset_soren_n-2.0.1-cp311-none-win32.whl (246.5 kB view details)

Uploaded CPython 3.11 Windows x86

typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-cp311-cp311-macosx_11_0_arm64.whl (406.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

typeset_soren_n-2.0.1-cp311-cp311-macosx_10_7_x86_64.whl (419.2 kB view details)

Uploaded CPython 3.11 macOS 10.7+ x86-64

typeset_soren_n-2.0.1-cp310-none-win_amd64.whl (260.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

typeset_soren_n-2.0.1-cp310-none-win32.whl (246.5 kB view details)

Uploaded CPython 3.10 Windows x86

typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-cp310-cp310-macosx_11_0_arm64.whl (406.3 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

typeset_soren_n-2.0.1-cp310-cp310-macosx_10_7_x86_64.whl (419.3 kB view details)

Uploaded CPython 3.10 macOS 10.7+ x86-64

typeset_soren_n-2.0.1-cp39-none-win_amd64.whl (261.2 kB view details)

Uploaded CPython 3.9 Windows x86-64

typeset_soren_n-2.0.1-cp39-none-win32.whl (246.7 kB view details)

Uploaded CPython 3.9 Windows x86

typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-cp38-none-win_amd64.whl (261.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

typeset_soren_n-2.0.1-cp38-none-win32.whl (246.4 kB view details)

Uploaded CPython 3.8 Windows x86

typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.1-cp37-none-win_amd64.whl (261.5 kB view details)

Uploaded CPython 3.7 Windows x86-64

typeset_soren_n-2.0.1-cp37-none-win32.whl (246.3 kB view details)

Uploaded CPython 3.7 Windows x86

typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.5+ i686

File details

Details for the file typeset_soren_n-2.0.1.tar.gz.

File metadata

  • Download URL: typeset_soren_n-2.0.1.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.1.0

File hashes

Hashes for typeset_soren_n-2.0.1.tar.gz
Algorithm Hash digest
SHA256 9e8cbbf7c6a1419441cbcc540217fb3da2740270232aba2bcd845a082f4d138f
MD5 1dfa5806eec48d45b0e66fca4236fbfe
BLAKE2b-256 b503119d516ddf278e9a73fa3dd5064019fab9b53a2785c6872b98220b4251d1

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c60c3ad52a8454ae5af9ef481ca9fdf027bcd1f0d3d82d0b8ae52e02f7a4d3ea
MD5 857e42a64b7d078916882bdd874c11a6
BLAKE2b-256 698dbf777f69af2a0d278298c96db5e2fa8d617da0903f603da2a705a2f51197

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 9667eb1d48ac67b016616b9eec361b2de5e5cfe704921164228132b33cd57e6e
MD5 25175d18c9c336a14c2f00b7afff64b9
BLAKE2b-256 a967b8b0f9a3892b7f339b041e4379beff84db7e4c937d9021d4d7b78a684c03

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8ec631ec01085e2dc42ab35b4ea8dde42572b355479aa7448885fa5f201670d3
MD5 d0b71c6505cc16f0b807ed45e9e6b679
BLAKE2b-256 bdf4962ba45fb749f3c3940dbcc8e23be00d1bb9465ee3e2ff0a9881b3864554

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 48f5a88e1ad97352e190846cdcdec9105249c9a0859640e5c259cb13b28f4ee7
MD5 b53345912db978eda3964a21254c72b4
BLAKE2b-256 8ee99cf366379bd898c16579b96e9f276baed3a482e71b19fdea1396eed3aaad

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 0d5bbbac3fbe3d43e50b331c0be843e13194950a098aa72801f7cae70a395a51
MD5 1594c869c0a8298e0bbaaf38dab527f9
BLAKE2b-256 4e62c2a394406e79817eb7ed647c5b1b110321eece7b35ffad1e26e88ba6bbd0

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 a8b1738a5584627691df6ee8417c916a7eab9d28c883e6a35a0917980d00b0f3
MD5 c393098e170e43af0c95f61e4fa7b3ce
BLAKE2b-256 d111b585d7a720aeb237f84a2e8b2e683f6e7cf90c9a18ff805ffd02dfcad620

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7db7f4703844805da5942f3733cdc10f8532eef94f4b18cbb8c412c245091187
MD5 0ed50766bc52768a06326d6a3bc32550
BLAKE2b-256 f787ffd160a108c0d7b8732137a7dd623ab13fde799b99741611b476aafca06b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 26c584d084579cd89fe43005ce78d5f54f0176a4e71600b4aebe3fc98efa9563
MD5 95505eadd1395f0305abeb29f59bcf42
BLAKE2b-256 8114907b225b92db7d3cf779130b3721ba8bd3e3837bc1b9c5c050481724ef17

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 67f52eba80294ca94f4ca5a876dce7cd1f92a0684d93aed07d937c5a2d6c0f08
MD5 23808c6c393c408372d32dc1ea9765ab
BLAKE2b-256 200d97426185ef542d11a45b844d9f6f5ab54f591b20624d1abc8d04de82524b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 9d1de59a295b2787de64a8ea4216d988c8b3bdf1711db379772eb49af1846b82
MD5 9c9f653ba4a80ddf6e03df8b50f5f9ef
BLAKE2b-256 7e7823e6468cb74ad54dc057ad2c6374186302bd30c9417c204dfc8526d22eaa

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 8939b1be5ba876f85a92f60ca0073bbc21ed6853864d4fa88eaeb34b0b5a9878
MD5 edf4eb4058313593b62f342c85de13fe
BLAKE2b-256 c7f05a422d8080016c276040f4cb6d7442a03562bef84b5ad776555b8ffec874

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 cd21e316421a4ed1cad1d8ccb0fba6f11a62274612a5eea2952af2695f956f6c
MD5 60107f916a1e6298352d0e3f1f446e21
BLAKE2b-256 9eb29092728fe9dfe0227d1f3587ab24e062409839208f3e78fc892660e690c2

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3cd3e9030ba3b575dd828c8f6c9c465f3e371fb7b95fd3e5c0470bebb32d2b97
MD5 8f67e64479654435fbd852d8ce9fe20f
BLAKE2b-256 86fa06244273ca0e32dbb60ffc6043b4869f9f97a88e26dd638dac3340959e1e

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 61260b140026b830f786cf71adc9680f7992540c39fd9c391fca26dc4c836086
MD5 c230d21f8a7b155c5ce332210449282c
BLAKE2b-256 7ed8c74196356be97c24f6d00ddb27ff427a1916f3d6f6029d1ec3f534782ae8

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 25af22d27631ee4b84606244c4f7877a5465f0e8ab5a1b7507b5dc544870f5c1
MD5 21b75077291c2a93a14cbe5aa8dcd0cb
BLAKE2b-256 4ad08ee7dd3279bd95e3c6f5923f2618ae4b6dda8ae83c689f6bde476ecf131e

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 f607bdab7793186830d4c0be7a3eb9bf925052206fa1d663155e321067cc9ac9
MD5 60f04636612e762e537154b9bf909f5d
BLAKE2b-256 d7f3551353b971707d3030e8897b63a07c1d1ccb558e5a2157312b6664a102da

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 fd6b8cb42503aac9c9630d1312ef3d7bd6aafc7a4ff8554417532825f2ed406d
MD5 8d315026b3dc293548cf3cfef9ba5cfb
BLAKE2b-256 d65bd0546e8848ebb19f53cb385124e87951354d100b4fe2d9a3cd8d0fd12ebe

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 69bb4d686aef931de48fb3d45e4e4899cd2150ed95daba21db6d8c17a37328ec
MD5 4861ad7057505a16ac7b24fb621fabf3
BLAKE2b-256 40e445cad505338d2218718e3fced637cbfa45d7a070833e3d49dd434146b67c

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f8cc680397e698b3f069bdcf0f5e9ed463f18a8203238ba6ce7cceaa8fc4ee0f
MD5 fc272e3dc61e4e226c3af4a238211ebb
BLAKE2b-256 587d3850549e3f297cfb23d663df27835a882ba8ceb231814a76e2fb54e05538

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 4f4217b30c15d670898d6ad736139a9b500d4afc97e34e13e3b90e2a92e537da
MD5 52d1c29d82cb91e2e11cd2f4c74ec71d
BLAKE2b-256 7a70412a15e454491993175aaabbe58f162f7d8835942bc6fbaf6235d211f225

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7bcce30927e75c8dc5fa3c653451cb2ed37141e737f4226e9f88c8b229571d12
MD5 662791b3c310ffe22436de5c5866279c
BLAKE2b-256 9b6769ca5ee60c260e813e44a1f07e77ced164d92c3c8cc8343a1e909ea2552a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 53830aff4e40660c7e5bd8598264adb27e39ed04bdc1b1762f0d97ea27bcaf4d
MD5 869c45251502a0a6910b11eb79d160df
BLAKE2b-256 8ce17625318cd81783bbced985f6a7ec9d426f136425d8feb1f7e3b14d76ff36

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 b59d2f546e233598782f1ec2a542ac8dff835b6416e27968114eab801fdf39d7
MD5 3bec55f70c22599858407f0910b8cb60
BLAKE2b-256 06be7c5330a54b290772ed4ed37b1d6a4ab208f834b8d16d13b8d26cafe66596

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 82ca9ac278351f312325ea0873e6d327c8d728cb37ab1ae96fe3587f149db66b
MD5 081c4c036769adb15f2c0570641d013b
BLAKE2b-256 50d9586416e4533df4d631f468314f7f7b10e175a7bf1f513d97264971c40430

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 721f6b82d355fd1e8428db258c78bca78445384a247c6d7786677dfd654c3ec1
MD5 842c609039514fa505536424468f5db4
BLAKE2b-256 7627d58209230fd242fbd788cefafa9997a63bb0a58910cf883ebcd5ac420da6

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 fbb1a9782ba3738496df4b0311b72042534a6fca83780985fe2d5f436177a1fc
MD5 65a7b469e3e3e5a09402e1c316b33cb1
BLAKE2b-256 d5a985f8b514a808dea785f5ea7dc3cc7efe2462d1b8f2ef23bd7d8858dacacd

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-none-win32.whl
Algorithm Hash digest
SHA256 e9f5e94406ff20328abf0631596aa6cb6d1e6235747debee32f39e5513d4a66a
MD5 54e476f2d0139054a058631cff5b08cb
BLAKE2b-256 06a42e32d92704f68188454882d4059c68b64ab89a75e6f3aee0092e8c934550

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 76e6f68ab526e4eba86006e28c0fb107b1c68849ced41937db90b1e1ccf7b01b
MD5 45fc4b7395a4a0cdab64c85c3ec5bb66
BLAKE2b-256 921ccdfa0c4feb41a012ddd045ef17e10eabcd29302833f35c446a901b56646f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 d1f93140c73b43a248684ba7fabc560ffd88505ff2fc384a7c74ed380549776f
MD5 a06f6dcc3e464f09217053f68bce2e88
BLAKE2b-256 17135efd1127679342c5e1380c184549d6baf36cdd89ea7a6a191237cf39513f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 38ca52763aab2602269e07996bb8b48d643c7b96dd28b34a40e5a51090758538
MD5 9db908902351eb5dd9c4f1eda07ab5b2
BLAKE2b-256 e42012b974fb130fb4c19de6d67fbd45c62ff5e947f4dddf6b694614141fb65a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2d0457e573aef688d5461a897e7be01497febb93268fbc905fce46b2259385c9
MD5 78007833145105fa5342cd7a317346a4
BLAKE2b-256 29bb69698d149177461eaeb406284e2c6f3378f7314bae918218e75d5ec5d3d8

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e92f843e923bd16e4899e986f62e0b95c0b0b620ea92c83ec0c4f66eafe6ab66
MD5 53320adc75ea7a4cfe72bf4ed8dd3aa7
BLAKE2b-256 1b84124511ae9feba280c454190b0d0842c9acc10c1784c572c8206a92d58b95

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 d5ac68bdef25945f410538b54e0ccf5f8d69e69d05811fba981c36b2b6d8b40e
MD5 00ac7de9c052cb0b091f2fd146f47ebf
BLAKE2b-256 d16f49490aef182606d2c2435d50d1d4ca69f31cd91ca6b30ac1550bb6cbeb06

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff1bbd3209975c0e94932ec582a22a1fdbb9f272320810af733ed9c52982afce
MD5 0519fd2d189445783349a7881aae0467
BLAKE2b-256 35e06182243f30cfaf089c9e80c2bd2dab9bd167a62004ca96d35969d54a8a0b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp311-cp311-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp311-cp311-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 bcbad08957012ed62fe08f39c149584da9191af7ad29d162fda7c34aa7486be1
MD5 5b06a30f79c58db53f167d980d5a8f6a
BLAKE2b-256 28736b506699efdcfc438c02c9a7704df555e8354a9ff18aa855484b0b3f9451

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 8ca6af75ef7e0dbdad7243f7cf85768f0488f388fddfda9482c62deb4f02d12a
MD5 8ffb34a526782ac92a0d351234f4a8f8
BLAKE2b-256 b7b4672a0d862fc28500e9af9a020852361cad3347fc863c5b62bc4c38a12a09

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-none-win32.whl
Algorithm Hash digest
SHA256 5821409784c140300650edeff43606c4a66a207cd48db1585c857288eaf2fffa
MD5 22cad4e2ca609ded416475e27d4f50ae
BLAKE2b-256 4309653a1141351755ca923f2bb212157468b828df42194ea403b7aa1c06dceb

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8b32291ff02a3fd484b7b2e333b05d9d46a15d57949537c10f823d8f92f11967
MD5 f1eb095f20c7c347f157d0821c818f67
BLAKE2b-256 af898e6750a31c5476c94f4a8a6d8ccedf86d70bb38277732ef231cc0fd071f8

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 441deeff288f5058f49d9f0b070ca5cd2d7e8ad103041046de8bf6617eb4e3dd
MD5 29b3d7fbaf38dc985d08ee48863dc5ab
BLAKE2b-256 95493c78806c018f9e362317ec927485ec4a6184b3cb9f1e8fa5474ecb387280

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 e9da65fb2b42aad470cf84f3081da7e2d0c443864feb52dbbabcd953d390fc50
MD5 e0b892ac788862c34150cda1362ec1d0
BLAKE2b-256 9b7551caf5e48e42f693db9befc380650c4e7f10e720ef12226fec6dc1736f09

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 87dce93a0e3d2aa46901ae3a6078f1ac58a1974e0387de7589ce3df792fac02b
MD5 05c35bcc749a7075d91d7b87ce950d98
BLAKE2b-256 aac2c88c6ae2001dd35c0856cfdc5bcdc3aaa0c20e4617b6c5276664df37a5b0

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0bf1a2fbda7d2225741d2c85a4e298e161e2adf982fb8cee95c9023bd06afef6
MD5 7ea793360375f393593d67cb0d236909
BLAKE2b-256 e82bb9a868714f000f058ad5787a15aadd94274d95761427d004e14ab107a330

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 d3b6a79491f9f1d6b9bb45577e2f128a62b7d62e288d0daa51484299b2303743
MD5 178010ba3370509dad9b8d66ca6acce8
BLAKE2b-256 7c833c2ad2ef793161795b2e506b7adfc848b5b218ac038c67d39e9b5b1aa54d

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e2a598fec0920ec320033b920c1827e251dc918c48a0f2a1772e67aaf013dd3f
MD5 f856d1d60487001a845fee3b1306530c
BLAKE2b-256 cb1c7f28e794d61c38e07c3b67be7957641b97e733485f9802f988d57210ffb6

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp310-cp310-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 1c8adcae054bfd205306e25cda662148fb27509604c1a64fa0fb19ee0f2a7618
MD5 eee6f37b9021e0ed6fde310093bbf373
BLAKE2b-256 82fe3f2bdb167a2136f8f423b2a7a53ca5799746931af11cab114c037182a06d

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 f4013fe27e150fdf5a9ce10437f618ad8d7c9c6652066e06105513d65e7becf3
MD5 a9a5e749c25ebd335fc88296c4ef6aa6
BLAKE2b-256 24d252a0edf25a01448738b880cc73ccfe8aff8336110dd35f702222b6d48ed7

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-none-win32.whl
Algorithm Hash digest
SHA256 707201d875dab968048d8e3370131e1263730886df88e42165dc3fd06231a472
MD5 e35308787481020d33b380a1751a5ca6
BLAKE2b-256 09d134c9b25b6156c83d798c8bfba6b8156182be2f0cbf39b2bf134d72b98b34

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 db78b4fbdfb26585eac9162fd45678a80cc516f04aa33919363fce6b6d116965
MD5 d89a5449836a9cd924886c5ef0d63080
BLAKE2b-256 7ce0b5e8db3262e776640e16c3e2283968704187e74ce6fe162257f3270a81bd

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 3d207480e8fc01a95207b2e5547653ed914874a7c8b2543453086de5d41e42db
MD5 b3210428d412c62b27330f075213f0f2
BLAKE2b-256 2f82465d1d3646a3d335622517d56d0ef76c89a0dea0652d1ebf3128c90a29f2

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 74969a4e297085ec8747c094649184daac54813e54b239b13c4254dd86c22399
MD5 e541593fa2e7c17c04db6c289e22fd71
BLAKE2b-256 6f031393704144c9d9e1275646d2b2d200301e9bfa164fca23d27eaa0bbfc2e0

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 b6d79fd34ad1f91ae6b559b6a01916cbe2c319b1cf773204400643fdaf6278ed
MD5 44dc8400998910f2a0367e34240e513d
BLAKE2b-256 38a391c68738a57c8a9abeccc21ee2fbf083289e442e45a59b0c15653540fffa

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b534c8b903c89da2fd62dccc82223a9d43ba654d2e1d61ab1ea3d5d84e298062
MD5 98c4a3856e02de15b510127bb37ee5a9
BLAKE2b-256 91b36f044a4df05c233bcf357e8c2801017133fb36f6c4aaa4d19243c1578d9e

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 9fbb11200a16eec459e1d512189fb47a79647b23b3bd3c5b4a085a825b2e3e55
MD5 c08cc8d3a493df4ab1d24be4ed501a50
BLAKE2b-256 2e91da65446f189c1722bc6b987f4e8f7a53e1e39ee0f74cc23b9d5cc58fc3c3

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 bd6dca8719f8c1f645ca409011d367820092b914e0e5d9052f93af0156307b1c
MD5 6473ed8a085bf1eeccdee66dc8177063
BLAKE2b-256 76d0cb613065a3c07a972adca5841cc3a920b175e4a7af5bf435086938940a7b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-none-win32.whl
Algorithm Hash digest
SHA256 b42ecdc736401e67c6bcefb7bb805003335af0f620604dde829d15f2bb33946a
MD5 8c2afc85aaefc1de2da826696dc6017e
BLAKE2b-256 8b7dc1b8daf9353a531b890e51a1ad8fbe76b9c0c6b946cd740ae0087349dfbf

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5cda9a7f5ad124765a47a32cc725960276a84113663db7d05b3262e4ce81225b
MD5 46476d6f6b607e08fa76ec3ef8422ba7
BLAKE2b-256 9fedd0e75f6c8868de6733c5259715b4378d59b4e89857343892109ce36a822a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 b54a70517a8aaacda544ddb7255066382109799a00e64d267dd97c6786b6ac53
MD5 6bc8791530817f3b06dc203d2e85c6fa
BLAKE2b-256 82e883ff0fe972a7eb2e8e842501208ed655064959c4ac38fed02f591b33ee06

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 5d5d2cd603a7f48fa1c117689e417f563442f0496489bd0c1a3486bd4a51d678
MD5 4caf5e28cb001301fc1b3c91a925282b
BLAKE2b-256 115fc4cddc18b4e5217345ad8a6085eb5d3aa2621164b7c897fb731bfcc5533b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 8b0b7d65308f953f40374dd8fda3f25579662123483afff0072b6db62a4f8e6c
MD5 666ef91921bf0a25847cb03f8c78708e
BLAKE2b-256 acd58d01cbbc85adc29b0f35e6b7a43e2d3d11821824997e5963bd7dc4a53831

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 17a83e597abb113b39163d7e61be9cc8c551bf598a7f39ae1e599db774086d67
MD5 1bb7e26ea378b456db837b4755fee251
BLAKE2b-256 c1ba69fccc170dc1f2e42794ee68901140e3ee1c429668d52c05015bb5f3c7b9

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 4acd18783e297d7078ce671a2f5c2475a685621f7a2b02af83a8d0dc83ff6e03
MD5 49e5b2bb1e799114d0bd26f56e678e17
BLAKE2b-256 abdbfa6eaec25a86c8e3b5a1f6785f0b79b887ef99190b544c7856cc200d330e

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 fba40912e3959b571dba27e7cfd26dc3e3b7a465c3b9151e5248e7d2a02e7a19
MD5 c1badc8ce6a51a86e7b456b369d37f55
BLAKE2b-256 560d32299b3bee5a3c60961451dcac1cf3ffd8efdcbc0aa6d1b04f3900964c3b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-none-win32.whl
Algorithm Hash digest
SHA256 5da422a4eed1320c1a79d1a9453b0928906355c70ffe88a9654ac09e8deac5f5
MD5 bd370287fc773cda41845d04c80dd4ce
BLAKE2b-256 6ad2250d388b67649d987ee0aafefedc91f17baed3bc68ceb79327603dbec983

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8b7d30ee474f37d39163dbda54ecbf911d7e54b2f6d0fe9e822a48a5fca3935b
MD5 2f194941094fd61244aa0905d761c197
BLAKE2b-256 e121a533820726344a497e620e21a5c9b11bbea1ef4f297627221073968c63a1

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 2f1873e6e47c3d90112b4539c7e5dac4576105fef5707050d4dec360d7fbd50a
MD5 888ab9935b14af3bc16ea20e3d01d9df
BLAKE2b-256 4bc63b00c182108df302ca82d9bd90513ea978163546e502d3cc052382e42a0a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 edc5847dbecd965cdc6738fa5bd988ac07076d864a06180df84fdca5755ca1bf
MD5 9378ac190e76d952fd4f778afad3f045
BLAKE2b-256 3ee7e9526e9a4265b05077a4244a517321e7fcca3e487966bd4c8232836f6f1f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9e0925310142e8f7dbcb7b47b402b835936cd298ed7bb691cf61823ef84a65c9
MD5 563b88ff1cb57bcc1a5cafeb71f38938
BLAKE2b-256 7098a0e58e9678bc38d76599698e3e82130e11bf65fdeae448ee25e92872d3ed

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e0b3c6c26790bb2f8b82fae8746241d4d545183c26b497c57de50e14e271bfaf
MD5 1824d7688558df19c72ee3de7457c865
BLAKE2b-256 4d5fae6c04b154b17a0a4ed620aff891274245e1cf50ffbf5fd4e0f2a8c69541

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 1c0384a4595c552a4e8a48a2f4bd0ee22de8b5eac4c9c1de0faf203ce4619921
MD5 f0b4f20866b676d7fb3cfb82a804a33a
BLAKE2b-256 5e0d1b8cc8626e45b295620d857b3c2818eedab9c723bbb12d465d5ec6a7ecb6

See more details on using hashes here.

Provenance

Supported by

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