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.46.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.46-cp313-cp313-win_amd64.whl (181.0 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13

reliq-0.0.46-cp313-cp313-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.13

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

Uploaded CPython 3.13

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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

reliq-0.0.46-cp313-cp313-macosx_13_0_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12

reliq-0.0.46-cp312-cp312-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.12

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

Uploaded CPython 3.12

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

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

reliq-0.0.46-cp312-cp312-macosx_13_0_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11

reliq-0.0.46-cp311-cp311-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.11

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

Uploaded CPython 3.11

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

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

reliq-0.0.46-cp311-cp311-macosx_13_0_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10

reliq-0.0.46-cp310-cp310-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.10

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

Uploaded CPython 3.10

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

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

reliq-0.0.46-cp310-cp310-macosx_13_0_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9

reliq-0.0.46-cp39-cp39-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.9

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

Uploaded CPython 3.9

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

Uploaded CPython 3.9macOS 15.0+ ARM64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

reliq-0.0.46-cp39-cp39-macosx_13_0_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

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

Uploaded CPython 3.8Windows x86-64

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

Uploaded CPython 3.8

reliq-0.0.46-cp38-cp38-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.8

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

Uploaded CPython 3.8

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

Uploaded CPython 3.8macOS 15.0+ ARM64

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

Uploaded CPython 3.8macOS 14.0+ ARM64

reliq-0.0.46-cp38-cp38-macosx_13_0_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.8macOS 13.0+ x86-64

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

Uploaded CPython 3.7Windows x86-64

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

Uploaded CPython 3.7

reliq-0.0.46-cp37-cp37-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.7

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

Uploaded CPython 3.7

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

Uploaded CPython 3.7macOS 15.0+ ARM64

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

Uploaded CPython 3.7macOS 14.0+ ARM64

reliq-0.0.46-cp37-cp37-macosx_13_0_x86_64.whl (120.5 kB view details)

Uploaded CPython 3.7macOS 13.0+ x86-64

File details

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

File metadata

  • Download URL: reliq-0.0.46.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.46.tar.gz
Algorithm Hash digest
SHA256 a69f4ed444c466fc356c9d4389982c62a3ceeab223bf244240cb3c482605a1a7
MD5 9a35b4d3f774607985f09d835d2f1ac3
BLAKE2b-256 405a649f5fcbb7086fe36460e28c6f4c70f7f5d784dff75ef6e14ba2dffdcb07

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.46-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.46-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ab6b2d3dcfe5ca1ad295b475d839ef6b1bb092a43e5df4f08c41714dda6989ed
MD5 2e3535f4279bad9e693e407fcf33cdc8
BLAKE2b-256 582159c0a97c2e357acf7bc83e93d54310b4bf9969556dbcb2d47111ee5e960c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5e28ecd12f383b3407f827b6af4869d00d8b77fe057973d9af17854b17ae5650
MD5 abfc2d17d1c325e145e7b78cb5b97ab7
BLAKE2b-256 4c02ecebd59277f5bf62dc2d5883256ae495e2b49f97f6db04c75a84685ff56b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp313-cp313-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f74a76187473c70897c73879248bb608aa9745f2772fac0e2124ebde065fe1a5
MD5 b9a45292b5858cf4fd18b3d26c71fa64
BLAKE2b-256 3618a662560a803499bb39c5b42067b66b7593fa84e7bcdda84f8e446cdc1904

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5afce841aae946872d0e5d8031781f94f381b497105349038eac25d673d5f44d
MD5 47615015690fa2cb2c4085be9242674e
BLAKE2b-256 5c3ec195d107e0c82c911e16c203f95cd0bee86b6420e2c589a37226c45678f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 131e4f7141137294fb3d07b96455e873a518c22de6909c8d13da706716d7d68e
MD5 ebc03884fd6f73af134ef832457d6ab4
BLAKE2b-256 ebe8261806ee37aa77e05430d1f16eafbef51cfa14b9274110436402b6aa18dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 07f77384802de069c8379331f6020b25a61561704532714e75d7cf556769e784
MD5 e76373988673dd6b31691f4c2bd253e7
BLAKE2b-256 6a73a22baf1ae7ba2cb6adbd8a13b7078f704818393a215b13a7028c6e3df0a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 6f232087dd75ddc6ee11e3540087cf478ab401201997c742cc57567e6487d980
MD5 54d00cae152f683fc4ebfe46cadb4936
BLAKE2b-256 68fe5523d546e89e1f2be8febe29b09876b6e37b3e59dd9c35495df045bd226e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.46-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.46-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fed8e82f2e34940a2f2ff7f98c65ccc71f61f81a96f41961f43f7cef49383f3b
MD5 b0df6049fe1db6ede86c5ddc8f94df29
BLAKE2b-256 7dac25a496ecc5c5f2a71d8a07914bcd11f7fff00066f369ae386a5090162ddb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0d781720b31846aa997960a1e4b10e07295881fcb089a15e9534714398eee831
MD5 a9b4946908266357e68850c890590e6d
BLAKE2b-256 082650631f9e46e21947837a957ba485eae28fc43b9c3473d21c9729c25229f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp312-cp312-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 8fb30e81c40295e7379f3fdb930ae7a25046ffaf4a3db0d32535cd882b751126
MD5 fc92a79e08014a71ed066f0a25ef3a42
BLAKE2b-256 010191f78db2f489297b119ef8ef56ab0a514a5afd679b2212c0c9f9f17e6726

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 030efac43f4bd5bae1469eb68c0ac26e041416d7f6f9a41c7d58948114fb5e77
MD5 80f2983cb1bfa216bef9e8790e367185
BLAKE2b-256 5f9d4c04cdcb4dc093b290944758f33f8e9ccf53b8ca6414384943b02d09d1f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6daf89c2e29f3b99c8bcae812c58363b514923b496590c1f293993c3da882e78
MD5 1bb4b814dbb674ca2b91f8e084cce04b
BLAKE2b-256 302e0e7c1f46e244bb980af7439f270d4f02f750f8a65ea501396ae70f6deccf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6a1ff6ee08677e74ae731603c1ec008a1c7227600d18195d511f95970d65fb2d
MD5 711ce478ee584baf3b6062286891aeee
BLAKE2b-256 08040a196fe6ebc75848ecfb182e41d4965ccc5a9c9a8876a8c5dcac9fc15f23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 56c1c5ea76ed63d9cdb34971374709e32585c8be63dc62d0fcd77c889947fa4c
MD5 4567b644f2ace5103fa3c8689d660e47
BLAKE2b-256 7d73a38f38385191ba885202a977f6b10c3a82609adf25c5364451ca4034034e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.46-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.46-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4f11672857a39982d664547f8d9593d42bf892c7fa6f23b8c5e5fbe35c52dfa4
MD5 f385b43beae6fd5ba54284918c027891
BLAKE2b-256 8eddf8e2d70ecbbc3146bd7947a4b8ae8e0d0a47c4dda6ba31cfff767c73eeff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7885e1e6238caeb3e9fab81cf21b9007088b4aed853d3818959a1043ccd4c4a7
MD5 9072d290dfe8c686b926b3a928822f9b
BLAKE2b-256 2d9048f36302fbd0a90a0a18041501c540e7a78035595a64c4d0a139fd018db7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp311-cp311-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 122a4cd16e4d195489fead675dcf04b251b627c627429fa0cb100cf4a7a70a64
MD5 cb06725c13ab2ab87e8e13e6fafaaa2a
BLAKE2b-256 9d7127e6c21dff60fdb9836a378f6ea3143311df5150ef7254fb155b6511cd1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c7a830ac818c71f71e7ee22589216e08e0c37179452a3a8db25764ea689f3618
MD5 f538252c339061a323ebe5cc7eb0c04d
BLAKE2b-256 924e997251e261e7a2f450d9920da9aa89a632dd0f71a46bb2607f17f6c07eaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6b30e219b9ea9c0c8738aa71e21c6418ee001819bee3c4831b22f5c3c7153c8a
MD5 8695fa66ba9a7b689468965d6f9e9d81
BLAKE2b-256 05d8e8855187a87baca32fe0586a020e78c0916d75736d7fe87a0822dd5b1c9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f36993c795f8ffdb66b1b379a9447ab6a7228a315a431ef4d381448dd6015b44
MD5 d159b5be61c827129b117d327b8d26ab
BLAKE2b-256 03be977d80f46e988071231223c700e8c2502743b73718fb4a0c580564c7a176

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c77bc46bffc2dc3dcb12c94b5ed01f8c583e50461c916a3fcb5d8fd19a988d52
MD5 c1c2efee2af266f68f6825fba23b3e11
BLAKE2b-256 3d6fa4d9db1fbc819d7007cd97dab9f32316e93ff7d902d48f01472b05839231

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.46-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.46-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 19da9272e65e57545976843adf306cec2c8033575cbcdd5625d7579617b1a685
MD5 88f11fbd5dbde0b094a4b2eab3ded155
BLAKE2b-256 995afedf56e994d75ea5dd1bcd7583beace739cef8c959cdfbbbf22563ba0dbf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f088f2aeddad412c8bcae831ee11864c7acf8a787f4eb729c96a2c27d6eb794
MD5 2379753055ed31738c85ea8fea6179c9
BLAKE2b-256 9b8f2dc5d0de2c2d739ed142bf06b319b24cfe035b8a289d6d4dbb20019e100d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp310-cp310-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 eb63cee9fa2031d1f69b4120252a71134be96c327545aa02aba43184d68e6882
MD5 8e9380c2b894b4222d68129ca08f08ba
BLAKE2b-256 6a1d66628ca3833dc9c0f79a860bdf2e5f1ea05e8f1eae4d4f3bbad85f8d3841

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b39a2529aa6a33ac703c0e401ce1228fe0d9619d4239c11ec4e7e35ab3afd0e9
MD5 c23cf8de6486825498006a497276a8e4
BLAKE2b-256 5d3a696a05556ebbf2c9f95089351b9363578531da7fe4dfff01a72d317e381f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 58282bec596d68efd59026700e824a55d7a6fc164a2516d1281948ae803ea9ac
MD5 4781e7f9618e753027239c3cd7a10915
BLAKE2b-256 c759cfe0a9c0fc0150bd419e0a9e0eddb844a4f6b84eb4686830ae788055bc76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 404aa603435365c8ceb77c7bdaec468c1ced1ca29c844ce07683e68998fa7407
MD5 dd8c1d8192244f876e9c097ce3fdbe0d
BLAKE2b-256 0e309fa8afaa4786b1018db98e3a89601b8184a4e6621dc652027dc0aae253ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e68809222a862a7b32b86aad707cb5b92c131d1fdd5e671ed9dc31abca3e98fc
MD5 abf1e94b58e64e18c4f81fb02b8f9e21
BLAKE2b-256 7640ceca4fd99c90121cf7ea3dc7866bcb9510085edc10751bd433c11c08427d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.46-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.46-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a27550025ff677cad27b6944fe974f0fb73da60f02d4bdb5f567dd1434329658
MD5 c2fb74d28fff75078fe2e0f3b2f6f719
BLAKE2b-256 5c257211ea1860ed66e4ccc398c18236659af2c9ef3468dfa5b6d61941975ee0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9bf51d951a4a34eb9a6cd0a0e5d1ed9452a0f90a51078ddc237cb58edcbb7d3
MD5 7480496428b05f377204741a5b4ba13e
BLAKE2b-256 b0c1f1eafb6827f3e41c620a403010c609bc6c5c4904d1dd999036fc6d778e34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp39-cp39-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 aa172eec96a146ca16758cb24900c1dbc467f85084a4574c0630b024d4655153
MD5 5bce514d5f294ac2965073fd18d2edaf
BLAKE2b-256 3fb89af429b7543be4d8ec468d30141fad98c072514d8c575687eb0b0c32ee5a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 59e73b8ecbc08da10dc47c245e574f5e2d8153fc87133f856c6c7d7eba178ed3
MD5 6a63e1efa07bfa3ab14ae28cf639a7c8
BLAKE2b-256 17a886a7e168fd13f95ce4527c1c4c9334e087399b4518778053d09d20a09258

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 07d5f1e03c85ddd1e999ee664898d37bcf4fbe845e7fa3309cab0261f12e6746
MD5 c55fd3ba281a2e17c20d98922f4e6f7d
BLAKE2b-256 51d73ab7931101c03493295da80bc93748848633915d518024e565edcf87a44d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 db80f9ea0bc688610eb03efba08f43c21fdec80c743488cba25837b3e2cb389c
MD5 8dfc26bea32ea164da5428b2f42e1a04
BLAKE2b-256 f45ea25ab54305f9908e2233fe93ddcac5deaab1f4b5b1a1bea9e9299ff38b51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 5d71041b11a9ac3d93e906abbe53a0e4d67ca7507b29d54308698d33bfcbe0b1
MD5 d979599211480dbf53e2120fd7401364
BLAKE2b-256 7ddeea86f832902a19b3d20f88977034cd8f8402522dd13e046cc6a8c3060714

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.46-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.46-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2d640537513035a25e8f186853e48e0984daef5a89e8a47289505566af5f742a
MD5 f6717a59be0157512c60dee5c6d101ef
BLAKE2b-256 63daf4ac0c831c7b95b9d4f8430970e17924bbb52c0f86bfc6d6fa2bb5fd6fd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 601be784f3b7c951c1b7ad001e91c5276f129476c80c4a84ddfc084f7f6ec0d1
MD5 8a8b31853f5f88ff04d8640c636ddd2c
BLAKE2b-256 cfe1993d5c37a75f09c6fb58107f4e1d8d883e6ca4eef8d97fbf29fefc0aaf02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp38-cp38-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 34ad2a54b3aabdd07f9b006125f122b12ecd37caecf946881fc82004d868eb76
MD5 bffc0b95f5139ef6ec2adb3aba0a83ec
BLAKE2b-256 b81e9a724b5c2a67afffa76ae524b62f5e67d9dc543e96f31cb721052b581a73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2004c2dd0d03339e3d3ab7a966e1b8beea9bc87ea6b2e2bca949e78557b2f2d7
MD5 ea87ed8e5b180dbf85f8bede92fc3635
BLAKE2b-256 59818da410b283a947ec1ed5b0786e3f1f5192a6985b3e8cdf167fb7125c57de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp38-cp38-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 813e8680362ac10ad41275a039b7065a27bd1ebca59d9e478884ce8489e14e26
MD5 17c1120a772cf730d35f5d2660a8efbe
BLAKE2b-256 e541d5696b15311633e7f658f11104a6ed921c576746e7d617dd3f71bf2d0fce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 bc66f8e48799c871af43584be0de1a50fc2832d7b70af27ddf1f3a8b0b3d83b3
MD5 4a87e6c6840911b8dec209279dce34d8
BLAKE2b-256 face889669cdbb699709485f303ce4ac91e4412d919f9e21f2bbabe9fb3ef1df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f4f0eb6274a5edabc5e3524883473bccdfa5d79ddf156bad3e7abd0e1a3cbe8b
MD5 46ee3b60f84096742a22ceea723b043e
BLAKE2b-256 381fae1640ff1247805ddb0f4518202cc0efed33f55620be4e3c4f03ff2ca1b6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reliq-0.0.46-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.46-cp37-cp37-win_amd64.whl
Algorithm Hash digest
SHA256 8cdba3e192dd72c6342ccb43597c019d5bd58d4d6871019e4e11f18976ed9073
MD5 c8e3927f1b04dce31f04e8620dbd64c4
BLAKE2b-256 d3c3bad63d4194472ef97b6ce2510725687d24349cbd18b1bf6d780efb17dc26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp37-cp37-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14a66c1e40c60e1a17842cc80307a3054eb1c9f3e0314e7122fb8c4dbc0cf057
MD5 f92b7e57a085a94694c456f216ca1950
BLAKE2b-256 8452b0256c489a9a04877ffdb601eb4435e4d15adb6e2809b3f5d05633b603b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp37-cp37-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d8fa7a8125a7ccc95e17fd401da9dc7d0698ef867933726833f2c1d097812595
MD5 b1495b35513e605c5e293801cf498c2f
BLAKE2b-256 92209634dc4239a92d1d9f650932554c784b6bff156241ac8041c8456fb5a1e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp37-cp37-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec899fa0d79cb88b0551f34a9965a750cb9e1c2a9edc4f50317159bd6f976ad8
MD5 1137f9fbb991d5aeb640f257972d5f1a
BLAKE2b-256 727fc7b2f4face669cc2483715dad7dac6e26ac998dfcf5ccbd86aa7b9b24d28

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp37-cp37-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c94a204d03bebc0d1b97febcfa2c66a95848e157247b20dc6f738ee7041bcdbb
MD5 2b6ca5eb4e329020f507eec9e43816a9
BLAKE2b-256 eb1d9dd44aede168c95257e073f81cb4186bda2a090fe4f5019d4f2b97153035

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp37-cp37-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2990ce07c6017c9927d9a274ed171d0757fbe24170b9cc0b4bdda461684a9196
MD5 e3f781bc426a4df261fa12cfc869aeb1
BLAKE2b-256 8b725f71c6725aa01d9cafda107690a4ddd9bd1ec90ae233aedf72dd61fb2b7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.46-cp37-cp37-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 fabc193499106da09e76e24a364a63327c655bbe2ea05e4a0f33a6d58f946031
MD5 1749fa196e9603db115075db23912e32
BLAKE2b-256 18b695ed74d8c6de9806c564676ec8f95d6e3b30a4c550478a5303c7a36b07ba

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