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. Where the compiler takes a Layout and produces an immutable optimized layout called a Document. The renderer takes a Document along with arguments for indentation and buffer width, and produces the final text output.

Null constructor

Sometimes in a data-structure there can 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 is available.

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

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.6.tar.gz (28.3 kB view details)

Uploaded Source

Built Distributions

typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (442.4 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (517.5 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (482.9 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (448.8 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl (467.5 kB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (442.1 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (517.3 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (482.8 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (448.8 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (450.9 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (467.5 kB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (442.1 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (517.2 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (482.6 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (448.3 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (450.6 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl (466.7 kB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.6-cp312-none-win_amd64.whl (282.2 kB view details)

Uploaded CPython 3.12 Windows x86-64

typeset_soren_n-2.0.6-cp312-none-win32.whl (265.0 kB view details)

Uploaded CPython 3.12 Windows x86

typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (441.9 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (505.3 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (481.6 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (446.2 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (449.6 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (464.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.6-cp312-cp312-macosx_11_0_arm64.whl (387.5 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

typeset_soren_n-2.0.6-cp312-cp312-macosx_10_12_x86_64.whl (393.1 kB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

typeset_soren_n-2.0.6-cp311-none-win_amd64.whl (283.4 kB view details)

Uploaded CPython 3.11 Windows x86-64

typeset_soren_n-2.0.6-cp311-none-win32.whl (266.2 kB view details)

Uploaded CPython 3.11 Windows x86

typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (442.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (516.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (483.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (447.7 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (450.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (467.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.6-cp311-cp311-macosx_11_0_arm64.whl (388.5 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

typeset_soren_n-2.0.6-cp311-cp311-macosx_10_12_x86_64.whl (395.5 kB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

typeset_soren_n-2.0.6-cp310-none-win_amd64.whl (283.8 kB view details)

Uploaded CPython 3.10 Windows x86-64

typeset_soren_n-2.0.6-cp310-none-win32.whl (266.1 kB view details)

Uploaded CPython 3.10 Windows x86

typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (442.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (517.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (483.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (447.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (450.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (467.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.6-cp310-cp310-macosx_11_0_arm64.whl (388.6 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

typeset_soren_n-2.0.6-cp310-cp310-macosx_10_12_x86_64.whl (395.1 kB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

typeset_soren_n-2.0.6-cp39-none-win_amd64.whl (284.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

typeset_soren_n-2.0.6-cp39-none-win32.whl (266.4 kB view details)

Uploaded CPython 3.9 Windows x86

typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (443.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (517.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (483.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (448.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (450.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (466.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.6-cp38-none-win_amd64.whl (283.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

typeset_soren_n-2.0.6-cp38-none-win32.whl (266.0 kB view details)

Uploaded CPython 3.8 Windows x86

typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (442.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (517.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (483.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (448.4 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (450.3 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (466.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.5+ i686

File details

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

File metadata

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

File hashes

Hashes for typeset_soren_n-2.0.6.tar.gz
Algorithm Hash digest
SHA256 fd90b81861079c09b0bf31d516f61ee117284ced9c4cde456fa7590f4a3648f1
MD5 ee0ae9a00615e73177d4218dd30a7174
BLAKE2b-256 54dbf9f5f8d6acb2e3285b5414fe4a9639e14f569d50ec30905a293fc6efebc1

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bbad5a79a143f3c542644f86af1660d89c806cd17e7b3065f1b2048506446653
MD5 d145f7d5a063149ac37e7ece7e864c08
BLAKE2b-256 8f3982a70ceed555f1690aa6eae1b100c028c0ae9d1b2dc57eae53726064b335

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 6fb170997ec5b5477f0026de7a75851ab602f7c4205fe0342c5beddd798abac9
MD5 6a63db1ccf7d0b3cf5dee4e70763b5a3
BLAKE2b-256 fcb5dd5112d570c58670f6dc5e9e77bf0a2b71a1d770c91623e24b32f8f4e154

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 33ad6f553b6890a6fbaec1f66a3995f20019009f1c7560de1ca7caa0d5234a23
MD5 605ee358e8b3af015d12d978f3766e4b
BLAKE2b-256 75b3e6bae9fb7113b46586f9be109be52f4dbe9feb4593a69ccb90ecca3ec640

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d1e3f2f5b75ca2a2837218599feee6b35a99de4eafdec88dbe82a14e98be4f8a
MD5 7af95f3813db3872a444824404d6b0fd
BLAKE2b-256 edf9692165682f59133930772ec74bde8d9338be726d616e4ade6e69c950d0b0

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 91d50ba58bbd1ef9950f7a6bb2a1f425061ff3da433aa2dbb1405cdd1d440b09
MD5 704ea6a1e125d30b1094b97246c3c436
BLAKE2b-256 c25389e8f01cab6e60a1b196c544a8ea654f051865893c9b68d4271433a2fdeb

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 225924a0fe49f009b7c7944b7f4c8e67cd0e282b24807999586e796d6a1e4fb4
MD5 c419c60c91778959e90683f253dcd86e
BLAKE2b-256 ed2cb1282cf3d204ff252f72c343045799272d962a658ced436e14fdf46d52c7

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e7408ce9493f75af1456b05c7763522af377d67b1879cdd230b1ef5275751abc
MD5 3b080f165d8cf6affacf1acdb24e32af
BLAKE2b-256 26019f013879eb4f84055e173513e5f07df80fd066e3aa8730a94054bbc40fa8

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 ca98ce1c0549f5ff9165c9c483df3a2a34b90ff817ccfac1d6697d94005d170f
MD5 effe7fea09fe66d66185af1c96a97bee
BLAKE2b-256 062ee66010638de7786f1b12c5e4056476cace051cd2dc45ebb397eb7ae1f524

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1adcb2321cd8188702022ee1f4ad8198c43fe4d894cc97923ff8a9bb1635d812
MD5 d347a0d4b1a0d64ee1647ef2b7c78899
BLAKE2b-256 c39a4bfa6118221b9cebb1e4e2806b96747e23483a183a296c49fd1fbc5bb93d

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9b089b3cb2002f528cd93aa515903e6ce02c4afbd52739c4eb6202e37ebb9dec
MD5 8e772bb89e360b571819def07533bc67
BLAKE2b-256 cdada8797ecc8e415304cf12fc72d67db60a90ff89af6f3744182051850d93af

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 350d5332e042d079bc090aecca82289ce5ddb72c459bc05161a0493160d68aa6
MD5 d26461931a119202aefbfd0e4e286135
BLAKE2b-256 8d964adf6344ede5037279474d374f8bf263901f03452420cc6490064707210a

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 dafc3ce82a673d7babaa12a366c2bbade6b42164a8e7555aa4118a5584effa83
MD5 2dd420441b417f8fd8efe4a555ce92eb
BLAKE2b-256 2d788face570138019a37b7ca677349ea29a49a042c5fa2f4ab52f2a71bcff5e

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 67b777fb8d697dfe53da996c7d7c388248b09966a646c9eb46a738a207d48712
MD5 61399d3277217ff6c42fe6b476c2100a
BLAKE2b-256 5c1be756e043e0cd5191aa94364072adf41cf24b78ae05a56787772d1b0f1faf

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c07dad72a1bc87f2626c01902c4632ee41f53a84a1ee4266e201644dceea0772
MD5 5b818b17a71ef87dab073f7dd3394eda
BLAKE2b-256 b2b5a9b7fc92577a57f81b13232443c84766cdd299a93e9bddb97c56d57a4a6b

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 61be7ffed8b3fd49f99148a0e94a8b55df3f30617270d3679bce290824866fd5
MD5 b3874c4794a5031dd59d8c760644aed9
BLAKE2b-256 d5c063b5d3430ddba68f612540a6c7ca3afe4895c2842487a21231f0f57d9f4b

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0baa8affd38bc9ec096b990c1dead5ae102ccbf8a205ea83aef25f3f956f8e0b
MD5 42b512e1af8e83776139fdae14f219f9
BLAKE2b-256 0f5e9a693a5a6749a16df9e05344d7eb5e2bdb2afea2a526f2bdfc3d17a926bb

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4f2fafbc8690491c078cf496e3db7f6a86130fa9b0dcb6382b201b59213695db
MD5 2265895bc1211b9a1bb445f7ab4ee57b
BLAKE2b-256 aca17f55ea2d0512636ac549250f7065bbadaac590154aae4e38e3b251b5338d

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 50d38601f7856abb3dfcade67c19357b6726a80516ed742c703df8a219943371
MD5 70beaeca667c3d4fb612560290765394
BLAKE2b-256 2afed5e13703be3fd78795bbdbfb263815e59f2db8636ecd02328e91ac115faf

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 a74a0dbf431aaf2a31639057769fc92075a739bb15bf42aadd49e8d981edf9c8
MD5 feec46f6395f93b219e9fea442225f1b
BLAKE2b-256 4e9bdf0ee7e81d797fd811c6bd84de6fbf7e9b0b21693dc2283bf651557e9d8f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-cp312-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-none-win32.whl
Algorithm Hash digest
SHA256 55e56b223d29bda77fc2c89d331e93ffecb5b54a4c70abb8710c4a79971ed8ea
MD5 4e2edf1f32f8017e8656761179addb48
BLAKE2b-256 edc2e834bf52998258b5073dccff47d04c1ea1e2d551ff4f8fa03766fa535367

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 60f904caa435cb886c0f09de4ada7c3b00965363aa40515ed1b6fc2a040f1610
MD5 ab3053a5c5b0d73c547774077f0a0e4c
BLAKE2b-256 add074e98648cfa3a66db8086313c2d096f601396e579f4eda05b90d265a6135

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 067bc19e07bb75c9e6f235a0f1d1ec2b761431221108ab9c6af4b7e951b5579f
MD5 7f39fbe3d460eb0ffc0924cb0260cc81
BLAKE2b-256 955a159f0095ee0d54c9ec61be97c19fd06d5af13259c048e3fce2fc1f1e3eb0

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1682e56295352702b90ca40b39717858bf7673644e5fe93f984cb5b30f64ead4
MD5 08fb0282cc02b0aa649252d752b21843
BLAKE2b-256 64c6148cf21d3b0f63bfd85f0572e57dc71f73a47d99ae25272a5e8c9c63ba32

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 4f92c1ab2964c0d4231a47b7ccbf3b92159d7425d7bdbc6e774d16e1aec90c6a
MD5 be3f794ab92c1e0938a7a7ba89b958bb
BLAKE2b-256 71aedd462f769fb39d2f27ad5dc7f9dc86a07d6af18278a8f32ff22d6070d324

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4cab123ddbe81e036239589445925b237e0c0513d9f13d1b4be027e7e2750274
MD5 133f7af81c2772fbf2e324b5a9fd139b
BLAKE2b-256 b29cbfde539ce5f0d96f66852c55fa9ebf6883743088325f832adf425b5eaecf

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 9b6b9b0affab3384193465306b379c3b54f2d1b7068c681cb317a393b96a21a5
MD5 97387e534c06f8b75bf9875b03ae1626
BLAKE2b-256 a93ada78b988724a973f28ca78263772dc730778a7df1913a37840d650b55de2

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f0b496252ea4b3bcd1f023e5b0905be22f7429cee09389d81e404ee8cccaa160
MD5 86843d5cd8ca6f6cf582b5d9ebf88dd2
BLAKE2b-256 b89ea91ceecb9a74535edda703960fcc9abe0fca66d3ac43505e5b77a69f9674

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e36d22ecbc109ed30c06eeb03d7039653474ede7b7db7eaf69ed3af33f43a056
MD5 9d42dbfff3bc9cca30de82c21b7bc2f5
BLAKE2b-256 d7aa6ab724bf6fb0d7e0465020e852d0b4033bb4353afb47dbc4f78c9eaab18d

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 f2a1c1c1825d2a9bf45abe85321b3e314490bed160e56c3a485f42bfa4957e93
MD5 88e9167b536cbd308ab2477061e577f5
BLAKE2b-256 e4053270b5aa57d5d1c48f8c165c65d9df1a2cb629f6370013f3ddf116d13901

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-none-win32.whl
Algorithm Hash digest
SHA256 71bad2320917258c8c2d694ae83b1dfc4c49b059adb70c1e58d8c8e1dc389ff0
MD5 a30a60bf5a04343e6112e166678fbcd8
BLAKE2b-256 879d752b0f98f652bf7e3dc6185ed81b9ba2de394cc6a847a9a9d1b22f8f0534

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 789f6835f6d05853d35cd755a3ea85c44670b9456259d20513d68767461586dd
MD5 681690fd2a0294d62f2cf50d0af5a228
BLAKE2b-256 99378f32fffe4109db05024ca74ac8430c5f290de9850a6c329480d05c0d4f03

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 26c61fe730f7d49f3827bfe16568fb1d5325a99570b2751ee4d3adf42396c095
MD5 657b4da1acb5e916f03dd4099b2a07c6
BLAKE2b-256 5e64535a51e6e0f96522172a29a68942314e211afd111a0b8f510a5516ef2609

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 34fad94eb51ae423d65d5e57c02194fa5ac6d58edbca992f18c9a392a38f559d
MD5 fa721cd1a6ac2a7694c4dd805036f845
BLAKE2b-256 984fd71fb8997cbb2e56cda251a14e9d13a95fcdeb5f7120ae27f0da7d986e38

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 489dc25bb55de2b7e08ac5f8f0cb526ccd5c302e33ca97d628b8c34d1d3a7f5f
MD5 bb4638ff3310fe541e99886581de44ef
BLAKE2b-256 1d569b1d28f9d516220887d41770a60fccb3241e8d3cb7b1193aa67dc6f5bf93

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 909d7fb1d9d6c476e69bd4fcd1d3318aea8c3340052e13a8877d17145faf2c55
MD5 b129f4306c47df4b0a506fed145f79c2
BLAKE2b-256 4f3f391d9475822c269ce7ac50076c4760a15ef7b29d94df8c5af78f2b556a15

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 ea8346f6a59a4f8ee312fe70e804790cd1c470d99a66d94961f9f47136c8725c
MD5 db4b0b344d5bcd41683195629af7c05e
BLAKE2b-256 3cfe8494d8f017a3cf996cc41d6b1e0a1b53b2feb829295418ebdcdc9f2fd72f

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a09d4a7ec0c1a41928a56d071b1300a0f2d7694a03d33304ec63248817634a2
MD5 4ec8b2685b55341acf0faf83869140f8
BLAKE2b-256 e71aecc42a04937ec6c8adfe7134d7f007833d54505c9b0903470985b3a34273

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 610dff19a5cb44e874ff1025acc0d855dd5a26323c14283dc5991285aa2f42de
MD5 a4699fa251ab644e65e09c67c27446ce
BLAKE2b-256 0146112973d097354fb2a513b917acf4bd7f4985b54231dc5d855b49080a9962

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 399d07c3a8947611a57b94e66790b73f55a374a0d5a91991d0edf9536627ebce
MD5 8f0c7bda1534ecc324be5c69c9ba9a6c
BLAKE2b-256 7935cd31287a9d6311831533b2b3ae604eae1b6b6ed37e211f763076ec348429

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-none-win32.whl
Algorithm Hash digest
SHA256 4dab0022074c297f239dcce8fd291a70062edcfd3bcbceba68ff3f65bb89b6ca
MD5 ae2256762183a365e54ddb449059c1f7
BLAKE2b-256 e54614c98e896bde46ec8586b8d30176dcc02bf7187a53804ac2251b285a8e77

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1ed28d23dcd9dd27a654e9e85fcd771c55ad6722f1696039efde4137dead65ff
MD5 26f26e44e1c9b6510ad31da326477033
BLAKE2b-256 f6d0a5af2bcbcf8ccebcb852b5cc5c236f805ca58c2130a05a2cff7e932d0bd2

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c16c0cf027249513a831ff62bc1b6c9ce94ba2f1ae3b7264909ca8166805aba0
MD5 4d5b00d36b28f617ddc2392a583a583e
BLAKE2b-256 9ae38404495d09196b253b6aab714565695297e6c20638528baf3a7ac7d85437

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 e4c5f0c19a386d5c87c37ed1bee5f8c5345662a75db2f608002b0d3737ab150b
MD5 031fd72a2a860c213cc09ff99d4b3e82
BLAKE2b-256 ecd0e8ecf081c3609c64cb15b0d2dfffc13363ea0a06128dd00f468eec29d718

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 fcd4e91c5ccf828b8d6a4d3e31943fe83ce2bfe9f98185815e9010c12bb7c3fb
MD5 f96616144f2732b3037a635f56550001
BLAKE2b-256 023f60f31f03981ec57843508134cc1b30eab87d7fa90d7a736ad657761057da

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5255657220e3fdc9525cc3c619cf5bf64fa9c8516462e82d8236fa511c2ad3bd
MD5 92f089a6d52926f19286e8c6dde18e60
BLAKE2b-256 e0db7e16882712eeac6fc24f98b79c1a16e1885bb9d04cea9de753ce5c7aa254

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 e32edeafc1fd947e460ead23314bdfad5a87abeee70de522fac5695df84250d0
MD5 b146eef830589d861aeda2827ddc0df6
BLAKE2b-256 fa1ae0cb88a79828c30696623a489ccc4a8272eb2842995e61e9a29d87779cda

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 edc1dd7167f9311c2b677a924463c5b11720b6cb69ed32a9cdaf6d095a211b67
MD5 ca52ad4431d342ed4408ab12421df1cf
BLAKE2b-256 76a886c8bf6c873b29dbbc5919699f15367b65950354e59896b441589d5aaab5

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.6-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0d1443f81070c352dd9916eefec0b63a21e65007682ca9b32857bdfcb2a75b8c
MD5 ef7fe8d9cd7ff155fd873f54e6cd4909
BLAKE2b-256 81ed46598abdbcae045d442ea4c973ee324cca221f3380c01fb0cdf047d3d2b8

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 8a9071c7b16018629cd540ab7e15577b7da5cab528dd1658d5a841b3d90f75e0
MD5 2a4b62808f8228dbdaf31cff922a9563
BLAKE2b-256 6d329199fb02fd92bd36914b71f3c36063f7c6af8d5fc7b4c29291438a7518b4

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-none-win32.whl
Algorithm Hash digest
SHA256 638a4d47c8bc5c6ab05136b976e684cf98eba74d3a3e74471771d6b40e2161a1
MD5 8602445ba78a8f87967ced4f84c3d974
BLAKE2b-256 cb6f74da7b16b2907cbe24fc8156921f475bc0957c513dd4b7fa560396e49ff5

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4f1dc2aff012c71c963e2514cfca62f98380d4cd0dfa804c71ad26b689833104
MD5 71343ad45e19b12d47e88d92a8ea4651
BLAKE2b-256 bd75763b7a4d1bb395c0954e339f8c6efc400a719d6e77df4fea119ba849560e

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 40b0ccdb563c18159edc0a3a1c4a38ca2bed4b33b92a761d4ad30fa2678e4e74
MD5 b6436792ea0694a70a0689fc95b11e8a
BLAKE2b-256 22f3ad12b4a246e8d6593269ef7cd9712b8d9defebe875da2b0090f05e515d98

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 0990145aa680a3c65f9d387a41b8059e363c866cdb9408e4778c8ade391c2a67
MD5 a0c47383a3d31b8e3a88fbd8a8ac457e
BLAKE2b-256 adda4fd358ed2fcdf7c741167f2ece9ceadf49f975e196ea443c14d04a727877

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 98a81d726176461bb03cc1eeffcbcc9348ef472b6bb6ff3429290ab51a7ada05
MD5 6cb3c7a63a16c6c1e9e8dd207f4bb21d
BLAKE2b-256 94e5a2da7169b56361489a3057b1e4e789450137ddb539a29585c922c7d449f8

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5989f58cdff8adcd5820eb0eedcfdf4be14967066e6ff775f2974630500c1b19
MD5 7a8686137b3db17f093a2199661e975b
BLAKE2b-256 36a67215f2ec63d325584876a66ff91eab99653a5598f3c8701f8d00d125e82f

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 2bc147eadf404259e53c9f53023b1f0615f1839a880d5dfd2dc57fbe68736fb4
MD5 7387482970cfaf1e814f22b9798af57b
BLAKE2b-256 aaa5391cb1a39bd25e1612825c3d594d5c6a0ef1dcd4c96f8426cb89519c625a

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 9fdf5e30c8abbd0331fd36505964a6941b4a04ab37a5b9527adfe5750c8b984e
MD5 aa298a45be6f08152de03f1d8c160d39
BLAKE2b-256 ae3cc0c13e4e6dda1fc225dd6f6d68301d3c2fd23bb0c08bd6357a448a9ba97a

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-none-win32.whl
Algorithm Hash digest
SHA256 a4c9f968c178da1ee66a956b4603e2b6f13df3e6c55f6a364e929a1ac763fa19
MD5 ca2d8193fe863b72e57987f4592329c7
BLAKE2b-256 346b053ce57f77d9b42065a1393b8c88e4ee774ebe678e768e87fffa4d87594d

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7bf21eea16f51216f74007f5bbc82ee8966a1bea306f84dcba039e9ec2ba7e70
MD5 10c7ed62847a5ad52a0e4fc71ee39a1f
BLAKE2b-256 3a42b39b09d9ff69fbbdbfd8a45db088d9897ba5e05c0ccb6ed8276ed8ebe426

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 7c4327dcd72580cd57c0c9dd9fe8e068b55744ab35e2383857c360cb2e9448bd
MD5 f141843e25f8ae38b3f6c12e78164945
BLAKE2b-256 8c12ebbb2e3b3fa97c828d44475d7f25fc6a4467f67a8dad8089722116453f5f

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 59bf7b386730162f09675e891c0a228359c79d58fac26435985c91ba07896f62
MD5 4ed3ed176b0d2efc5b3b27ac597e3282
BLAKE2b-256 f342bc85d8abbe5f78a3f50319872a142a9460689ef63d63e615a73349411f1f

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f37690a20a746d46d25c58e07dfc3ef9ccb5ac018c7261777581ea27d635cddd
MD5 fc3d327a04780442d1ba3723afda9adc
BLAKE2b-256 9268ffa1de6c6dc4f8eb52990668483dd7b9627e48e959e287fb1055ec3ef6ee

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 94d8049efd8d346b110d549e42a2cb51747048fdad9446f678939e17badf539d
MD5 61254200f329803131412ce960e2bb1a
BLAKE2b-256 f4d6906a0a9c568d81816a812333a7be624894c8999299e7e07c959ee09d5108

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for typeset_soren_n-2.0.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 970d69381f6d62fca9398a9ee90f57c190b5acfa94f0115e88d8899cceba70ed
MD5 68f4233cb192ce6cbbbd4c2fe783e847
BLAKE2b-256 7753c81506799ed7b8a3bc0bb4b5aadf73391da9eb696d0dbca7b410da53e837

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