Skip to main content

Python ctypes bindings for reliq

Project description

reliq-python

A python bindings for reliq library.

Installation

pip install reliq

Import

from reliq import reliq

Benchmark

Benchmarks were inspired by selectolax and performed on 355MB, 896 files sample of most popular websites. You can find the benchmark script here.

Parsing

bs4: 74.24s
html5_parser: 12.79s
lxml: 5.77s
modest: 2.82s
lexbor: 1.37s
reliq: 0.53s

Parsing and processing

bs4: 184.71s
html5_parser: 21.39s
lxml: 14.90s
modest: 4.24s
reliq: 3.05s
lexbor: 2.80s

Usage

Code

from reliq import reliq

html = ""
with open('index.html','r') as f:
    html = f.read()

rq = reliq(html) #parse html
expr = reliq.expr(r"""
    div .user; {
        a href; {
            .name @ | "%i",
            .link @ | "%(href)v"
        },
        .score.u span .score,
        .info dl; {
            .key dt | "%i",
            .value dd | "%i"
        } |,
        .achievements.a li class=b>"achievement-" | "%i\n"
    }
""") #expressions can be compiled

users = []
links = []

for i in rq.filter(r'table; { tr, text@ iw>lisp }')[:-2]:
    # ignore comments and text nodes
    if i.type is not reliq.Type.tag:
        continue

    first_child = i[0]

    if first_child.child_count < 3 and first_child.name == "div" and first_child.starttag == '<div>':
        continue

    link = first_child[2].attrib['href']
    if re.match('^https://$',link):
        links.append(link)
        continue

    #make sure that object is an ancestor of <main> tag
    for j in i.ancestors():
        if j.name == "main":
          break
    else:
      continue

    #search() returns str, in this case expression is already compiled
    #  but can be also passed as a str() or bytes(). If Path() is passed
    #  file will be read
    user = json.loads(i.search(expr))
    users.append(user)

try: #handle errors
    reliq.search('p / /','<p></p>')
except reliq.ScriptError: # all errors inherit from reliq.Error
    print("error")

#get text from all text nodes that are descendants of object
print(rq[2].text_recursive)
#get text from all text nodes that are children of object
print(rq[2].text)

#decode html entities
reliq.decode('loop &amp; &lt &tdot; &#212')

#convert to json
rq.json(r"""
    .files * #files; ( li )( span .head ); {
        .type i class child@ | "%(class)v" / sed "s/^flaticon-//",
        .name @ | "%Dt" / trim sed "s/ ([^)]* [a-zA-Z][Bb])$//",
        .size @ | "%t" / sed 's/.* \(([^)]* [a-zA-Z][Bb])\)$/\1/; s/,//g; /^[0-9].* [a-zA-Z][bB]$/!d' "E"
    } |
""") #json format is not enforced, so incorrect script will raise exceptions from json.loads()

Import

Everything is contained inside one class

from reliq import reliq

Initialization

reliq object takes a single argument representing html, this can be str(), bytes(), Path() (file is read as bytes), reliq() or None.

rq = reliq('<p>Example</p>') #passed directly

rq2 = reliq(Path('index.html')) #passed from file

rq3 = reliq(None) # empty object
rq4 = reliq() # empty object

Types

reliq can have 5 types that change the behaviour of methods.

Calling type property on object e.g. rq.type returns instance of reliq.Type(Flag).

empty

Gets returned from either reliq(None) or reliq.filter() that matches nothing, makes all methods return default values.

unknown

Similar to empty but should never happen

struct

Returned by successful initialization e.g.

reliq('<p>Example</p>')

list

Returned by reliq.filter() that succeeds

single

Returned by axis methods or by accessing the object like a list.

The type itself is a grouping of more specific types:

  • tag
  • comment
  • textempty (text made only of whitespaces)
  • texterr (text where an html error occured)
  • text
  • textall (grouping of text types)

get_data(raw=False) -> str|bytes

Returns the same html from which the object was compiled.

If first argument is True or raw=True returns bytes.

data = Path('index.html').read_bytes

rq = reliq(data)
x = rq[0][2][1][8]

# if both objects are bytes() then their ids should be the same
x.get_data(True) is data

special methods

__bytes__ and __str__

Full string representation of current object

rq = reliq("""
  <h1><b>H</b>1</h1>
  <h2>N2</h2>
  <h2>N3</h2>
""")

str(rq) # struct
# '\n  <h1><b>H</b>1</h1>\n  <h2>N2</h2>\n  <h2>N3</h2>\n'

str(rq.filter('h2')) # list
# '<h2>N2</h2><h2>N3</h2>'

str(rq[0]) # single
# '<h1><b>H</b>1</h1>'

str(reliq()) # empty
# ''

__getitem__

For single indexes results from children() axis, otherwise from self() axis

rq = reliq('<div><p>1</p> Text <b>H</b></div>')

first = rq[0] # struct
# <div>

first[1] # single
# <b>

r = first.filter('( text@ * )( * ) child@')
r[1] # list
# " Text " obj

r[2] == first[1]

__len__

Amount of objects returned from __getitem__

properties of single

