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

Package Time
bs4 121.615s
html5-parser 22.424s
lxml 4.955s
selectolax (modest) 2.901s
selectolax (lexbor) 1.200s
reliq 0.310s

Collective memory usage of parsed trees

Package Memory
bs4 2234MB
selectolax (lexbor) 1666MB
selectolax (modest) 1602MB
lxml 1274MB
html5-parser 1262MB
reliq 58MB

Parsing and processing

Package Time
bs4 230.661s
html5-parser 31.138s
lxml 14.010s
selectolax (modest) 4.291s
reliq 2.974s
selectolax (lexbor) 2.628s

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.desc_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
    rq.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 dictionary
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"
    } |
""") #dict 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.43.tar.gz (233.5 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.43-cp313-cp313-win_amd64.whl (182.0 kB view details)

Uploaded CPython 3.13Windows x86-64

reliq-0.0.43-cp313-cp313-manylinux2014_x86_64.whl (151.1 kB view details)

Uploaded CPython 3.13

reliq-0.0.43-cp313-cp313-manylinux2014_armv7l.whl (120.1 kB view details)

Uploaded CPython 3.13

reliq-0.0.43-cp313-cp313-manylinux2014_aarch64.whl (147.0 kB view details)

Uploaded CPython 3.13

reliq-0.0.43-cp313-cp313-macosx_15_0_arm64.whl (116.0 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

reliq-0.0.43-cp313-cp313-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

reliq-0.0.43-cp313-cp313-macosx_13_0_x86_64.whl (121.2 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

reliq-0.0.43-cp312-cp312-win_amd64.whl (182.0 kB view details)

Uploaded CPython 3.12Windows x86-64

reliq-0.0.43-cp312-cp312-manylinux2014_x86_64.whl (151.1 kB view details)

Uploaded CPython 3.12

reliq-0.0.43-cp312-cp312-manylinux2014_armv7l.whl (120.1 kB view details)

Uploaded CPython 3.12

reliq-0.0.43-cp312-cp312-manylinux2014_aarch64.whl (147.0 kB view details)

Uploaded CPython 3.12

reliq-0.0.43-cp312-cp312-macosx_15_0_arm64.whl (116.0 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

reliq-0.0.43-cp312-cp312-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

reliq-0.0.43-cp312-cp312-macosx_13_0_x86_64.whl (121.2 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

reliq-0.0.43-cp311-cp311-win_amd64.whl (182.0 kB view details)

Uploaded CPython 3.11Windows x86-64

reliq-0.0.43-cp311-cp311-manylinux2014_x86_64.whl (151.1 kB view details)

Uploaded CPython 3.11

reliq-0.0.43-cp311-cp311-manylinux2014_armv7l.whl (120.1 kB view details)

Uploaded CPython 3.11

reliq-0.0.43-cp311-cp311-manylinux2014_aarch64.whl (147.0 kB view details)

Uploaded CPython 3.11

reliq-0.0.43-cp311-cp311-macosx_15_0_arm64.whl (116.0 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

reliq-0.0.43-cp311-cp311-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

reliq-0.0.43-cp311-cp311-macosx_13_0_x86_64.whl (121.2 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

reliq-0.0.43-cp310-cp310-win_amd64.whl (182.0 kB view details)

Uploaded CPython 3.10Windows x86-64

reliq-0.0.43-cp310-cp310-manylinux2014_x86_64.whl (151.1 kB view details)

Uploaded CPython 3.10

reliq-0.0.43-cp310-cp310-manylinux2014_armv7l.whl (120.1 kB view details)

Uploaded CPython 3.10

reliq-0.0.43-cp310-cp310-manylinux2014_aarch64.whl (147.0 kB view details)

Uploaded CPython 3.10

reliq-0.0.43-cp310-cp310-macosx_15_0_arm64.whl (116.0 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

reliq-0.0.43-cp310-cp310-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

reliq-0.0.43-cp310-cp310-macosx_13_0_x86_64.whl (121.2 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

reliq-0.0.43-cp39-cp39-win_amd64.whl (182.0 kB view details)

Uploaded CPython 3.9Windows x86-64

reliq-0.0.43-cp39-cp39-manylinux2014_x86_64.whl (151.1 kB view details)

Uploaded CPython 3.9

reliq-0.0.43-cp39-cp39-manylinux2014_armv7l.whl (120.1 kB view details)

Uploaded CPython 3.9

reliq-0.0.43-cp39-cp39-manylinux2014_aarch64.whl (147.0 kB view details)

Uploaded CPython 3.9

reliq-0.0.43-cp39-cp39-macosx_15_0_arm64.whl (116.0 kB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

reliq-0.0.43-cp39-cp39-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

reliq-0.0.43-cp39-cp39-macosx_13_0_x86_64.whl (121.2 kB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

reliq-0.0.43-cp38-cp38-win_amd64.whl (182.0 kB view details)

Uploaded CPython 3.8Windows x86-64

reliq-0.0.43-cp38-cp38-manylinux2014_x86_64.whl (151.1 kB view details)

Uploaded CPython 3.8

reliq-0.0.43-cp38-cp38-manylinux2014_armv7l.whl (120.1 kB view details)

Uploaded CPython 3.8

reliq-0.0.43-cp38-cp38-manylinux2014_aarch64.whl (147.0 kB view details)

Uploaded CPython 3.8

reliq-0.0.43-cp38-cp38-macosx_15_0_arm64.whl (116.0 kB view details)

Uploaded CPython 3.8macOS 15.0+ ARM64

reliq-0.0.43-cp38-cp38-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.8macOS 14.0+ ARM64

reliq-0.0.43-cp38-cp38-macosx_13_0_x86_64.whl (121.2 kB view details)

Uploaded CPython 3.8macOS 13.0+ x86-64

reliq-0.0.43-cp37-cp37-win_amd64.whl (182.0 kB view details)

Uploaded CPython 3.7Windows x86-64

reliq-0.0.43-cp37-cp37-manylinux2014_x86_64.whl (151.1 kB view details)

Uploaded CPython 3.7

reliq-0.0.43-cp37-cp37-manylinux2014_armv7l.whl (120.1 kB view details)

Uploaded CPython 3.7

reliq-0.0.43-cp37-cp37-manylinux2014_aarch64.whl (147.0 kB view details)

Uploaded CPython 3.7

reliq-0.0.43-cp37-cp37-macosx_15_0_arm64.whl (116.0 kB view details)

Uploaded CPython 3.7macOS 15.0+ ARM64

reliq-0.0.43-cp37-cp37-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.7macOS 14.0+ ARM64

reliq-0.0.43-cp37-cp37-macosx_13_0_x86_64.whl (121.2 kB view details)

Uploaded CPython 3.7macOS 13.0+ x86-64

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43.tar.gz
Algorithm Hash digest
SHA256 bb51b92f9bdaedf41fdb6bd5dedc94af9d1bfe49a8f809bcd52acd843300a527
MD5 189554f5b2205b706b068c1bc2c6c022
BLAKE2b-256 7da4409f4282a02ec154581c927bf656246219bf17886a899debf23da0fd77d9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 71f00345db08edc396d0a880ca429497ac09bc02412a8e91e6a2101da16f17f5
MD5 c32c726c5a4c42c5c96a85af1032c45f
BLAKE2b-256 d568c900126a74e6fb43be8c9a00f31a5d5da65e11f9dad0e1ecc63af8387763

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f69592de27e65175ee605c7e1956434cdf42f900a1bd1df5e63a4a89a4e121d
MD5 f46711eff338ade56631d24a884df524
BLAKE2b-256 6aa50b6ed2dba5a689b7e5bbd7b984ab3b8c1524df85dc86b5aa0036498cb19e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp313-cp313-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 be743c1fc0f53b9d7be0edbcdd0e325331af86bcab5e20726bef15450b50fe18
MD5 a604ff6449a8da73f29a9f4b925cb16a
BLAKE2b-256 4d4b9e448c21f77d054154eabee133e8b0bdd087ea70268175a309288591c1dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 95efe84625141837b2950e31078f63f47ca7b598bd64a305f10b6dc487313e51
MD5 399aa8402e0b00c087ebe56dc7ecb614
BLAKE2b-256 96c73d01517f55ced950c03ad29b040a0b7ccb00e4e2bfacd3f549510e95c0ca

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a73e12566ae74a9b019856ce339f860c96546c772a7605383c8a1e40aa0fe392
MD5 93de644f8de2cd535998f483e11c7cb3
BLAKE2b-256 f2b8381f4fdb064e86a64cb609f9e53764ed5c55ea87132eea9534d54100df03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a0e40bace196d9c2aefaf535d6e600a7450a988f0307b6b75e6a97018996b6f1
MD5 d887bb1b87803b89c1bcdb09713a2602
BLAKE2b-256 2c2c9d32372759b2a3ade3ba21138084d9f8b4fc297dcff189fdf6ccd43b9e1f

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ad44da05ca06731222db30c198ba15c9dfa47e262d3a4be6bc94c41f92aabc6d
MD5 9ff2e04553f22ace86255d7397de11df
BLAKE2b-256 4437253ca5f656a887a4dff36afeae8e300a084089180e6b101d9a58ac04f5a6

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5378859c38ff9d39e04f84f5a31ce5b475194b78773314f1024dccaf91e43da1
MD5 9115d85125e6ac04e0c8cd4a4a124509
BLAKE2b-256 1810660edea101677453d502776806ce491f22ff27e2a17074200803c2fe9f63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0bfd1572094ffe028084d206d8dfc137141a37dacaf56fe8c621374bcf1f5198
MD5 d6313440dd93ff15b50430be90373d14
BLAKE2b-256 1f656ad1be05b47b9093f9028e57e78d75ed4b92271464cd021bffff44834ecc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp312-cp312-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d4eb2085eb0e73175e55ebbea3f17db16f09917b4f49cb67c17f246aa377fd26
MD5 2834a687a0b570845b797de2f2efc988
BLAKE2b-256 26503f9a743800ec649b1e8afa9c038cda099b75bec1dbbf1df39dd33680587e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 19ba3cc49841ffb8c4422008f3bb36b6e8b38f4d1a7ab062ca48da74daacc65e
MD5 687b925bc1ec7a9ae0223109391e58a3
BLAKE2b-256 e36d0698cf0fd633bd1d349edbf36aecb2f51764fe486cecf3a84832fe44b28e

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c42129ff8c10444f21f8952bcdcff14aad2104f5ed239eb1d2b4137b2c77576d
MD5 a8f7fa3bc62cce92f622f8fc14cf794e
BLAKE2b-256 74afbca89654bee7ec9eeecdb88862e421a8af910a2a8e1a4cf5b6fd4ad60554

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 105554f24f5ab1bb7ac87dea31b847f8265a9110389f69cc271bf61ab8a44603
MD5 8d3e9c2b62a6cc71b5094d0d136e11ee
BLAKE2b-256 51fe316f374a5654fd059ddcbee4bc48311c5b1846b52df82472d30965aff92c

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c47e0691bcccb74debc58e7ec84ffe3d9206accffd0382eda2e34873729f8f29
MD5 b37e122ac70c90bc8fd959b4591da3e1
BLAKE2b-256 0fd1d8b95230cfc7428a502e21d3c57c321287745a677f6b2e396fcb7336b6fb

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8a01c3a368022c4741f3e8458c316c9754d4507f6871e5d006f3d85f5a476516
MD5 5df30e425ec43afa924b0134dfd04db3
BLAKE2b-256 2d3c9c52953c778beca1d97ea16d2bc03d50444a311ac9c0ba745d44a57ec38b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7539828581afd124e531be01d9c1d13dc321f9cb97987ef8c2c19c0416771a75
MD5 0f8a00f307912590b2a1ddcd58f0d5a4
BLAKE2b-256 ea27c8af25fe219c5731e460fbde352522f75fdeaa9ff0d6520ae5792565667e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp311-cp311-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d44d537448231aa93ee00554f1201c6b15003c2d0f61942178775fb0e7af7572
MD5 f6b30f54511e1e0ca77e928f5e17d93c
BLAKE2b-256 c728ff4d1c9b4a7a70905f035090f14507ccd92b953cbdf54edd823396bbe7b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8fae969c1ed3352bac0402aab9ebd72dc431066e1c3404481a2273e8cf6c2d18
MD5 efa5942103b630f4bd3ea60e4b14c62e
BLAKE2b-256 7e942ab4f6d39e64dc2a4dbe519a137c109d1cc7a018e42a7261f3da407f5ead

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6cdbdb3350631a5fd65d58ca133f12bfd143309d582da8a8240b277559c319dc
MD5 03e5cc215b7731f7e9b5b744630ea83d
BLAKE2b-256 df7353712b3e27315919e1b81605744eb70117da0eeb08c031491cd5cf9abe90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9549516bfd68c0e72314ad092fbba6ac696b3f6f73cadcf66d737bc67fd4faec
MD5 fa7517a8102ae7573336f0a9b1dbe96e
BLAKE2b-256 f1e8f5aefdfb9076233eb5763d749df1fb5fe1da38af5231351f919c09d5c511

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8a979ff6f5d98db8206d474fb768d69d99ded46ba37b535549ebbc69f6851be6
MD5 eee328d04eb6d3a072c82d91a80bf174
BLAKE2b-256 6c35e353c5b6d4b66731f0cb0af6c9b577cff745b517e0c61a721f6579a4c2f5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4ecc801d1539877bd19ca7e09923c232d739c099fabbc050852de7762e14883b
MD5 7b2df4b096cad910feb4503f812757ea
BLAKE2b-256 9696135d39c2f0c3967b9dfd8d25311d0da48f67a137a5245ed54dc6972a18c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e97d99535765cc59e577202cb3a31e8e0d1e1c52e2a831fd60e6d8ac563bf2c6
MD5 3a6cff6fdd8f06ebcc722506a08af588
BLAKE2b-256 30ee0f9fccdd48f10696985bc8c9dbe72a241e280abb624059ba795ebd1e216c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp310-cp310-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 8a48003551949aa22f58024791d843027fbbeac678ea20c5de717fde13d7056d
MD5 93ca097384704e6b667711d97b5889de
BLAKE2b-256 9f61a5ef002e1311bae52892a420f3627b3d2580a40030ed2401d4ef37a2664d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 90c3ae0b5230258fe64ccd58d5073402c0be4c1a3683ec9abfa6357cc825c74f
MD5 76ac23a244f678b825441f1c3cfdd30a
BLAKE2b-256 1b67101f0d5a61e3a437988371c07dc43b378e125f1d54cb7bc8d6943be9f6f6

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 28c9b61a91eacc3bd1768488db7e8c2f30273d9578c925e49b6ba20c698f348b
MD5 56de36e7e2255ef9b7a99f2d028d259f
BLAKE2b-256 3710e2d3b8e8aef438726bb94cb30baae97b361a507d0db5dc4bcc3747d43099

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 109fcf83b600c25a1f07c487099b5ac08ff3d58d748fec9e3ccc326f0b8b353e
MD5 77e295ed6bc8530fda87df6425839456
BLAKE2b-256 84f0c3b3128baa619e25feb2377de0877a56874205d9eadb49e79e027ff5999e

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 200cb7bbe89b7d73990d09ce9d6f9bccb9e3f6ffdb78e159f0857c85fa037dd8
MD5 8b8ef490f3704e8d348af7944ed1a4eb
BLAKE2b-256 5f29c4ad6a25b1e5a4dcb9c13119bb918bdf959a884302b37afb3df318bc1ac9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7510c7dc9554a15fa16042f8aaf77a01a2dd20b8fbd1377b9d1f4505e8838c56
MD5 56c1367a02e044b9c482a02f79b338a7
BLAKE2b-256 0054861ee63506c6c3193438bd47f1d6c301722e9a1b3d41e55759640abe0fe3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f33650ea54a7bc7a3fd051c423e7b8c3d492a71cb312628cccfe601cbd3ae95f
MD5 1ee211b3e241f0ae87dfb07b46d967d8
BLAKE2b-256 cb96258a1e266649f1dd3c64dd62842b910b2f2d0b2ac4f40f983ba9ce0acfb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp39-cp39-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9a225f3b9c5bb2a6f57c480c14f6a5195516dca45798664e107d048fa4f62315
MD5 fae2086dd0263277bc495c7485970924
BLAKE2b-256 5588bc2e73caa7fb142492b113b9c30a216da72bc143c5672872d85c941eda06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bc9373d2c92eb91bbd02ff74d490450248851a0554fbaba27b90e552cbbcd784
MD5 ad5580071a9c7b2c2184bf7c81dde0ff
BLAKE2b-256 c0c24219c876415bec3c7e657667ecc4bb986bcb3710be22147316a449f8f512

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4ee43a4281693b77e87d8dd2634ea021caa166907a2eae81f0959063097b9d8a
MD5 5155dd22ba7fe988f71ff78f5a7f511b
BLAKE2b-256 84a410f144dd145b03fc75b8fe8114a3d641e900f11c00dd204c2d6a72a5ba76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4d2632261f4ce72d3c7f3e843077ebefda5964cd8c2d0a3f5020d35ff72a4c6d
MD5 8688826ef93dcf33bfad942d446cb59b
BLAKE2b-256 dd5e023c62093a933ef0e532cd64ad352d09c40e0a4fa6361d53db76f6b4b3f2

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 814c7986b1aecd2c7659f9e13b86ab88bc45b48b83f8315206bf79837e53097a
MD5 12a1e13cbcb7436713f9caf8758a066c
BLAKE2b-256 b2855f892aa45fe54e94293cec061faa2a0de7a93646fb6f676ab908f0a7d308

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 fac82404f1231ba49f532df4e0692149caab94eb1780482eed6a02b953bc9712
MD5 be9005b631dd8ce60b3f4dfcb2ef6e5d
BLAKE2b-256 6013e46ecdf48bd989d65d0e3560a8458c4201a6448e80e1d348a6aab4d206cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 21b6979fe19d9231199034e32359c891508d784e697919ca989a51dff9f16597
MD5 4cc4dab850ab6497158f004b26d1c378
BLAKE2b-256 780b751b989d8ed3835d098512a1dcc72306750decbbf720429292ec246712d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp38-cp38-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 afda534b2d884544ed0d444e193524b0dc70e117975ca79fcb3e5e94d9948138
MD5 f3fe44f943d22407968ce4d5d33ee33e
BLAKE2b-256 971f71af5e9df9277efdbd1c1fa8b1ef0db0c8d38404347f0f5b0bf4b67efc97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8dab7d675a45fccda17193a8b1b7e984c87ef580d39f5e84952bda40d7cd2bb1
MD5 9234b132645b736f41367f7c075c21f2
BLAKE2b-256 5c3a53360078fd10654e8486fc7184561e239c2fdba60d19f2f4878e7c5b90e6

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp38-cp38-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp38-cp38-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 43df8f210bb8301fe18939f2623f599ed56b3c79e3862024f6ffdffadf2ad007
MD5 b9c0de708030343d11d351c08c741fcf
BLAKE2b-256 9c748f0feadf857f495b3b081e6fcd7b631387da6210bc19c1f14666c3c565a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c04502e576c59e20d4c9b86ee0a931ac0bb9baabc88720567fca55d449fbfd12
MD5 c618494c20c4f3a0334d9ac6689d23c7
BLAKE2b-256 4f63a1e4d7da8f0591fcdf45eb48090ec4738a56501eee2c277c190d25f0f564

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp38-cp38-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 adf0bde351b15448fb51c1ec99a5632845b0d18f3acb63c6c3d1031d9528cbd1
MD5 df11f925256578909fd20791cca26610
BLAKE2b-256 bc95cd8ff34940d81cddf95b94649f07781454ed6ff7aa057827d7054adede7c

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.43-cp37-cp37-win_amd64.whl
Algorithm Hash digest
SHA256 ade36bfdd51111a3661937be803c42cbc3fbef36e54b3846e88ebd05735d2e5f
MD5 06d872957e1441349af08eb4da557ce1
BLAKE2b-256 aa4a90bc5f96b50872e6a7a0a8b9c2769b1a23e99a4ada8533e849851b42c126

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp37-cp37-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2579395901c554fceb2db144919d68be020a16940beba6f7c9f8c58afd87f42
MD5 3d4c88462fa1845cf4fd13523a533d61
BLAKE2b-256 927020cc8fb4873e4a258feb2372e6d4e726ee5d38426a76bf05f5450af5beda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp37-cp37-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 490e10d4ff6f4fb4154635bfc23bd1ec061ac7ffe91c01574cf0baa937adf271
MD5 c3c2a549bb2c41bfa6b092c6e82de123
BLAKE2b-256 6aad6432f2511f501958772069bf34f18458f08a3637a00f9aa2933d3dcae219

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp37-cp37-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6381368301005fb0e536bd520a23bcbf550abfaf0781ceda1f8e73098ef818a3
MD5 bcfdaff86f59ec0dac8a6686556adc3c
BLAKE2b-256 1b253aad68a551f4d7d10a4487bfe93be3ce37539307d2b3d081edeac116183d

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp37-cp37-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp37-cp37-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7c318177959556cfbed0fa6e504043c77cdeab3bf73fc4eb8d61570d40a88e55
MD5 71aa18595a3e1ed0f52bc508b027f2aa
BLAKE2b-256 19d1324d7951e8011bbec5539d6ee0f0b119201703ad3711d87e9ac7d5bfe169

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.43-cp37-cp37-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 0e9ca01bafe56fbc6a9b001839b186526f9d0205587135042232639cefb8ea0c
MD5 cb5c13fb54bf5b4359583591ee6407ac
BLAKE2b-256 845f906c3cc3ae107a2fe5f2e35184117daf050b7374d00207d77631aee91a6f

See more details on using hashes here.

File details

Details for the file reliq-0.0.43-cp37-cp37-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.43-cp37-cp37-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 cb180c4f4dc2701be0db5c34d01a2fd4dd6482e4207fb9212869c932ab47cf55
MD5 0e3ad272805b6674016407a69389b52e
BLAKE2b-256 c5a31e738bf1d8249f82f0747937f7fa1cce5fda57aa09ea3603da85132e6dbb

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