Skip to main content

Python ctypes bindings for reliq

Project description

reliq-python

A python bindings for reliq library.

Installation

pip install reliq

Benchmark

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

Parsing

bs4: 121.615s
html5_parser: 22.424s
lxml: 4.955s
modest: 2.901s
lexbor: 1.200s
reliq: 0.310s

Collective memory usage of parsed trees

bs4: 2234MB
lexbor: 1666MB
modest: 1602MB
lxml: 1274MB
html5_parser: 1262MB
reliq: 58MB

Parsing and processing

bs4: 230.661s
html5_parser: 31.138s
lxml: 14.010s
modest: 4.291s
reliq: 2.974s
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.child_count < 3 and first_child.name == "div" and first_child.starttag == '<div>':
        continue

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

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

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

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

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

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

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

Import

Most is contained inside reliq class

from reliq import reliq, RQ

Initialization

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

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

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

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

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

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

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

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

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

Types

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

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

empty

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

unknown

Similar to empty but should never happen

struct

Returned by successful initialization e.g.

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

list

Returned by reliq.filter() that succeeds

single

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

The type itself is a grouping of more specific types:

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

get_data(raw=False) -> str|bytes

Returns the same html from which the object was compiled.

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

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

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

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

special methods

__bytes__ and __str__

Full string representation of current object

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

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

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

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

str(reliq()) # empty
# ''

__getitem__

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

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

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

first[1] # single
# <b>

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

r[2] == first[1]

__len__

Amount of objects returned from __getitem__

ref and ref_raw

ref -> str

ref_raw -> bytes

They return saved reference url at initialization.

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

properties of single

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

lvl -> int level in html structure

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

position -> int position in html structure

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

Calling some properties makes sense only for certain types.

tag

tag_count -> int count of tags

text_count -> int count of text

comment_count -> int count of comments

desc_count -> int count of descendants

attribl -> int number of attributes


attrib -> dict dictionary of attributes


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

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

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

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

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

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

text -> Optional[str] text of children

text_recursive -> Optional[str] text of descendants

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

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

ul.name
# 'ul'

ul.name_raw
# b'ul'

ul.lvl
# 1

li1.lvl
# 3

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

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

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

comment

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

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

c.insides
# ' Comment '

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

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

text

Text can only be converted to string

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

str(t)
# 'Example'

axes

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

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

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

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

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

everything

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

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

self

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

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

# rq is a reliq.Type.struct object

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

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

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

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

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

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

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

len(body.self())
# 1

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

children

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

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

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

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

descendants

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

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

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

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

full

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

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

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

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

parent

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

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

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

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

rparent

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

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

ancestors

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

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

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

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

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

before

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

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

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

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

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

preceding

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

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

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

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

after

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

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

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

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

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

subsequent

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

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

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

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

siblings_preceding

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

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

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

# single
h2 = rq[1][1]

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

# single
ul = rq[1][2]

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

siblings_subsequent

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

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

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

# single
h2 = rq[1][1]

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

# single
ul = rq[1][2]

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

siblings

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

expr

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

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

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

# bytes
reliq.expr(rb'li')

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

search

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

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

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

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

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

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

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

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

json

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

filter

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

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

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

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

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

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

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

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

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

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

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

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

Encoding and decoding html entities

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

URLS

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

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

Errors

All errors are instances of reliq.Error.

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

reliq.HtmlError is raised when html structure exceeds limits.

reliq.ScriptError is raised when incorrect script is compiled.

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

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

Relativity

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

reliq.filter() always keeps the relativity.

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

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

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

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

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

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

li.lvl
# 3
li_rel.lvl
# 3

li.rlvl
# 3
li_rel.rlvl
# 2

li.position
# 10
li_rel.position
# 10

li.rposition
# 10
li_rel.rposition
# 9

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

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

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

Project wrapper

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

from reliq import RQ

reliq = RQ(cached=True)

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

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

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

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