Calling these properties for types other than single returns their default values.

lvl -> int level in html structure

rlvl -> int level in html structure, relative to parent

position -> int position in html structure

rposition -> int position in html structure, relative to parent

Calling some properties makes sense only for certain types.

tag

tag_count -> int count of tags

text_count -> int count of text

comment_count -> int count of comments

desc_count -> int count of descendants

attribl -> int number of attributes


attrib -> dict dictionary of attributes


These return None only if called from empty type. They also have _raw counterparts that return bytes e.g. text_recursive_raw -> Optional[bytes], name_raw -> Optional[bytes]

insides -> Optional[str] string containing contents inside tag or comment

name -> Optional[str] tag name e.g. 'div'

starttag -> Optional[str] head of the tag e.g. '<div class="user">'

endtag -> Optional[str] tail of the tag e.g. '</div>'

endtag_strip -> Optional[str] tail of the tag, stripped of < and > e.g. '/div'

text -> Optional[str] text of children

text_recursive -> Optional[str] text of descendants

rq = reliq("""
  <main>
    <ul>
      <a>
        <li>L1</li>
      </a>
      <li>L2</li>
    </ul>
  </main>
""")

ul = rq[0][0]
a = ul[0]
li1 = a[0]
li2 = ul[1]

ul.name
# 'ul'

ul.name_raw
# b'ul'

ul.lvl
# 1

li1.lvl
# 3

ul.text
# '\n      \n      \n    '

ul.text_recursive
# '\n      \n        L1\n      \n      L2\n    '

a.insides
# '\n        <li>L1</li>\n      '

comment

Comments can either return their string representation or insides by insides property.

c = reliq('<!-- Comment -->').self(type=None)[0]

c.insides
# ' Comment '

bytes(c)
# b'<!-- Comment -->'

str(c)
# '<!-- Comment -->'

text

Text can only be converted to string

t = reliq('Example').self(type=None)[0]

str(t)
# 'Example'

axes

Convert reliq objects into a list or a generator of single type objects.

If their first argument is set to True or gen=True is passed, a generator is returned, otherwise a list.

By default they filter node types to only reliq.Type.tag, this can be changed by setting the type argument e.g. type=reliq.Type.comment|reliq.Type.texterr. If type is set to None all types are matched.

If rel=True is passed returned objects will be relative to object from which they were matched.

rq = reliq("""
  <!DOCTYPE html>
  <head>
    <title>Title</title>
  </head>
  <body>
    <section>
      <h1>Title</h1>
      <p>A</p>
    </section>
    <h2>List</h2>
    <ul>
      <li>A</li>
      <li>B</li>
      <li>C</li>
    </ul>
    <section>
      TEXT
    </section>
  </body>
""")

everything

everything() gets all elements in structure, no matter the previous context.

#traverse everything through generator
for i in rq.everything(True):
  print(str(i))

self

self() gets the context itself, single element for single type, list of the list type and elements with .lvl == 0 for struct type.

By default filtered type depends on object type it was called for, for single and list types are unfiltered, only struct type enforces type=reliq.Type.tag.

# rq is a reliq.Type.struct object

rq.self()
# [<tag head>, <tag body>]

rq.self(type=None)
# [<textempty>, <comment>, <textempty>, <tag head>, <textempty>, <tag body>]

rq.self(type=reliq.Type.tag|reliq.Type.comment)
# [<comment>,<tag head>, <tag body>]

# ls is a reliq.Type.list object that has comments and text types
ls = rq.filter('[:3] ( comment@ * )( text@ * )')

ls.self()
# [<comment>, <text>, <text>, <text>]

ls.self(type=reliq.Type.tag|reliq.Type.comment)
# [<comment>]

# body is a reliq.Type.single object
body = rq[1].self()

len(body.self())
# 1

body.self()[0].name
# "body"

children

children() gets all nodes of the context that have level relative to them equal to 1.

# struct
rq.children()
# [<tag title>, <tag section>, <tag h2>, <tag ul>, <tag section>]

# list
rq.filter('head, ul').children()
# [<tag title>, <tag li>, <tag li>, <tag li>]

# single
first_section = rq[1][0]
first_section.children()
# [<tag h1>, <tag p>]

descendants

descendants() gets all nodes of the context that have level relative to them greater or equal to 1.

# struct
rq.descendants()
# [<tag title>, <tag section>, <tag h1>, <tag p>, <tag h2>, <tag ul>, <tag li>, <tag li>, <tag li>, <tag section>]

# list
rq.filter('[0] section').descendants()
# [<tag h1>, <tag p>]

# single
rq[1][0].descendants()
# [<tag h1>, <tag p>]

full

full() gets all nodes of the context and all nodes below them (like calling self() and descendants() at once).

# struct
rq.full()
# [<tag head>, <tag title>, <tag body>, <tag section>, <tag h1>, <tag p>, <tag h2>, <tag ul>, <tag li>, <tag li>, <tag li>, <tag section>]

# list
rq.filter('[0] section').descendants()
# [<tag section>, <tag h1>, <tag p>]

# single
rq[1][0].descendants()
# [<tag section>, <tag h1>, <tag p>]

