Skip to main content

Python ctypes bindings for reliq

Project description

reliq-python

A python bindings for reliq library.

Installation

pip install 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')

#execute and 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 enforced and any incompatible expressions will raise reliq.ScriptError

Import

Most is contained inside reliq class

from reliq import reliq, RQ

Initialization

reliq object takes an 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

If optional argument ref is a string it'll set url to the first base tag in html structure, and in case there isn't any it'll be set to ref.

rq = reliq('<p>Example</p>')
rq.ref # None

rq2 = reliq(b'<p>Second example</p>',ref="http://en.wikipedia.org")
rq2.ref # http://en.wikipedia.org

rq3 = reliq(b'<base href="https://wikipedia.org"><p>Second example</p>',ref="http://en.wikipedia.org")
rq3.ref # https://wikipedia.org

rq4 = reliq(b'<base href="https://wikipedia.org"><p>Second example</p>',ref="")
rq4.ref # https://wikipedia.org

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 occurred)
  • 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__

ref and ref_raw

ref -> str

ref_raw -> bytes

They return saved reference url at initialization.

rq = reliq('',ref="http://en.wikipedia.org")
rq.ref # "http://en.wikipedia.org"
rq.ref_raw # b"http://en.wikipedia.org"

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

Similar to search() but returns dict() while validating expression.

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;'

URLS

urljoin work like urllib.parse.urljoin but it can take argument's in bytes and returns str or bytes depending on raw argument.

ujoin works the same way as urljoin but ref argument is set to default reference url in structure.

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) # 8192 passes :D
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

Project wrapper

Expressions can grow into considerable sizes so it's beneficial to save them in separate directories and cache them. RQ function returns a new reliq type that keeps track of cache and directory of the script that has called this function.

from reliq import RQ

reliq = RQ(cached=True)

rq = reliq('<p>Alive!</p>')
print(rq)

It takes two optional arguments def RQ(path="", cached=False). If cached is set, compiled expressions will be saved and reused.

If path is not an absolute path it will be merged with directory of the calling function. When in any function that takes expression argument a Path() is passed it will be relative to first declared path argument. Exceptions to that are paths that are absolute or begin with ./ or ../.