Projects using reliq in python

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reliq-0.0.42.tar.gz (35.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.42-cp313-cp313-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.13Windows x86-64

reliq-0.0.42-cp313-cp313-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.13

reliq-0.0.42-cp313-cp313-manylinux2014_armv7l.whl (120.0 kB view details)

Uploaded CPython 3.13

reliq-0.0.42-cp313-cp313-manylinux2014_aarch64.whl (146.9 kB view details)

Uploaded CPython 3.13

reliq-0.0.42-cp313-cp313-macosx_14_0_arm64.whl (115.2 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

reliq-0.0.42-cp313-cp313-macosx_13_0_arm64.whl (121.1 kB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64

reliq-0.0.42-cp312-cp312-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.12Windows x86-64

reliq-0.0.42-cp312-cp312-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.12

reliq-0.0.42-cp312-cp312-manylinux2014_armv7l.whl (120.0 kB view details)

Uploaded CPython 3.12

reliq-0.0.42-cp312-cp312-manylinux2014_aarch64.whl (146.9 kB view details)

Uploaded CPython 3.12

reliq-0.0.42-cp312-cp312-macosx_14_0_arm64.whl (115.2 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

reliq-0.0.42-cp312-cp312-macosx_13_0_arm64.whl (121.1 kB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

reliq-0.0.42-cp312-cp312-android_21_arm64_v8a.whl (146.8 kB view details)

Uploaded Android API level 21+ ARM64 v8aCPython 3.12

reliq-0.0.42-cp311-cp311-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.11Windows x86-64

reliq-0.0.42-cp311-cp311-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.11

reliq-0.0.42-cp311-cp311-manylinux2014_armv7l.whl (120.0 kB view details)

Uploaded CPython 3.11

reliq-0.0.42-cp311-cp311-manylinux2014_aarch64.whl (146.9 kB view details)

Uploaded CPython 3.11

reliq-0.0.42-cp311-cp311-macosx_14_0_arm64.whl (115.2 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

reliq-0.0.42-cp311-cp311-macosx_13_0_arm64.whl (121.1 kB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

reliq-0.0.42-cp310-cp310-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.10Windows x86-64

reliq-0.0.42-cp310-cp310-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.10

reliq-0.0.42-cp310-cp310-manylinux2014_armv7l.whl (120.0 kB view details)

Uploaded CPython 3.10

reliq-0.0.42-cp310-cp310-manylinux2014_aarch64.whl (146.9 kB view details)

Uploaded CPython 3.10

reliq-0.0.42-cp310-cp310-macosx_14_0_arm64.whl (115.2 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

reliq-0.0.42-cp310-cp310-macosx_13_0_arm64.whl (121.1 kB view details)

Uploaded CPython 3.10macOS 13.0+ ARM64

reliq-0.0.42-cp39-cp39-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.9Windows x86-64

reliq-0.0.42-cp39-cp39-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.9

reliq-0.0.42-cp39-cp39-manylinux2014_armv7l.whl (120.0 kB view details)

Uploaded CPython 3.9

reliq-0.0.42-cp39-cp39-manylinux2014_aarch64.whl (146.9 kB view details)

Uploaded CPython 3.9

reliq-0.0.42-cp39-cp39-macosx_14_0_arm64.whl (115.2 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

reliq-0.0.42-cp39-cp39-macosx_13_0_arm64.whl (121.1 kB view details)

Uploaded CPython 3.9macOS 13.0+ ARM64

reliq-0.0.42-cp38-cp38-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.8Windows x86-64

reliq-0.0.42-cp38-cp38-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.8

reliq-0.0.42-cp38-cp38-manylinux2014_armv7l.whl (120.0 kB view details)

Uploaded CPython 3.8

reliq-0.0.42-cp38-cp38-manylinux2014_aarch64.whl (146.9 kB view details)

Uploaded CPython 3.8

reliq-0.0.42-cp38-cp38-macosx_14_0_arm64.whl (115.2 kB view details)

Uploaded CPython 3.8macOS 14.0+ ARM64

reliq-0.0.42-cp38-cp38-macosx_13_0_arm64.whl (121.1 kB view details)

Uploaded CPython 3.8macOS 13.0+ ARM64

reliq-0.0.42-cp37-cp37-win_amd64.whl (181.9 kB view details)

Uploaded CPython 3.7Windows x86-64

reliq-0.0.42-cp37-cp37-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.7

reliq-0.0.42-cp37-cp37-manylinux2014_armv7l.whl (120.0 kB view details)

Uploaded CPython 3.7

reliq-0.0.42-cp37-cp37-manylinux2014_aarch64.whl (146.9 kB view details)

Uploaded CPython 3.7

reliq-0.0.42-cp37-cp37-macosx_14_0_arm64.whl (115.2 kB view details)

Uploaded CPython 3.7macOS 14.0+ ARM64

reliq-0.0.42-cp37-cp37-macosx_13_0_arm64.whl (121.1 kB view details)

Uploaded CPython 3.7macOS 13.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42.tar.gz
Algorithm Hash digest
SHA256 de4dff166b03f494ced87e7217580d6b7efd27e431d946e0c7faf9854f17e831
MD5 80f2437a51423dae37cd4d74b4646de8
BLAKE2b-256 517ebb48680d097707e3551fa5b69d5bc9077797647cc84797b39562eb363d06

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e69f15c652751babb543ee7a0dfc31132052cb303767752a5cb525fc724c3bc0
MD5 c3c0d5b7f4416bd756c8eda32c8fa489
BLAKE2b-256 19a17588b7b45e6bb42dd378dd73d77afe57a33c55214a2cc8f966f8384d13a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b06182d7ebe5bc3989f8492532b06cc033e2df8764e53fc7945d58ea430cc6ce
MD5 274d16cff5e4d0721f062b297864dfab
BLAKE2b-256 d8b1e2b6d543298492d81fcc8645224cd50b16faefb73a49995f6f59f82c5734

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp313-cp313-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 4d86e91df7c1d01a1790f96130c3a88d2639782b4acbdbfec31ea10563001a0b
MD5 ffc0b1fcf6ccd03d5dd40e53a29ddf97
BLAKE2b-256 41ce8c78e73126cc16793519d9cf3b755eb8617aadc21aa1fbc4b16a4f296116

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 000c524c1870119b2c03fb4991fac8bb19e004e471c2a60deef92e5558ebdeb2
MD5 3de9f16794f21b9b73e0ed613214692c
BLAKE2b-256 6fa1ac7cbf8552f1e31ca9ef76d1d7b474ad2e6d3dc00cab4350f6fe7f0aa262

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 db52be0160b3eee9aa247d5944eb9c9f42c44ebc9b9b5fb2f10a2283d3355801
MD5 ad34bdf93705bd75109b92a60c5db67d
BLAKE2b-256 980f20e78c86dd95741c7ca36a790c1beaf26b3c224580bb53a384fdb6e9c8a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp313-cp313-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 87fcfe04f94133e25af05d2ab365155dbcc2b62b6b22728df95aee152fa1e1d2
MD5 33ab4865099ee5e442070f2d2cc20183
BLAKE2b-256 8a7d30a8dd0be0858be30f404c8a89b34d0d7ad9f12ab5a9dd19d216ccad080d

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ba332fa7804aba8335e78cb6b19c5a9482da21e5d38af54b685cc2b8fe7ece5f
MD5 8c22cbf11aecedfadaf88f59bfaadf06
BLAKE2b-256 4fabb8519d2bc32635d622b91a595e1a686c3715ccbebd1045ff7297ef96836f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 014ca42fd633931cc9eaadf0794fa4a1207b470c3822e6a850a1229748f63311
MD5 49279faeff7217085e44582db2237205
BLAKE2b-256 0619642fe2fa6c135bb77beef640517be607f2e56f55b6db26df7901c14bb77f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp312-cp312-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0497b283d1736e27ce258b7d1bb7db104c569336e4caf1fe38590f7a7b8fbb2b
MD5 d3e5c557ba8d0066fd5d11c7f520d5f2
BLAKE2b-256 1bf0b9000a4f1861db6feadc79177049b6930a916752214549a35ec5b7ea01ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 80063dd39a6eb62dd54107928dc544ad9b4a9aca56bd3566c6b17ec3e0bc35c9
MD5 a0ed82cd37513715af6c72781cfe75fa
BLAKE2b-256 7345dda17e39161f4297e03e19432a332856556abcc6bad8ff223ca450ba7cae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1d1c250f6926c5e6769ace59e452ccedd1b285d91f2cea085b0f56dfd02c3849
MD5 199d2301b58ab5487ece264240753bcc
BLAKE2b-256 2913017609ba2a788839876d9dea22f5e113814c1b3f8a446136affa29966e3a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 b6463e3fd0a1dca3ad05e929f25f71cf19c917073ca0937b20044d98f3e31b6a
MD5 b4ad4dfadfd3489aceeaed05ffe02934
BLAKE2b-256 d31e4fdcd6336c491683dfcbcd479054cf3058a586ac7d282582ac9f9f966ab1

See more details on using hashes here.

File details

Details for the file reliq-0.0.42-cp312-cp312-android_21_arm64_v8a.whl.

File metadata

File hashes

Hashes for reliq-0.0.42-cp312-cp312-android_21_arm64_v8a.whl
Algorithm Hash digest
SHA256 936cb88836c35a35d7d5a3503ad000cfd0de45839167984462bb01117ca34fbf
MD5 f3f9e2185618650cd5c5b3e487a58f7d
BLAKE2b-256 01bcd0e36613594dcf07dc00162ff950c69994da0baba65b0aa9a6d5cf841a62

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 15e15d3f0796dc9d5785eb782ac8c73a3832bfd2ad2c67fe34de38fe17b8fdda
MD5 2ca1b96b828cce3d632b9eee48fb7a02
BLAKE2b-256 c0e380d2ce08499a9bd70891372de02e97ad78fdf09fcafd904f40733dc60c58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0ca98e7b955d127f9a0ab6e38ca7c4d62c51126d54d856a5aef006267ee85192
MD5 832f377fd749f06d72f0c9c74b1cb0d7
BLAKE2b-256 4a58da61f1fa77e82c6aead659e8a9fdd425e22be7e3fe59cb107fef6bc75893

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp311-cp311-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 eb8d4c0f98c7b6c7cb110edcda726f1292a930a129d9a0d2b689483d54923016
MD5 ad0a7bbc4c5e971328684cbcb52488af
BLAKE2b-256 ec18a59d94055e0c9a47ab6a8cadff9b7c28b02e2bf92b9f28bef035c1d6a066

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 be768019ed88429d3b5e0d27a2db3a0288be12a489cfa68776bc36df203c452c
MD5 508b6e0a05c464cfba91a408f9bbc0cc
BLAKE2b-256 699b60fefe0493460ed48ae90a85f90c039d724919b1c5b6f9ed6a19a3012c92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 56e36a22fe4e2edbdeddf49679f0eb26cfe4b9326161b6b7e5ba4bfbeacffe44
MD5 59cbc16678db975cce8a296c8b7a47ec
BLAKE2b-256 82b43ddb684855373f244027648134b4c0bc095516558203e380900a334d7351

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 4366d0af1af349c93817ab90f7c2a487a77cd441c287a03f15917fd8c38cb99b
MD5 cbf63e3793fe61da326f722723a8c809
BLAKE2b-256 80ffaf7ba0175b8d3293ec42d69112fc62358a092c0717f30b30e0268937f9c1

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 adc6ed435d680595cb50f399f402d727b2feb4450828c0fcfce9bf12498a6a13
MD5 b719247c76381eb4c50f0e7c6467f0ed
BLAKE2b-256 61925a200a0813f9612f3165ce32998b2ff90089a287a918073583813ba1efd5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc9e154d76e4a77eefb3693f328e5a4b84d9ebf56c9515d8f97d8f8b921baa74
MD5 d1ac160fe67541a5c6385220fb40c6e6
BLAKE2b-256 6485ca4ca52e773b04fd16917eb07431b9ffe15c25a8966019693fc283cb0641

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp310-cp310-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 82527d996a823fc9e6782d238e08ee8a9609e2680333ba2c762b8362e5ca8fad
MD5 5f071edca3121097a91c80039aa1242d
BLAKE2b-256 f4739513e315c654f001e300e19259abb12f0121989e9a19d6c574744ffcbf7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5556ef58f6d39880a6c744c58d736198c7e2a13d75f455e60463bfd5526d25e1
MD5 646a1cb0b2814ad9040089fc0ff129eb
BLAKE2b-256 5d95ae3735e9d4c1b9562bebea39a4d9caa2d187a80aa83f8fad7bbd23ac28b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 90f1c92cec3a169269004e20155987022211dd267639322b415af9739fe90434
MD5 782d1060e4e46b38d4226e42a3093994
BLAKE2b-256 f8681e20f88f75fa45bf6faf84a8f697c213a5a79a20eb268271572b3ce7a2ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 844357c9e55c2c1374e5569af212be872010ce9d70dcb597a4fd5881b7e5d6e8
MD5 f46e6feebb8aab00d8f2fefd7f1e8e28
BLAKE2b-256 29f1e566730d666aec372c419be2d4396c69b5c373996a3e56d5a6530f2bf796

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b817595f41e2826888b34fe7abe543125b52e241e1d7ed76c2191e2b25f5afb8
MD5 306e26efc9f16c5249c410fbc77aabdb
BLAKE2b-256 ab71a44967e134337f3a960ee45ef7c1058bd9e10f45bd8866399ff8645b75e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 014e9bc59814d594d2d1828ce097acbe9621bf9e759c8d127b94abcfc8293f11
MD5 396ea324319181216b8411646fc3875b
BLAKE2b-256 313bd0cd92914377e628a447bd8ed7d0187af269c9e2d8eab62da18aee2cc7b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp39-cp39-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 c98d3c8ede2adaad8d8efdedf28b6a97369a2fbc3502ddf614d0904376d837ec
MD5 4d596db38b59967b440d1ab1c6098d7d
BLAKE2b-256 2b20aaa78dec7aa4b23735e2aafd610403f8ce7897a1fafcaa3435502c3e9752

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1839f43a78eb1492def7ed34471a804b8a31ad742c365288f6c3631172b6d3a8
MD5 4c857db6397c5c0c063f4063128cc052
BLAKE2b-256 5b6b67c815bc415d0588841414be578c6b3af33651edf78549d0afa13827c4dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 1a8dad40b8e71b6a07970b07c1abd75c0e7ef5b222ea775104049205722d691b
MD5 46c04deca7a380cd7627176f2f7a1c14
BLAKE2b-256 7992616d8275308eecf29b8450a0c58ad921d450c67d9bc5fd43b2259d19c678

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 f4b0eee7e2bb769ddfb05c545dc95041560d0e86c6852d8b606f970a12e00b9e
MD5 5ae437379f6e0e4c1fc7d0fab5887ad4
BLAKE2b-256 5da43f25057aca5463b75521083330d8818ac0d6002a95c049954881b9ec3b84

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 7605a340c929ec8c0ac7083542455a31268308d2559297560d679cf646ac2a55
MD5 fd38d30a8ef8e55da69f219dcc49c39d
BLAKE2b-256 5fcd4f824c85b39b5bc693b76edc10d413e35631b6ccc6cfcb604ab9f6dfc6db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 32380f79323e28c5ae594449b78f00cfe2d1bb2c60580e21c2560473125ad329
MD5 b41a1063384be67671d2a5c61655fa62
BLAKE2b-256 44e61a1fd44b8bc38a6a17613f16b05b71e7f5d14e9e087d65f18a5f45168025

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp38-cp38-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 fa4e76fcbe3493a9cd5126dd9edad15038bcaa590a625de36fdcff355a8a90cf
MD5 cc656cd76bc6147d18139c04663acfa5
BLAKE2b-256 e4bbcea856f7bf19f74dd795bb39b99807356100f83f02d8ea1c74a58a7f6140

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 777bdf49334e9d63f0031fd550359e892f94def8df77319b6dc52a0768b8ed10
MD5 3f3bb13d96e43411aac81cce7b06bdd4
BLAKE2b-256 a2c27eb52b48bdb0f647d82c3fb9486ea50f0bab83c2556f8caece0c693f39c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 91538e64268182109202b5abbcc9802d6aeedd21b429c31042acdfde7846dd85
MD5 d87b28459ccd8b9bb95512b2287b7377
BLAKE2b-256 861db60dfc79a18cfe93ef945963d25e655ace8a1963fe9cbba853777b9c11bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp38-cp38-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 251cdda22f643f8a9908447703170988b731c1576966073ead037df7e55aa276
MD5 d15277b6683a58b03dcc653024fe327e
BLAKE2b-256 62755f9fee17b97f8a24125878a5f4fa667dcf72cc4a9f44f7e5e83b37177410

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.42-cp37-cp37-win_amd64.whl
Algorithm Hash digest
SHA256 64ec426e305278bb2fafe0b18616a4d06a91d4555e023fbe67930eb13c245b53
MD5 3c2f42d25288a885806bb26146b3ecf7
BLAKE2b-256 e73619fc0df562b142472cf6e814cdc7b52bafd211f98dddb6c893b61963f438

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp37-cp37-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ea7b85b3c5daa6213addec8b0f632b0d0176fea27e8b0415502c2125ed3a0ae1
MD5 73d47334cde8f6b456d88b8d0e2502c8
BLAKE2b-256 e9f69e6126cf6b3d557a8c7f0c656450112fc989c6d3ddfb85ceecbccce0ad0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp37-cp37-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 24647baf7e8fac54b61237059c63ee6a457a22496de8684de6a851f70a1a236b
MD5 066d495d7a3d20caaec77998f1dce5cf
BLAKE2b-256 fd4adaf6707de7637cbfd52e2b0cdecd67da9b82118af42a55901d9dec6f0778

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp37-cp37-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0047786b17655abcbf96852eb8330dac63eae61c436943ea9fc483c1d71f189e
MD5 233dfbe381cb682020fbedf77ef93ca0
BLAKE2b-256 5e470902a1f056e8128f3dc85df8060a835be13a0d0ecdd7403069a24eae66c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp37-cp37-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d8543adff0766cc84893075544a4525473b0cd6ccfd08243e714212f581ba527
MD5 ea385a62011f3be29b60baba55e0ac55
BLAKE2b-256 74e26a2ac5ae665fc79139f02250aa526ecefbf74bebb79759afb4799b0aa1ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.42-cp37-cp37-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 49cef58f7242528188bde92504f9a2f8cf86715fac3db477d845623754b78822
MD5 07383be465e9c5306a0611be9ce000c4
BLAKE2b-256 2e9a0b3464bee5655bfbe59314fda45f49c893bb89a479934da3886e33fd5900

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