parent

parent() gets parent of context nodes. Doesn't work for struct type.

# list
rq.filter('li').parent()
# [<tag ul>, <tag ul>, <tag ul>]

# single
rq[1][2][0].parent()
# [<tag li>]

# single
rq[0].parent() # top level nodes don't have parents
# []

rparent

rparent() behaves like parent() but returns the parent to which the current object is relative to. Doesn't work for struct type.

It doesn't take rel argument, returned objects are always relative.

ancestors

ancestors() gets ancestors of context nodes. Doesn't work for struct type.

# list
rq.filter('li').ancestors()
# [<tag ul>, <tag body>, <tag ul>, <tag body>, <tag ul>, <tag body>]

# single
rq[1][2][0].ancestors()
# [<tag ul>, <tag body>]

# first element of ancestors() should be the same as for parent()
rq[1][2][0].ancestors()[0].name == rq[1][2][0].parent()[0].name

# single
rq[0].ancestors() # top level nodes don't have ancestors
# []

before

before() gets all nodes that have lower .position property than context nodes. Doesn't work for struct type.

# list
rq.filter('[0] title, [1] section').before()
# [<tag head>, <tag li>, <tag li>, <tag li>, <tag ul>, <tag h2>, <tag p>, <tag h1>, <tag section>, <tag body>, <tag title>, <tag head>]

# single
title = rq[0][0]
title.before()
# [<tag head>]

# single
second_section = rq[1][3]
second_section.before()
# [<tag li>, <tag li>, <tag li>, <tag ul>, <tag h2>, <tag p>, <tag h1>, <tag section>, <tag body>, <tag title>, <tag head>]

# single
head = rq[0]
head.before() #first element doesn't have any nodes before it
# []

preceding

preceding() is similar to before() but ignores ancestors. Doesn't work for struct type.

# list
rq.filter('[0] title, [1] section').preceding()
# [<tag li>, <tag li>, <tag li>, <tag ul>, <tag h2>, <tag p>, <tag h1>, <tag section>, <tag title>, <tag head>]

# single
title = rq[0][0]
title.preceding() # all tags before it are it's ancestors
# []

# single
second_section = rq[1][3]
second_section.preceding()
# [<tag li>, <tag li>, <tag li>, <tag ul>, <tag h2>, <tag p>, <tag h1>, <tag section>, <tag title>, <tag head>]

after

after() gets all nodes that have higher .position property than context nodes. Doesn't work for struct type.

# list
rq.filter('h2, ul').after()
# [<tag ul>, <tag li>, <tag li>, <tag li>, <tag section>, <tag li>, <tag li>, <tag li>, <tag section>]

# single
h2 = rq[1][1]
h2.after()
# [<tag ul>, <tag li>, <tag li>, <tag li>, <tag section>]

# single
ul = rq[1][2]
ul.after()
# [<tag li>, <tag li>, <tag li>, <tag section>]

# single
third_section = rq[1][3] # last element
third_section.after()
# []

subsequent

subsequent() is similar to after() but ignores descendants. Doesn't work for struct type.

# list
rq.filter('h2, ul').subsequent()
# [<tag ul>, <tag li>, <tag li>, <tag li>, <tag section>, <tag section>]

# single
h2 = rq[1][1]
h2.subsequent()
# [<tag ul>, <tag li>, <tag li>, <tag li>, <tag section>]

# single
ul = rq[1][2]
ul.subsequent()
# [<tag section>]

siblings_preceding

siblings_preceding() gets nodes on the same level as context nodes but before them and limited to their parent. Doesn't work for struct type.

If full=True is passed descendants of siblings will also be matched.

# list
rq.filter('ul, h2').siblings_preceding()
# [<tag h2>, <tag section>, <tag section>]

# single
h2 = rq[1][1]

h2.siblings_preceding()
# [<tag section>]
h2.siblings_preceding(full=True)
# [<tag p>, <tag h1>, <tag section>]

# single
ul = rq[1][2]

ul.siblings_preceding()
# [<tag h2>, <tag section>]
ul.siblings_preceding(full=True)
# [<tag h2>, <tag p>, <tag h1>, <tag section>]

siblings_subsequent

siblings_preceding() gets nodes on the same level as context nodes but after them and limited to their parent. Doesn't work for struct type.

If full=True is passed descendants of siblings will also be matched.

# list
rq.filter('ul, h2').siblings_subsequent()
# [<tag h2>, <tag section>, <tag section>]

# single
h2 = rq[1][1]

h2.siblings_subsequent()
# [<tag ul>, <tag section>]
h2.siblings_subsequent(full=True)
# [<tag ul>, <tag li>, <tag li>, <tag li>, <tag section>]

# single
ul = rq[1][2]

ul.siblings_subsequent()
# [<tag section>]
ul.siblings_subsequent(full=True)
# [<tag section>]

siblings

siblings() returns merged output of siblings_preceding() and siblings_subsequent().

expr

reliq.expr is a class that compiles expressions, it accepts only one argument that can be a str(), bytes() or Path().

If Path() argument is specified, file under it will be read with Path.read_bytes().