This function should be used by packages to save reliq expressions under their directories without polluting the general reliq object space. After the first declaration of this type it should be reused everywhere in project.

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.41.tar.gz (35.4 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.41-cp313-cp313-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.13Windows x86-64

reliq-0.0.41-cp313-cp313-manylinux2014_x86_64.whl (150.9 kB view details)

Uploaded CPython 3.13

reliq-0.0.41-cp313-cp313-manylinux2014_armv7l.whl (119.9 kB view details)

Uploaded CPython 3.13

reliq-0.0.41-cp313-cp313-manylinux2014_aarch64.whl (146.8 kB view details)

Uploaded CPython 3.13

reliq-0.0.41-cp313-cp313-macosx_14_0_arm64.whl (115.1 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

reliq-0.0.41-cp313-cp313-macosx_13_0_arm64.whl (121.0 kB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64

reliq-0.0.41-cp312-cp312-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.12Windows x86-64

reliq-0.0.41-cp312-cp312-manylinux2014_x86_64.whl (150.9 kB view details)

Uploaded CPython 3.12

reliq-0.0.41-cp312-cp312-manylinux2014_armv7l.whl (119.9 kB view details)

Uploaded CPython 3.12

reliq-0.0.41-cp312-cp312-manylinux2014_aarch64.whl (146.8 kB view details)

Uploaded CPython 3.12

reliq-0.0.41-cp312-cp312-macosx_14_0_arm64.whl (115.1 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

reliq-0.0.41-cp312-cp312-macosx_13_0_arm64.whl (121.0 kB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

reliq-0.0.41-cp311-cp311-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.11Windows x86-64

reliq-0.0.41-cp311-cp311-manylinux2014_x86_64.whl (150.9 kB view details)

Uploaded CPython 3.11

reliq-0.0.41-cp311-cp311-manylinux2014_armv7l.whl (119.9 kB view details)

Uploaded CPython 3.11

reliq-0.0.41-cp311-cp311-manylinux2014_aarch64.whl (146.8 kB view details)

Uploaded CPython 3.11

reliq-0.0.41-cp311-cp311-macosx_14_0_arm64.whl (115.1 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

reliq-0.0.41-cp311-cp311-macosx_13_0_arm64.whl (121.0 kB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

reliq-0.0.41-cp310-cp310-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.10Windows x86-64

reliq-0.0.41-cp310-cp310-manylinux2014_x86_64.whl (150.9 kB view details)

Uploaded CPython 3.10

reliq-0.0.41-cp310-cp310-manylinux2014_armv7l.whl (119.9 kB view details)

Uploaded CPython 3.10

reliq-0.0.41-cp310-cp310-manylinux2014_aarch64.whl (146.8 kB view details)

Uploaded CPython 3.10

reliq-0.0.41-cp310-cp310-macosx_14_0_arm64.whl (115.1 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

reliq-0.0.41-cp310-cp310-macosx_13_0_arm64.whl (121.0 kB view details)

Uploaded CPython 3.10macOS 13.0+ ARM64

reliq-0.0.41-cp39-cp39-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.9Windows x86-64

reliq-0.0.41-cp39-cp39-manylinux2014_x86_64.whl (150.9 kB view details)

Uploaded CPython 3.9

reliq-0.0.41-cp39-cp39-manylinux2014_armv7l.whl (119.9 kB view details)

Uploaded CPython 3.9

reliq-0.0.41-cp39-cp39-manylinux2014_aarch64.whl (146.8 kB view details)

Uploaded CPython 3.9

reliq-0.0.41-cp39-cp39-macosx_14_0_arm64.whl (115.1 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

reliq-0.0.41-cp39-cp39-macosx_13_0_arm64.whl (121.0 kB view details)

Uploaded CPython 3.9macOS 13.0+ ARM64

reliq-0.0.41-cp38-cp38-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.8Windows x86-64

reliq-0.0.41-cp38-cp38-manylinux2014_x86_64.whl (150.9 kB view details)

Uploaded CPython 3.8

reliq-0.0.41-cp38-cp38-manylinux2014_armv7l.whl (119.9 kB view details)

Uploaded CPython 3.8

reliq-0.0.41-cp38-cp38-manylinux2014_aarch64.whl (146.8 kB view details)

Uploaded CPython 3.8

reliq-0.0.41-cp38-cp38-macosx_14_0_arm64.whl (115.1 kB view details)

Uploaded CPython 3.8macOS 14.0+ ARM64

reliq-0.0.41-cp38-cp38-macosx_13_0_arm64.whl (121.0 kB view details)

Uploaded CPython 3.8macOS 13.0+ ARM64

reliq-0.0.41-cp37-cp37-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.7Windows x86-64

reliq-0.0.41-cp37-cp37-manylinux2014_x86_64.whl (150.9 kB view details)

Uploaded CPython 3.7

reliq-0.0.41-cp37-cp37-manylinux2014_armv7l.whl (119.9 kB view details)

Uploaded CPython 3.7

reliq-0.0.41-cp37-cp37-manylinux2014_aarch64.whl (146.8 kB view details)

Uploaded CPython 3.7

reliq-0.0.41-cp37-cp37-macosx_14_0_arm64.whl (115.1 kB view details)

Uploaded CPython 3.7macOS 14.0+ ARM64

reliq-0.0.41-cp37-cp37-macosx_13_0_arm64.whl (121.0 kB view details)

Uploaded CPython 3.7macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: reliq-0.0.41.tar.gz
  • Upload date:
  • Size: 35.4 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.41.tar.gz
Algorithm Hash digest
SHA256 2f45ee5d03c6d1ce682c96b631a0278143a3b0b81bf55a31ccedbedb42c1e422
MD5 280cd13493bafe7972fc6c5034c92ad6
BLAKE2b-256 c7cfac65ba4f74a0392c5f7032d27b12e1cf5a72820b6830c4daada8917a4664

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.41-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 184.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.41-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ea7a10f93c258896b44e57c7c1ef423fb9a658e6c8841515ee7d3bda60becd87
MD5 4c0323afdec82f12310b566f32d3879e
BLAKE2b-256 a538df2603c5d9d78d5b86fc9a05e727903ae3d6c295e2cea83fc7815b07e4bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b27e915f944cf9bc4266fb3218ecf27cfce0c84a312686637a924b07093c3c5
MD5 0353972c3ab8fb1e58eaab983f13aea9
BLAKE2b-256 825e57a08be4a906e36fd6bd93b62a6208cefb7cb797080b48eeb25f14a87619

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp313-cp313-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f5b235c7944dcf68409233b58c99aa6cbec535cd5f7949edfb241c238d635348
MD5 256f84abe96882276243189bbd7d561b
BLAKE2b-256 f91d42a735612c5c0741233c507299b9ccad96de52fa0b1d63f92589adda708a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8fcaa06c6526ded51f28f759db0569f49c9ba3c5a9684c54bdb0705619d06efb
MD5 279c72a654d34e6f44fde83f11b9420e
BLAKE2b-256 932f522a567712bf8a275150b48fe127703185d765f0f207684c88fd7993ff35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a6ea0f62d5964dfc2b2f560940ca0382f135ed8ea56e56f59dd3c385a91971db
MD5 fa0c95caa55e7125ef8cb0d57812a448
BLAKE2b-256 0129806ec479a8f8ec259d92f07cdbe7c5ed3eb419b3adff086902cc64eef6e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp313-cp313-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 355400065e1be0bf5ebc2c962073419976d7eb458c12ccb350a36b04b033f98c
MD5 2cf868a9c56c473990f3e6ad5024940a
BLAKE2b-256 5bcbcc071f0432aded22d1258fd98f06fa486677477699f41301d1576a095662

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.41-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 184.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.41-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d771633adf42cabca5d1d3b73556cfed11d4baf62db82a738431505151c9dbee
MD5 340ecb20a651d3948917a37ca880d55a
BLAKE2b-256 beda2c47b6718d31188fb526ef6bbee13b70f92380c813bfb3907dfc1465c49a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6104e6acb166c5f585b4074165ccfc85e862c34507dccc6bafc1e399271c7638
MD5 31f1d4433edb8c488eda6ca0ff857ede
BLAKE2b-256 f10f8b4725a9938fd10d3a5caca2526b863dc4d3eed226e3c0a6a22ae796370c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp312-cp312-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 6463a148518404252d86082abb96fa011ab2f4cc51c643e8e2d8259cf540b561
MD5 bafeab36107caaa73214e3379afaa11f
BLAKE2b-256 35557cc9d72d8629c4bd18c91754ce2ca8504f617c37e5cd1a1fe52534852bcc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0e47e6c35a3a159e1fdc93b0c86d02f879df3be1d8177bff56c8e738f6fcb988
MD5 2d444f168d95d09ab3a0946cac014bfc
BLAKE2b-256 c2f44fc130052321b421d5dab9b20d4a9f8520d6fa2c2cc49245d05a33a16594

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c7a5c1da09cb2742086df7c86b883f9bcb43a8f177bfcc26cadeebd4ba096735
MD5 11b822578a1e5d475433e25dd077682f
BLAKE2b-256 d701281f76be2fa62230d859253c5fa98b7a56d9dcaf06312333870cf880b149

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 9e981cf3244f79abacbd456028ee2d42ef5e6af75ec7e5f726420bf95306bdb9
MD5 4e10c17365a7fdb36c3464abdd14e02f
BLAKE2b-256 b4737f552997574ebc0436b9d028d22d84a1ce51a651a6fb34d7bd79146a41e2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.41-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 184.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.41-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 574f67678bf8b744ebc9e84fe5c2c3c4b26df7f01a4a4c7a031d4fee614a1c18
MD5 358254310413334110aa462a66d6e1bd
BLAKE2b-256 2cbadf87385e989ddecea80bd7bd6a8ac33cc41f8de191b53657bfed61cc7995

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 26049497c4254d39beba8821bbc45b0d59fcc8bd9a8b2525ae1ec86306db2e70
MD5 7c728615cd79b721de4f2ee98ecb3ac2
BLAKE2b-256 b1bc80553625a70ee05628dabcdc8cdd249dccacc2a92e249b327d7a43156b4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp311-cp311-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 70fcf2464e2ecee49f84ab2d857949c26aaa4ca4e2bfced3328abe6767c2f419
MD5 72741b36bb8121e6271512ea5fd1c783
BLAKE2b-256 2ca603835e256ceda212199741f73e85fff2702a4e694e8f875bb272cc0c12c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8f5f7f2958a9adedecd07d5c58c46adbceb11986950e5b5bdb9f1f46a2f91098
MD5 880699a8b3243e6ac0a6c61948a0815e
BLAKE2b-256 3f04adc5041be96f11e5f6d83822653547d4742b4e1e6fb88686e8617c3f5c6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 50735d35f3b21bca01ce3146e92806ea5fce022c93f75ce4ced4ccef47651dc7
MD5 1927a0ccc6d5c966e7c2f986798766d2
BLAKE2b-256 869e0203b9f78e084efeaa5139b153abdbdb6b9d232b2159d6bfc84f55629993

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 3b5721bb1673d7025074b3de29fd3341ec746271e4076cbfff3346749dff93d1
MD5 25640e29c129e2ae3e05857acb7b7b33
BLAKE2b-256 87fd031dda6fad2a7a0461685e33484d876dad7019ac34486dc8365d0d81b326

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.41-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 184.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.41-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 36a326917205d1bf8d8efc7e52b5338b37946d4f7fb1eea505dab648280ee41c
MD5 9c6d86d91f64ec0aa86aa91ca29b6013
BLAKE2b-256 8440e18d3c20254d2947625d16dfa3bfbe61ebbd09461357491a941a79ad3e25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a6c0edbcb8d6f08b34a77fb602db03a90aa1eea4c36cd5e1759129eec49d819e
MD5 1e8e352866b11d4d9a619096abaff14c
BLAKE2b-256 1892da2d342ba0a4cfac2d221c7b0496f1ca98a35d42796647f0ffc8cbf19439

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp310-cp310-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 a16b482cc820c546132431ad01762808ca3f097f62bf86710ef6db5ed597837d
MD5 d91309717b1d95bc598dd7c0914ca6c5
BLAKE2b-256 8a2ea0839712d7f29cd3e28261930cb60795c841bd857589806caafcb3c29e40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f67faebc5a7f8ad9427f37734e5cba2e304792b77607909b5749ebb940d28e8d
MD5 582ba69000cea7d03c90a200eeb99d08
BLAKE2b-256 5b6ce58d59bddc5f147078d507c780b8ca964e5ae7e1f7456de8dddda5f0ede3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ec97fa7c7edf807b3ce4d4222078440464a6a983da5ae829f3bae39e6dcfd0d4
MD5 47f33d5b7f3b395f6d1eeba7d8d331ad
BLAKE2b-256 730f76118328113caf3691316bdc6b0eecff7c3da678b7f1bcf6bc0e522da2ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 647f4193d4878f3ec28723c2529116d23ec20ddbbef3d6a6fa4376f78e009198
MD5 eca124347882ad2d07a4fdd14ef87461
BLAKE2b-256 f891bc1b149f7ac1259149186cc1e740b9589df8aa81f5de684e1c34ca3cf51a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.41-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 184.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.41-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9275a2625a486f3ae12a6939bf7c5488026c08ab55045ee41b0042176e20ad5e
MD5 3e3f865df7291f0d2902d2b5bdda96c1
BLAKE2b-256 4c441807eb0e00cebc6bd0601413aea8d25d2491b2b65fd8a304aa5b9dd7334b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 efb8f541baf30e59336ad0ebf9122d4ea4a50d7658187683f9e6089b306a7e9f
MD5 c28694e6cc682ef31d5d1123b563e46a
BLAKE2b-256 e1d33a5db515bc77a09f2dbabf30e114ebe96a23b1944d22fa0eaa65a516874b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp39-cp39-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 8608c2c0b54612b57f3582b1d3eef350265b9e085ab745cb3e1e41f1acdb7425
MD5 8f7b7ec4e2d7f26487b3e1b0586b99a9
BLAKE2b-256 fd36101f0e00760a117adcf66d37980b71751f3a7e9c7b7d0fd6537a7066a050

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f94543ac53675ecdfabf5e09e84125f2d9d7ec78de80e10494881ffb0049d67c
MD5 6b4bbe42bea34df7256a287c4db7a84d
BLAKE2b-256 690a88f1aff6842ec25fae38f7d3a72f92c39de865a8420835a375482283e7c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ed9abf15e30e47a1302a3aabeff1aafe379510fd4122ad6550906ae0195ac78f
MD5 bd38687c25774b09da87cf1582a31fd2
BLAKE2b-256 570a0d09949451630818f2428191dce2fb1a7bc69169f8b24ab778ca7c0d5852

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 cafad7c12d599fbb791c0595ad31f900b6f6929938bd3cf81ae56d6b72d35d41
MD5 216cecfc53a467359d141157d1d12218
BLAKE2b-256 d4ce82dca4d84a9a8f8843fa962f40d050f41ca0dde2d7cdc1eca9ec9e6f7c38

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.41-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 184.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.41-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 7bf0c8a7ae8ef45cd383e2821877a9939422931b5c4fe1f82e566755be4e27b8
MD5 587b3112aaf3c39e1e9987503c83415f
BLAKE2b-256 19e73e8bf2fec8fe9089157ca77e3c1996d6d946b675bce60ddc0ceb18c6d1de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c3dc02506bc4e8b748a0e095be8d344ccbdf1ef6b75c645c3766e974eb0e9e56
MD5 dc62bf0b4799daa63d701c0387ee5fc2
BLAKE2b-256 c3b5e91f40e117999444264080625047296ad3b938ee3b9ac313b9c4d492d553

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp38-cp38-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0c51c57fa6bf456109c64257e09acb2021b383edb6ef3b33116b3f786fb20fcb
MD5 9110f51f4ee6872a50f7e0852ef80798
BLAKE2b-256 9d82980a779631a3ab590d0e269b02ae32fb6cc4be6824c503bc9f2eb7ea0202

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a3462fdc9665d9f45cc33a60bcd578faa6a276064707b32af7beb444f238125d
MD5 61c8c886db8c89d186abad22d015f8b5
BLAKE2b-256 ee464505efd06380a3dcd9c4058b8dbbb0b155d63acfc5856744adac1b4a040a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 80a7a34198ae710974c7ecb82ae9e764cb80d8ca16b8e8f0934c657cf8362235
MD5 b0cb22b9ec9d2d20a9d59a29af381d68
BLAKE2b-256 3afd57c7a582068722c7ef28af88e72dc11b071a4e818770ab2b78c7114152a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp38-cp38-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 3b2d242c61b57f6002323983caa680175db25ee2e585f70e56051b094b49beef
MD5 43d2ec4c01b21b655a90ad9c31a82bf9
BLAKE2b-256 1106efb2a0b19304ae05d4fbee72f040a73b5954061d32f94e46c0180bd61be2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.41-cp37-cp37-win_amd64.whl
  • Upload date:
  • Size: 184.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.41-cp37-cp37-win_amd64.whl
Algorithm Hash digest
SHA256 3679260835a2da98b63a614b0bbe617a6ff3390948e3943e81b4e0768ef728cf
MD5 38cf572890b6ac3fa38b187786c9ce0e
BLAKE2b-256 33f70ffc220f39f1cc88ac734467cc41b1f36b372cce5d08e8032ea9ad298577

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp37-cp37-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7562335e8205d40f5c206995912802447a92402153dd71d6c1d5fd948a3c24d1
MD5 4c538582611e07d4181da1adb664e482
BLAKE2b-256 6a16aaf85b263784995f6bba59bfda276b3ce9332feec477902abbfc5599261a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp37-cp37-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 c6f68b56fed4227a92ddf2aadc60eea3f50e454df777287db3cb6670646d8329
MD5 6db73f003849a019896948be5bb2a3e9
BLAKE2b-256 b5a3e4910b60ffd804411c3dfe83bc0a6d6ed1510ed144253d1a5fa4313917eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp37-cp37-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 deec2157157b370d9fa85fa933f29955c96590250f06d8dd26deaeae57467210
MD5 4997bf4fd9172ba2d4eb62b715f786f3
BLAKE2b-256 727db666760fb7be8402f69ce4ab0a7c01bf548ec58e4972777262b9c9204c70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp37-cp37-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 44dc90fe8f26b3486d88ecf34afbc8f88c901ad649d6b4d93a7fc166c154a461
MD5 f5746817972965a31e15644162fa58ce
BLAKE2b-256 4e75787cdb3ec3fa4de8ec91d2be6e3de5a6676e83e75d49b63599e56190b6fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.41-cp37-cp37-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 8fd65ad4adfa8493e20feeeb8fe0edd9865f4dd40444cf397394d3a92793b9c3
MD5 9a8058fcd183e5b285a80a08243d0377
BLAKE2b-256 ca411f26516455597c47c83335244d2c07ee9203de9699b5d7c18372d8c12a80

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