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.45.tar.gz (2.7 MB 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.45-cp313-cp313-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.13Windows x86-64

reliq-0.0.45-cp313-cp313-manylinux2014_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.13

reliq-0.0.45-cp313-cp313-manylinux2014_armv7l.whl (120.7 kB view details)

Uploaded CPython 3.13

reliq-0.0.45-cp313-cp313-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.13

reliq-0.0.45-cp313-cp313-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

reliq-0.0.45-cp313-cp313-macosx_13_0_x86_64.whl (120.6 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12Windows x86-64

reliq-0.0.45-cp312-cp312-manylinux2014_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.12

reliq-0.0.45-cp312-cp312-manylinux2014_armv7l.whl (120.7 kB view details)

Uploaded CPython 3.12

reliq-0.0.45-cp312-cp312-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.12

reliq-0.0.45-cp312-cp312-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

reliq-0.0.45-cp312-cp312-macosx_13_0_x86_64.whl (120.6 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

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

Uploaded CPython 3.11Windows x86-64

reliq-0.0.45-cp311-cp311-manylinux2014_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.11

reliq-0.0.45-cp311-cp311-manylinux2014_armv7l.whl (120.7 kB view details)

Uploaded CPython 3.11

reliq-0.0.45-cp311-cp311-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.11

reliq-0.0.45-cp311-cp311-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

reliq-0.0.45-cp311-cp311-macosx_13_0_x86_64.whl (120.6 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

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

Uploaded CPython 3.10Windows x86-64

reliq-0.0.45-cp310-cp310-manylinux2014_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.10

reliq-0.0.45-cp310-cp310-manylinux2014_armv7l.whl (120.7 kB view details)

Uploaded CPython 3.10

reliq-0.0.45-cp310-cp310-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.10

reliq-0.0.45-cp310-cp310-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

reliq-0.0.45-cp310-cp310-macosx_13_0_x86_64.whl (120.6 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

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

Uploaded CPython 3.9Windows x86-64

reliq-0.0.45-cp39-cp39-manylinux2014_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.9

reliq-0.0.45-cp39-cp39-manylinux2014_armv7l.whl (120.7 kB view details)

Uploaded CPython 3.9

reliq-0.0.45-cp39-cp39-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.9

reliq-0.0.45-cp39-cp39-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

reliq-0.0.45-cp39-cp39-macosx_13_0_x86_64.whl (120.6 kB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

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

Uploaded CPython 3.8Windows x86-64

reliq-0.0.45-cp38-cp38-manylinux2014_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.8

reliq-0.0.45-cp38-cp38-manylinux2014_armv7l.whl (120.7 kB view details)

Uploaded CPython 3.8

reliq-0.0.45-cp38-cp38-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.8

reliq-0.0.45-cp38-cp38-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.8macOS 15.0+ ARM64

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

Uploaded CPython 3.8macOS 14.0+ ARM64

reliq-0.0.45-cp38-cp38-macosx_13_0_x86_64.whl (120.6 kB view details)

Uploaded CPython 3.8macOS 13.0+ x86-64

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

Uploaded CPython 3.7Windows x86-64

reliq-0.0.45-cp37-cp37-manylinux2014_x86_64.whl (151.2 kB view details)

Uploaded CPython 3.7

reliq-0.0.45-cp37-cp37-manylinux2014_armv7l.whl (120.7 kB view details)

Uploaded CPython 3.7

reliq-0.0.45-cp37-cp37-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.7

reliq-0.0.45-cp37-cp37-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.7macOS 15.0+ ARM64

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

Uploaded CPython 3.7macOS 14.0+ ARM64

reliq-0.0.45-cp37-cp37-macosx_13_0_x86_64.whl (120.6 kB view details)

Uploaded CPython 3.7macOS 13.0+ x86-64

File details

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

File metadata

  • Download URL: reliq-0.0.45.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for reliq-0.0.45.tar.gz
Algorithm Hash digest
SHA256 b44650e6ea0fe27e98cee7c069aeb70e0e20839ff2d6d83b3a8ab9d66bd5c1c6
MD5 0977b7154418fd36da3402612551ab33
BLAKE2b-256 80367fe31f4dc79d1224c1a766ca76f7e7fab16e0a92f73b3f6c2ef5d61d3287

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.45-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 349264188522adf52e51727a100f0dbf9dfd3d63555002e60f6b55993ac0d01a
MD5 6cd894b78697be1c87b05fb51a8be188
BLAKE2b-256 aeb756c852d177606673adb60a8e3ed3931be3cc6da89747bbfeb62ec457801f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 57887479883a9cbfcaf1feb760ff94a4753fa5d4b88b7005d41131e608672d2d
MD5 682f71b8945028e1a15c5614c7a0ed7d
BLAKE2b-256 6d0f3262e6ffbee1766f4ff3ac1e26fba33540b6b80366b6b8d60a11ce086046

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp313-cp313-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 7e14af66107cb2e6bfde5256e4dced45ac1342d25d3ca4a773ea292be7c15e3b
MD5 5e65a2c85414d79a45e48ab8f7b0ac44
BLAKE2b-256 d37169d51be131a0dd500ff4be038868a1a5631d493a0fdfeb969f2c5a09b4d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c6f4bd76591446eb037904ba5ed08399307972d00f1f119f45db0710cf0318fd
MD5 0bc09e6ca9483ee9d1e4a9c27101a1f4
BLAKE2b-256 8ca4d9395b612b841ce366e2c80a8176a63192dc699b43c869490fde7d3dbb13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f644adf0e478fbc52e4040a9156195a33c30d11797d75f60550e72cf43c2bebd
MD5 e55d1c5aa711761d95fd68e162856d05
BLAKE2b-256 aaf63df5899efc42eb66ab43aa16f654149d7f0e1187763b34863b48d7c102de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a3c761f5af317a7fdfc80ce18703eb06da82974ff999d131eb1bd7971d7c1003
MD5 5f7ebdd4b6f1284ddbc31f95bff49263
BLAKE2b-256 44f6cfe5bc90b2d33248000196b10607a0f6a365810373b811a4673ed399baa4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 7290806ccf51a3e423804862a5c379be938c8db3482a2995774dfed1252d5341
MD5 c3520d71c77cce55fdf70018d5c9ed84
BLAKE2b-256 eb7c410a21cd0fa4148a49a16fe7e16c07c5c4b971bb838de1bef3a123319fce

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.45-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 52f2a57806842d4d2798e70d526047fb0e8058662f5be2a4d55a5aa1db74981f
MD5 0608ade6874f274ffae9917e98c98c5c
BLAKE2b-256 281683ca07275a54b84b16e1e1dec9c7fe6c5f014243b28df9f44844eba1b1d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 47fdcfce94344fce755928cdd42656a58f178f04048d7268b32cf36625e81fc5
MD5 7dda2a1561564fe3925730ce1438d103
BLAKE2b-256 a8d07bccfc10f18b367965edc6b7069915fa29d1f819d2c10f18e58890d69653

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp312-cp312-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 767d5b69c1ca75adec912f90bc209aa064310e50bc7c06ce75d6486be55927fa
MD5 ce3629f1ce038e32c85719a234b10828
BLAKE2b-256 37f3a0571edf5d990891465224f16d354c39fa27572502dbc0e8a15e8bdc71e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5852f42d850c81fe7192f2574d259998319c40f8c6344a2b3b68aea9b1f76d49
MD5 4913fe7b30b8615b26c0758150742874
BLAKE2b-256 4dd59d649370b092d688bbdb25e7b72d0ca22e2ed5d0b5d256724df9e97d966c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e0f3ee35d8f69ff1881d23c0c39a4fcaf975dfb42eca04c93c9c95ff7a5edc86
MD5 38e462a6c030883f5ad58f986f792f76
BLAKE2b-256 13b9dbb08292b802063566d5473ef44d167182d3afdbeb6145507a6e9f59f966

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 54ba20d79d7a503b838af190ad6e6f49db83fbb344ffd07441622ac32a200e77
MD5 5dc43b93b16bb3cdabec4f2db9f281a0
BLAKE2b-256 59fd3bb2839ddd30a72c6aa459d3ae73292c83d6b7e11178adeb83ff35f439b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 0a90f01c43f4b1d5dda19cdf9b742e16683247affd3ed8be4c0d3e810efdc7fd
MD5 e9ff44d81e4324be47da4e16c5066985
BLAKE2b-256 893c5acfb70eca20c3089a16e2cc0fc9fb95404e9bf1fb2be2482e73966f5b9b

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.45-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 42005ae58d96a23ebe503b2bd317740bc860a1c6367ecf454d9e549cfeec5ecf
MD5 3eec50c15a6c340b43ef37ef81adc4e7
BLAKE2b-256 9f26bcb681b8259d1dcd295f6b9ad0266a8fb329d998296f67e119b79158b85e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9ad862a8b98f9d653932a0f6665fcb48787bcbf337fb4d6e46d94795a82b7eb
MD5 5a416d91feabd095ae0da899878c0499
BLAKE2b-256 e9d0d02c680b92c482d1f277612180196b453d7f15acaa51891adbe8dfafd93c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp311-cp311-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 825d648575327f8e8eeb7afe6512f2cb88fa40fb3193cce4e184902831ba2273
MD5 172692176cef008c5d7596d57862de11
BLAKE2b-256 145e6ba58cfc2bf1ab79cf7de8d72727bc2805cb50a78bc4935fab74eef891ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 406c8df6b0ddc071552663667e759be649cf1f94c171217b47fe36a48bd11a25
MD5 6c4d23e237bfc995c8ee1a33ca33c9b3
BLAKE2b-256 61d67e96f191ba471e2a04731f0a964536b00ffd355e39535d5de08e7eab73b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 624648be1a4ced647588ed037e77e909b8fc17683130c9deda4a82a43e03dd9a
MD5 5ef968718732a78ab158a5c6dcdc880e
BLAKE2b-256 a91a1c815cb6fd2d4817e8341c4131e7a871c529e6ea6bfe43c6402993bd040b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f9211bbf495e3f308241f762bc0a59948600da481d3082e2ebc4929eaac58aa7
MD5 54c7d5265bfa956c9c607dd8883d2e48
BLAKE2b-256 f7064cdd66100b75e7e02adaafa570300cd2bf08517b24d6f8a8f5adb81be5f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 421322970d74b3d1d17612da1a3dd20f7c3b6984be4f9a7528caad7d747f98e8
MD5 824e94ce83171a503769e37b7a94f3b8
BLAKE2b-256 dacd1c506d139fc4ecd4c445b72720a6778cdb4cd15833b94221243117204bc7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.45-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2ad6d50286bf961fce8b20079480247894a01598600be2caaa30db89e1a09832
MD5 c0861e1592cad914d21620e51d7e757d
BLAKE2b-256 9b0203aba1c2ab84359d361e87b4f59f4ed20fc4362da2562bbd79963526a116

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf8ec52af1d29838fdab6ab147b70c181278929604f5c543d4d5b2b80cea6a2a
MD5 a692efd26a8ca750b427da295ad13783
BLAKE2b-256 4e161f07b477930ac34618f4ce1760145b44444622ebc43b8b6cc68c7b2714d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp310-cp310-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 5c3e97ad16c91d08f4155ed445724d8490b05dc0b52e30dfcb33821df7392d87
MD5 c8cdb62ec6ad66a7674da8b8fe154e30
BLAKE2b-256 907369b65d965d8c6d2d692fa0ee2a1122027c4134ccbbdc3593096ac2c41ab7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 619a71496e02a016afc3697fff95fc16c1dd118bf0d60097c4f25761d4bba95e
MD5 dbc7aad2ceedf087c3ae309429b27594
BLAKE2b-256 540e38e56dabf66785db7c9beab49255b0d85aef57793a548ab8e39496d4cdc2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 90dc93ca11a13e635cb915164fd482d9e2b2d9d17d7875eb1a4b0b89aec16082
MD5 7576fc813e43e425c43bee8bdf154eea
BLAKE2b-256 53be8a34819aaa1a7a7ec6c512aea180f0ddffb4a8a28c29f50897e34c54ed67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a0a3339169434077d5f879f7267e40633295eaf5c5a55401cb3565ba52a1c3ac
MD5 13da8dc5ed0ab15e9fe6f5bd68d1f46a
BLAKE2b-256 1ad6a1bd1a22b4ea64cda5f6d890afbfa808243ee50516f56f39e468f58c1ac8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 a6b93686e731dfc43c92fd58ed188a5e69847a4e5adecc08824780a925d49cdc
MD5 9a138393a5b5512b64cb56bbcd8fe6db
BLAKE2b-256 b3d413e935a2cc377d9c6244493036d201d79333c22ca6edaa47b6a64846fe41

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.45-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 677653ba5591686552415af76cdba025c14bcb116b1d5c4cc93db0473f4147b5
MD5 2aab915cfb5695b19a152d71cf587800
BLAKE2b-256 66b2a7909c1f46e8c5994efc160e04a2116c8d656120e08f804ceedbc68a6474

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 963676af26d9e883977db8de5a384f10837624ba3e04ebea0de85268cbf2bf9e
MD5 a94b092f098152b83f6c80264e3ae05d
BLAKE2b-256 444100e4f543045f57f243330eb3c20b440b378f7e79b8560f303dc437bdd3ff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp39-cp39-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 6ef3652248190a2f3e749d5d826121b58fee3cd1226e22842792440338480beb
MD5 a60efb053492ef44c56bffd59a92b87a
BLAKE2b-256 9ad7ffd0d3377402c045d5891e06899f540112f5a19ed2032049f500efb10426

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f1726f5f3e5ebcd3585f107708b9c6997d5a955df0095c7025cf1b932b0d8bf0
MD5 fa3cc562f010c5593508bad9a435b07d
BLAKE2b-256 7390c3ab2f3d37283ea858d3a95b2bec33cd5abf247c846268a9783855acfbb3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 ee1d6e55baeb8fa53f35995d69ec8e3bc408f5c841241e5c253a9e2f9326e3bd
MD5 b4debd56922d47553eb377cbeaf8d240
BLAKE2b-256 9ccd5fd89fabb66a55e25880a03f82aed3e3c929bab69c683cb938f6c7bcba62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7ccbfc48a851268cf5d9a60054fa3035ff5bbd3c17f5176f5bca2fbe6f34f91c
MD5 b765ccf811869a5b4719af78a59ce6ee
BLAKE2b-256 6dca3d6feec428ddcd72eb95dc851710d3ec07cea4ca8e5dc6b0b0ea4ce0eb25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 a74f5c0d313b5a0fe21ce4df29786004f96b966120c3ba4e71db080478a2b62c
MD5 c0e66b629ee5472fafd214cdc4763b67
BLAKE2b-256 293b60817a7ad5a3113b9d4fda5c1ef47abf114a0566f959962be34f16cc220a

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.45-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 58bdac387f22b5db0be78cb781750ce4eb6f18c2682ed676b3b5b58674e5a33f
MD5 a18a50e14e5a4133944b1d75eb32f082
BLAKE2b-256 180f9f4137c5d4ad6a273f6ca865e3287b82c8d223d8fbbed7894aef11b4f416

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bd57078ec134bb5301016eec6acb73c806cd42f2289eefb70aa8f9dff09d6b29
MD5 30d15e148ac4d3ddc4742e1936ef9e52
BLAKE2b-256 7aad52edd5a5176c8fae134cc6659ea9811b4edc1415d34ee9f2c9edca20e11e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp38-cp38-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 1ffb2d9033dd0a383ec66b0de021a868ace4be22842d3926ac73ad6336f84278
MD5 608b2890f8c0fceb2c710cb8255c1d27
BLAKE2b-256 83ad3280747b3d42f6f2765afbc1edaf2dbd3b92f7a4103a7e88eb5be1a967e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc012ff553744dfbd7da5d81a73efca7368892431eea977220b09db3741e5808
MD5 d1c96ef3be3016a556a7760ca1c9c4f7
BLAKE2b-256 f8220db308481f7e8e2994dee211e84642dc0f6eed97419a25de24f31aa09a75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp38-cp38-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 de97e587015a2c7878344ca9776f9ff43625b5b7e197a30a12d0e9d719e47531
MD5 93a8dccd2d62c6e10edc2f170904553f
BLAKE2b-256 caac07752dda9f03af9887b399974c448c87a6ccf2128727cd9e3fa56337eaaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d52032bb50a2b2cdc96ed9478315f9dbdbbbaa6f0896c9e79f2637b3b94ddcb0
MD5 2737c7fc2e53352d452181bc90f04e98
BLAKE2b-256 3e9bf9d9652d5eca6882ce60cb46180909d91087d06f0862b01a2d364a093de3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ee1f2e7702a5c0ad6c874fc901cffb1a4a02e74d70321e925412e10921393e16
MD5 8d94e2617ea98f4d76a3b09a529f713a
BLAKE2b-256 f055706ac7217ca45cad0fef0bc3e3a0bffbdb79691bbd83674d73f27995c320

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.45-cp37-cp37-win_amd64.whl
Algorithm Hash digest
SHA256 43a4f438331d2dc7437084f988d4989cdbab938a8b342ac6999372d27caba52d
MD5 9359569a575c16ef5328a64b89dff48a
BLAKE2b-256 2c46351f2f9e2810899189006013de48a0ff13580fca70878a16d1c05d73641a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp37-cp37-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eab8a64f5897dd0bae8995f67592c29ee337fbbe241d4147350fcaff6fb53895
MD5 779f669b06140710238aecee28e07367
BLAKE2b-256 36eff290c1eaa47a56432951493147fa571a36d1ae943201791aeb4ada18adf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp37-cp37-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 127fca5ac8b3d191c24a32fe84c0027890810e850a94cb2c31ff904619d97f30
MD5 9c8339810e85ad93c99890dbeb7f3856
BLAKE2b-256 74f5cffff4e95ad3689218c39d29a3be012bf37319d634d4d4801da527f582eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp37-cp37-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5a3e56e750ae5ccc19ca810a67a6be9c65b5589ec7b7690d42ede5c900e74939
MD5 dcc24e4b8247f745cd4e3e0be93917fe
BLAKE2b-256 e4ebc5026df4fc3a16a14d8315975010af92471631b775828d6cc07b48ebb65b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp37-cp37-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 918a7514fbe019e98beb6a26acbc76ed185a0f3daacfec65669b25764087bc4f
MD5 f77ad53253fe2776493fcb7f0726ee89
BLAKE2b-256 d97b05aae2c6a62ce9bc0ad36e3e75d69f884d645765077cded9753c2c873063

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp37-cp37-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 004ee7db47c377ec659cbbf5d89f1c6e30ad16fc4cefb8d48c9f359ba5e2b29a
MD5 53b18e187aad2c4a2b03b2231a781eb3
BLAKE2b-256 21daaa645a265cf27f9fddad67da9fbc8ecb3200d221057e8e8380fb4af401c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.45-cp37-cp37-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 672800fc8485fb22ab289c287909164fb9c3da16485e7543e4f30e2cec7a4e38
MD5 aa3bb88d850a2645215cccdb952ba735
BLAKE2b-256 5049247a847f750194febe02ee0ac3a487c9bb864589f2a4c0b2a011d853fd46

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