# str
reliq.expr(r'table; { tr .name; li | "%(title)v\n", th }')

# bytes
reliq.expr(rb'li')

# file from Path
reliq.expr(Path('expression.reliq'))

search

search() executes expression in the first argument and returns str() or bytes if second argument is True or raw=True.

Expression can be passed both as compiled object of reliq.expr or its representation in str(), bytes() or Path() that will be compiled in function.

rq = reliq('<span class=name data-user-id=1282>User</span><p>Title: N1ase</p>')

rq.search(r'p')
# '<p>Title: N1ase</p>\n'

rq.search(r'p', True)
# b'<p>Title: N1ase</p>\n'

rq.search(r'p', raw=True)
# b'<p>Title: N1ase</p>\n'

rq.search(r"""
  span .name; {
    .id.u @ | "%(data-user-id)v",
    .name @ | "%t"
  },
  .title p | "%i" sed "s/^Title: //"
""",True)
# b'{"id":1282,"name":"User","title":"N1ase"}'

rq.search(Path('expression.reliq'))

json

Same as search() but returns dict().

filter

filter() executes expression in the first argument and returns reliq object of list type or empty type if nothing has been found.

If second argument is True or independent=True then returned object will be completely independent from the one the function was called on. A new HTML string representation will be created, and structure will be copied and shifted to new string, levels will also change.

Expression can be passed both as compiled object of reliq.expr or its representation in str(), bytes() or Path() that will be compiled in function.

Any field, formatting or string conversion in expression will be ignored, only objects used in them will be returned.

rq = reliq('<span class=name data-user-id=1282>User</span><p>Title: N1ase</p>')

rq.filter(r'p').self()
# [<tag p>]

rq.filter(r'p').type
# reliq.Type.list

rq.filter(r'p').get_data()
# '<span class=name data-user-id=1282>User</span><p>Title: N1ase</p>'

rq.filter(r'p',True).get_data()
# '<p>Title: N1ase</p>'

rq.filter(r'nothing').type
# reliq.Type.empty

rq.filter(r"""
  span .name; {
    .id.u @ | "%(data-user-id)v",
    .name @ | "%t"
  },
  .title p | "%i" sed "s/^Title: //"
""")
# [<tag span>, <tag span>, <tag p>]

rq.filter(Path('expression.reliq'))

Encoding and decoding html entities

decode() decodes html entities in first argument of str() or bytes(), and returns str() or bytes() if second argument is True or raw=True.

By default &nbsp; is translated to space, this can be changed by setting no_nbsp=False.

encode() does the opposite of decode() in the same fashion.

By default only special characters are encoded i.e. <, >, ", ', &. If full=True is set everything possible will be converted to html entities (quite slow approach).

reliq.decode(r"text &amp; &lt &tdot; &#212")
# "loop & <  ⃛⃛ Ô"

reliq.decode(r"text &amp; &lt &tdot; &#212",True)
# b'text & <  \xe2\x83\x9b\xe2\x83\x9b \xc3\x94'

reliq.decode(r"text &amp; &lt &tdot; &#212",raw=True)
# b'text & <  \xe2\x83\x9b\xe2\x83\x9b \xc3\x94'

reliq.decode('ex&nbsp;t')
# "ex t"

reliq.decode('ex&nbsp;t',no_nbsp=False)
# 'ex\xa0t'

reliq.decode('ex&nbsp;t',True,no_nbsp=False)
# b'ex\xc2\xa0t'

reliq.encode("<p>li &amp; \t 'seq' \n </p>")
# '&lt;p&gt;li &amp;amp; \t &#x27;seq&#x27; \n &lt;/p&gt;'

reliq.encode("<p>li &amp; \t 'seq' \n </p>",True)
# b'&lt;p&gt;li &amp;amp; \t &#x27;seq&#x27; \n &lt;/p&gt;'

reliq.encode("<p>li &amp; \t 'seq' \n </p>",raw=True)
# b'&lt;p&gt;li &amp;amp; \t &#x27;seq&#x27; \n &lt;/p&gt;'

reliq.encode("<p>li &amp; \t 'seq' \n </p>",full=True)
# '&lt;p&gt;li &amp;amp&semi; &Tab; &#x27;seq&#x27; &NewLine; &lt;&sol;p&gt;'

reliq.encode("<p>li &amp; \t 'seq' \n </p>",True,full=True)
# b'&lt;p&gt;li &amp;amp&semi; &Tab; &#x27;seq&#x27; &NewLine; &lt;&sol;p&gt;'

Errors

All errors are instances of reliq.Error.

reliq.SystemError is raised when kernel fails (you should assume it doesn't happen).

reliq.HtmlError is raised when html structure exceeds limits.

reliq.ScriptError is raised when incorrect script is compiled.

try:
  reliq('<div>'*8193)
except reliq.HtmlError:
  print('html depth limit exceeded')

try:
  reliq.expr('| |')
except reliq.ScriptError:
  print('incorrect expression')

Relativity

list and single type object also stores a pointer to node that object is relative to in context i.e. rq.filter(r'body; nav') will return nav objects that were found in body tags, nav objects might not be direct siblings of body tags but because of relativity their relation is not lost.

reliq.filter() always keeps the relativity.

By default axis functions don't change relativity unless rel=True is passed.

rq = reliq("""
  <body>
    <nav>
      <ul>
        <li> A </li>
        <li> B </li>
        <li> C </li>
      </ul>
    </nav>
  </body>
""")

li = rq[0][0][0][1] # not relative

li_self = rq.filter('li i@w>"B"')[0] # relative to itself

li_rel = rq.filter('nav; li i@w>"B"')[0] # relative to nav

# .rlvl and .rposition for non relative objects return same values as .lvl and .position

li.lvl
# 3
li_rel.lvl
# 3

li.rlvl
# 3
li_rel.rlvl
# 2

li.position
# 10
li_rel.position
# 10

li.rposition
# 10
li_rel.rposition
# 9

nav = rq[0][0]
for i in nav.descendants(rel=True):
    if i.rlvl == 2 and i.name == 'li':
        print(i.lvl,i.rlvl)
        # 3 2
        break

nav_rel = li_rel.rparent()[0] # nav element relative to li

nav_rel.rlvl
# -2
nav_rel.rposition
# -7

Projects using reliq in python

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

reliq-0.0.40.tar.gz (32.3 kB view details)

Uploaded Source

Built Distributions

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

reliq-0.0.40-cp313-cp313-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.13Windows x86-64

reliq-0.0.40-cp313-cp313-manylinux2014_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.13

reliq-0.0.40-cp313-cp313-manylinux2014_armv7l.whl (117.1 kB view details)

Uploaded CPython 3.13

reliq-0.0.40-cp313-cp313-manylinux2014_aarch64.whl (144.0 kB view details)

Uploaded CPython 3.13

reliq-0.0.40-cp313-cp313-macosx_14_0_arm64.whl (112.1 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

reliq-0.0.40-cp313-cp313-macosx_13_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64

reliq-0.0.40-cp312-cp312-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.12Windows x86-64

reliq-0.0.40-cp312-cp312-manylinux2014_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.12

reliq-0.0.40-cp312-cp312-manylinux2014_armv7l.whl (117.1 kB view details)

Uploaded CPython 3.12

reliq-0.0.40-cp312-cp312-manylinux2014_aarch64.whl (144.0 kB view details)

Uploaded CPython 3.12

reliq-0.0.40-cp312-cp312-macosx_14_0_arm64.whl (112.1 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

reliq-0.0.40-cp312-cp312-macosx_13_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

reliq-0.0.40-cp311-cp311-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.11Windows x86-64

reliq-0.0.40-cp311-cp311-manylinux2014_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.11

reliq-0.0.40-cp311-cp311-manylinux2014_armv7l.whl (117.1 kB view details)

Uploaded CPython 3.11

reliq-0.0.40-cp311-cp311-manylinux2014_aarch64.whl (144.0 kB view details)

Uploaded CPython 3.11

reliq-0.0.40-cp311-cp311-macosx_14_0_arm64.whl (112.1 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

reliq-0.0.40-cp311-cp311-macosx_13_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

reliq-0.0.40-cp310-cp310-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.10Windows x86-64

reliq-0.0.40-cp310-cp310-manylinux2014_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.10

reliq-0.0.40-cp310-cp310-manylinux2014_armv7l.whl (117.1 kB view details)

Uploaded CPython 3.10

reliq-0.0.40-cp310-cp310-manylinux2014_aarch64.whl (144.0 kB view details)

Uploaded CPython 3.10

reliq-0.0.40-cp310-cp310-macosx_14_0_arm64.whl (112.1 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

reliq-0.0.40-cp310-cp310-macosx_13_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.10macOS 13.0+ ARM64

reliq-0.0.40-cp39-cp39-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.9Windows x86-64

reliq-0.0.40-cp39-cp39-manylinux2014_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.9

reliq-0.0.40-cp39-cp39-manylinux2014_armv7l.whl (117.1 kB view details)

Uploaded CPython 3.9

reliq-0.0.40-cp39-cp39-manylinux2014_aarch64.whl (144.0 kB view details)

Uploaded CPython 3.9

reliq-0.0.40-cp39-cp39-macosx_14_0_arm64.whl (112.1 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

reliq-0.0.40-cp39-cp39-macosx_13_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.9macOS 13.0+ ARM64

reliq-0.0.40-cp38-cp38-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.8Windows x86-64

reliq-0.0.40-cp38-cp38-manylinux2014_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.8

reliq-0.0.40-cp38-cp38-manylinux2014_armv7l.whl (117.1 kB view details)

Uploaded CPython 3.8

reliq-0.0.40-cp38-cp38-manylinux2014_aarch64.whl (144.0 kB view details)

Uploaded CPython 3.8

reliq-0.0.40-cp38-cp38-macosx_14_0_arm64.whl (112.1 kB view details)

Uploaded CPython 3.8macOS 14.0+ ARM64

reliq-0.0.40-cp38-cp38-macosx_13_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.8macOS 13.0+ ARM64

reliq-0.0.40-cp37-cp37-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.7Windows x86-64

reliq-0.0.40-cp37-cp37-manylinux2014_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.7

reliq-0.0.40-cp37-cp37-manylinux2014_armv7l.whl (117.1 kB view details)

Uploaded CPython 3.7

reliq-0.0.40-cp37-cp37-manylinux2014_aarch64.whl (144.0 kB view details)

Uploaded CPython 3.7

reliq-0.0.40-cp37-cp37-macosx_14_0_arm64.whl (112.1 kB view details)

Uploaded CPython 3.7macOS 14.0+ ARM64

reliq-0.0.40-cp37-cp37-macosx_13_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.7macOS 13.0+ ARM64

File details

Details for the file reliq-0.0.40.tar.gz.

File metadata

  • Download URL: reliq-0.0.40.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40.tar.gz
Algorithm Hash digest
SHA256 5541d76893ecb51d52fc54cb0ea79432a47c0b7dbf3e3e397568ba73bacbf142
MD5 7f06189cf75e9f459b5a17ddb31eafc9
BLAKE2b-256 91c69af488ff0b38f7d3b919674a94059dd12088b382e084048aca4898f9a630

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.40-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 181.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3e3268a8fd907dbfaf85e7015f7668abce6749ad0cce13db7657fedb8c2f6a91
MD5 0beb3f3a2b184b6ca2b1d958692bc21a
BLAKE2b-256 40503223f0fd490ca753f842c35c3029882e4509c95e4f7853fb02d7acb39270

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp313-cp313-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c0a25e2c421baf4e4bde0d8162f48324a54c89dacf631082f709ad64dacdbe62
MD5 1caf41fbfab85f70543201ce62853536
BLAKE2b-256 1a6f358bbf346138207ce9dd5883045199544d076ec9b1c50854bf1d7eb74fe3

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp313-cp313-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp313-cp313-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 5bf50814b23ac932a16bc0e44c2251c50b134a2c9a74a1d14eaac31d7f244d8f
MD5 128750a8a1e5610f221f89f82df3d2a2
BLAKE2b-256 8bfda4288a09d920a6c6cda352ead9e774badb866ca82519b2d1775613b039b5

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp313-cp313-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4167f017aed8a522c283a81798a7717c6a0f146bae9b546893b3dba89ebbfa58
MD5 e9b1006cdcaa9878e5108b08381f27c2
BLAKE2b-256 142f22db0bae82deec3fcc422084c0c1020e6321428f39f218a4f364ee760bff

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 973b32da293eed8f41ea19222d8c14f382b0f154adb7cd7dad2626c100f44405
MD5 d97c8ba197a93035716fa4b4a60002c5
BLAKE2b-256 866a67da457e5e44eb53e2a4c158a65ece2b1d12730729cad8637504b297b2d5

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp313-cp313-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp313-cp313-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 45da200e3477480f49bfd8c432869d4b72f66c4d05705b688746e6cb918ce954
MD5 2b33fa8f5e923eba1696a53e6e7e4212
BLAKE2b-256 28dd71136ca34a7c45a1e0a71604d8aa54ef979cb3261cb89726747ae22e52f3

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.40-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 181.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 908f3ca91787f8b81e5c95ba98d3bf0e4d992f741ddb6936bb95a7950bcb3977
MD5 bce9d3a15493812f0ad07e7b8e655f41
BLAKE2b-256 27fc01e4c0189499775cf630143670c78b5731af07fd6c0e7ab7b52b7ede3425

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp312-cp312-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f8fd72eaa74c0f6e646612862236f93fe8752927b0ab474c740452d2c2b883f2
MD5 d2881241703aad1978fce80527d75a8c
BLAKE2b-256 6dca72edf45aeec389fe4fea220dc76bbb10516aa6302a1b8d17bd2ac184298e

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp312-cp312-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp312-cp312-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2dd6be4866021e5c5fedeec040d8841b17560c9496a09ada04d1c3a15058dc3b
MD5 946413e08036ae2e066ea00fbfc64635
BLAKE2b-256 724493a0da54cd295de45f9e3a757e0a4599ea65fd7bfae5103a0cf695dfb292

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp312-cp312-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d4d99562eceea5e535c24c5666af8e4ae4c7fd9965baa4af4f1f92143ec57e7d
MD5 023a33ff4d0eaf17b9b8ab6821c7bcb7
BLAKE2b-256 da7dfe82524162ec74efd578e5821df85afb0f991a013b538e204481af592a5f

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7548ae994a982dd9800ef505d5ed3e20dd20d17ab0450db8cf70acd9305cf506
MD5 c3adff533d6814dba51d89cacea01c73
BLAKE2b-256 324ef2bef6cfe7c2e50aa874c1bb85cd948d93124d5729f69fac7aa7ecf592ae

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 acaecddb65a79cce94041a93316c3fea91ab751a98a6638d055767934487ba48
MD5 5027c96e83817f9d0ef51384b98d3ef2
BLAKE2b-256 d62b3448cf46115e519e547376817ffbee2b2d15ad5b33192f27fdd09a4b6ec1

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.40-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 181.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 16cd78e13ec425edacbd20785a44fed67be28178cc3907e1c99d53b789ac3a9e
MD5 cc8bb133bd98ea8cd8d6285eada024bc
BLAKE2b-256 a96c6761de83943875d21b877cb5a5603fbc30c3a2137db8e97c88fce229c804

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp311-cp311-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 93d1aeeb7e961b161efc6498103b4bb4dbb02e7b6eaeb78982d4fad42a64bd6a
MD5 b0600445e7381d255d1fd135b4bd83ef
BLAKE2b-256 c1d420b5ad04a4a63b82316ab156a9cd8a36f744193653f9c4856e0f07b7782d

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp311-cp311-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp311-cp311-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 296f2d30b057533fd940267ad669fbc54896e4f13a303c5943a6d289c8394991
MD5 bcec14ef6623147ac958424b4b51b959
BLAKE2b-256 6e4c5bdd7b386fadea50d7d53c1c4ac8935cb0bee17b2206cbcbe64505a04d10

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp311-cp311-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e100b97cca020d4c399ce84983c913b116b6394be2454031f5f7d50f44c6fe46
MD5 a5a15f43aaecd1e2e280bff8df1deaee
BLAKE2b-256 c7e50279ce556d7539f442e3d9ae4cc27d37ee03e4141fd88df71e44a46b0a7e

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 926d0fa34e505efdb96cdf834ec3dab7a87e134224e7400e1e1ad40892028ee0
MD5 ae722ea2d864813da8274a39d23db95a
BLAKE2b-256 6a82df50247e1e28dee4de6fc097a9aa5ea27685080df3440e651f3c4f31f0e4

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 f79226ed4e7edbc061c3228e7c35f21831a5a700bd38e7882cb798b35a9c111e
MD5 ab4254c108b234bd0352e13a5749d4c6
BLAKE2b-256 1d4801a93465b43ed61188e2904182e685d2595712a6ff8274e9a090f08d05b3

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.40-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 181.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e2c5bdc8213f3eb0bc88521b7962272956de55e22e55d4d16569f1caa9e20fd4
MD5 19a74c6b04eb00ed0d0ad462109f1db7
BLAKE2b-256 359352e5fe085aef064459de01020299360e2bfa5e201968c9900f87d54b00f6

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp310-cp310-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 08afac9b4d4cd649e58dc920cef899031548585a10f270bfeb03452cf8c75819
MD5 e83168669e6aadb393c5cc7cb736243c
BLAKE2b-256 d10b745156cbc9ff55a5f32fc771110affe335093266bd2f590458f41d0089d5

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp310-cp310-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp310-cp310-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 01d20acd0250c336567aedde4a971a6fe60a930caae14cfcff60fe766cab8f1d
MD5 d9829a80455c21715995b2d4b02b8e2b
BLAKE2b-256 0513096afb08441957b229b344d0c3d4669c1e9f1d90c8ccde57bba3b66a80ba

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp310-cp310-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2508e42d71a9e163ed61aa28898484e9032895bfe4a99a6536b98e9c20b854de
MD5 4c3386abd2f068f3340bc21371b62749
BLAKE2b-256 0cad4872b776da8da3980154daa77a4f7c69a2a57f83b6a9b30336a5c5b03430

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a827425237631e005befd56c1665aa84385353c40072ca04cfdc9cd3a085b72e
MD5 a9013425be49a51e7e0b43bbdc88595c
BLAKE2b-256 76957caff63dcd500908385036e87ba2457225fd2b7e70b432913e48b0b75082

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 e6df1e0865ca9ea3ca06a11d4c8705df52758dddb4f695b6facd989bea706606
MD5 a1ec254d8fa909c2940d27ce0d014b7e
BLAKE2b-256 35953ee6fb9b06e54e4925111b13057a5667a45b4d406cc7551dbf4d73a5b475

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.40-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 181.0 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 bd227ed16270e50aec29f5c29a0dbe45e320ade54e8e8ec2b387cbc87863c5a3
MD5 0dc3bcb4b224acd5f050d7a131f5b8fe
BLAKE2b-256 fdf53f4e6d9972f19e7f38ca576d98c467f8d420548306ec383e3740213170a6

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cf7661a0c8c4c7fe5f55545609012cee3fe197ab0ded84f393158d8fd2bf8265
MD5 c8efe7bd466340a9edfd1b0eba4c4ce1
BLAKE2b-256 75c269c0a2d16f18c2debd0cc7d67b65d6af206e8fa1fb2baf1af854e41ac57f

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp39-cp39-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp39-cp39-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 eec25201d289604fb8a51d40501802c375f2d9a7d125907855685f4692400fe1
MD5 0b6a8d44ff483de295b091308374fec4
BLAKE2b-256 e895f0afb4b05e796bbb5948178f66b15fafdc5fa18dea0a16b7925bc9844e37

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp39-cp39-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 493f568c62c6bdf9dbe34f5c03282108e1f984c9dfe31db57aa2c06aa5fb88c7
MD5 a45555a12fadbdca0ba31988e19df006
BLAKE2b-256 65322fb51b14b2b5607f824b3ea4c0fce45213009dfa7b4a18bd75e9bd6deb6f

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 03448ad9bf6dadcc2525612ac69be62bdb1d6ad4cff93a0440dc6f1505973001
MD5 b5b84e915df9502231fec47c8f839375
BLAKE2b-256 3da56b43ae63378236d8af4c352c1e9c7fc4bf7f2c14a4054f5aaba2932e6bdc

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp39-cp39-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 30098caf3333611121c25f575d379d87a030bf2d5ac6e14ae8c871b50e5a32ee
MD5 26cfc5f9fe2b43d9154e820f2710b7ea
BLAKE2b-256 0a77e501ea17215d366171af134cb2817c5bc347e7ab84587cac5d7c66a768f6

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.40-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 181.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 fa6a487d19c2d96dbcc278ddc4d33560c6f45dde54a7b8b4fe71fe85a2b64acc
MD5 c23a7cb186135be23f79d4cc42974d0b
BLAKE2b-256 03221c2abf726df5d92f5b4aad459cc9490da84943d0ad10ab28d2a5dea7d14f

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d6c663b8cd492ebe1cadf0fb0dc76df550b41d1aa2fdad55fb59ce6fba4ba48
MD5 c6b2a92a016a5eefbf97e2f979db14ac
BLAKE2b-256 2fb83ba83d6aaaae5d0d5919e2c71f31f4b5abd80a08bc45e8e0b702cafafe61

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp38-cp38-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp38-cp38-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 93310a29f86cd9fc2c48e4b1e2b087381f211b8d60a989d9375c020f35b9b264
MD5 3bdacb17fe3cc865659a6066e50e15df
BLAKE2b-256 46310c0987a6ae135d2861c2fa5cf453d5de241ca004f8f85ec6fbe1c56fd9c0

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp38-cp38-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 af20ba79f530570942034f08194617790770f83c7687991df19f5f81a81cbeac
MD5 2d2b571f54ecbb92badce4b3aa61500d
BLAKE2b-256 de8171d97090d5bf4396254705345ef6be8a6887e0fea9cd3186ffb8fb96ea3a

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp38-cp38-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f926fbf065376b190dddf2ad7779e4a01d56aedcc0f0523c16c97b1737fdd4f5
MD5 78fb39e8d236cccba3674e8816dedce7
BLAKE2b-256 bcb88d59f1e3b537240c0990c4820d22422f9b5bb743f308539b73a31dc8f002

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp38-cp38-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp38-cp38-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 1974d1ac3833165087ab4b9abea2515272096a2a9442321ae782c2d225fc78a1
MD5 d085270bb43800f0427b0aa6562c50bb
BLAKE2b-256 66a2bdf8733f028eef0146930550e34136b6f7f52993cfd0483cd5d43052b814

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp37-cp37-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.40-cp37-cp37-win_amd64.whl
  • Upload date:
  • Size: 181.0 kB
  • Tags: CPython 3.7, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for reliq-0.0.40-cp37-cp37-win_amd64.whl
Algorithm Hash digest
SHA256 fb944dcfb0eba5ae0d6df896e4c90f187de8023a8184527c2ee315bbe3541b07
MD5 0d7312c5232ecf17fb0c0c48f012a760
BLAKE2b-256 74e369d2e87a0a00a187ac55a5db3b6816b90aeae49fd3edf06ab724cd702e48

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp37-cp37-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp37-cp37-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aa034a1b5a42dfee33410364f7a4e5349a704d0ed52c22cae3db4a659f154db4
MD5 2081ae6ebb6b290898f933961b1ae824
BLAKE2b-256 59b3fc2586283972fa7a79d857f2130694fbb91d33d15bdf4f542fabd31cae2d

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp37-cp37-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp37-cp37-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 73e55144ccf86617bb897517ba7666e1483367c6adb49c52112c9004ae72b5c4
MD5 0e1c85076a696d92b25e7c382546c0e4
BLAKE2b-256 43f759fd8f0c0cf043d136f0a9bccb7573bd89539585484375cadc6966ecf9d4

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp37-cp37-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp37-cp37-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 08559b5a94b18c19170241fc84c94f37384df770a43ec9b42092c9b2e59c6308
MD5 eee121855cae66ea4949982eec0f0b0a
BLAKE2b-256 52d83c413d43e21a86527864a07b1b902b4435f804ea1ab0b402f4bca49b6be3

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp37-cp37-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp37-cp37-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 46bf26582e136e05dc0ceb155d1616ccff8643eb9f6c51a229af01475f25b99c
MD5 f43ebc6e78026d754e9d53a192ea6ac4
BLAKE2b-256 bb307d6e16a50c5bc6c1f596a78e6c75e889eaa3a01f95e954c6855de0281891

See more details on using hashes here.

File details

Details for the file reliq-0.0.40-cp37-cp37-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.40-cp37-cp37-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 f009e59dcb96a81e5cd6fb403ef3a2f8bb912742cffd20779fa10f9a03d49b91
MD5 49ad155c3222a49c8dd7d1d16178af81
BLAKE2b-256 c2bd8c0a74c560d83e074dd9231d8dd0c54760a9655f898736e84c8164194ba7

See more details on using hashes here.

Supported by

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