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.48.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.48-cp314-cp314-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.14Windows x86-64

reliq-0.0.48-cp314-cp314-manylinux2014_x86_64.whl (151.0 kB view details)

Uploaded CPython 3.14

reliq-0.0.48-cp314-cp314-manylinux2014_armv7l.whl (120.6 kB view details)

Uploaded CPython 3.14

reliq-0.0.48-cp314-cp314-manylinux2014_aarch64.whl (147.2 kB view details)

Uploaded CPython 3.14

reliq-0.0.48-cp314-cp314-macosx_15_0_arm64.whl (115.9 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

reliq-0.0.48-cp314-cp314-macosx_14_0_arm64.whl (115.3 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

reliq-0.0.48-cp313-cp313-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13

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

Uploaded CPython 3.13

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

Uploaded CPython 3.13

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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

reliq-0.0.48-cp312-cp312-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12

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

Uploaded CPython 3.12

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

Uploaded CPython 3.12

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

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

reliq-0.0.48-cp311-cp311-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11

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

Uploaded CPython 3.11

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

Uploaded CPython 3.11

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

Uploaded CPython 3.11macOS 15.0+ ARM64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

reliq-0.0.48-cp310-cp310-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10

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

Uploaded CPython 3.10

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

Uploaded CPython 3.10

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

Uploaded CPython 3.10macOS 15.0+ ARM64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

reliq-0.0.48-cp39-cp39-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9

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

Uploaded CPython 3.9

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

Uploaded CPython 3.9

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

Uploaded CPython 3.9macOS 15.0+ ARM64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

reliq-0.0.48-cp38-cp38-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.8Windows x86-64

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

Uploaded CPython 3.8

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

Uploaded CPython 3.8

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

Uploaded CPython 3.8

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

Uploaded CPython 3.8macOS 15.0+ ARM64

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

Uploaded CPython 3.8macOS 14.0+ ARM64

reliq-0.0.48-cp37-cp37-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.7Windows x86-64

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

Uploaded CPython 3.7

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

Uploaded CPython 3.7

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

Uploaded CPython 3.7

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

Uploaded CPython 3.7macOS 15.0+ ARM64

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

Uploaded CPython 3.7macOS 14.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48.tar.gz
Algorithm Hash digest
SHA256 e0272a4536ce1040a1fb0b687d6834680f355dfc26b26e573ce47f9fa943dfab
MD5 a31b4076d86191313893875e178b833a
BLAKE2b-256 e9e57b0b85070bb7eec09e42e6bf8b6e1853d3982e4223f2de9b86767ef7ccda

See more details on using hashes here.

File details

Details for the file reliq-0.0.48-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: reliq-0.0.48-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 178.0 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for reliq-0.0.48-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1dc822b69694bbe02887945fb1f0d804600a0711d476dab39b5fd232b8e0b199
MD5 06571e7b132533a78c4d1c0913ccc6b2
BLAKE2b-256 386b6b867f01826923912c5f435022b2e483b59399feb187df6187cb0953019e

See more details on using hashes here.

File details

Details for the file reliq-0.0.48-cp314-cp314-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reliq-0.0.48-cp314-cp314-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d38967f403313ec0473cd98e69cb282c070f480c95a1193bd1b6eb3470734539
MD5 86d1a3b74fb152aa12c3795707e6140c
BLAKE2b-256 3ceafd94d60f961e1f834cb990d2ab9d9a5f53a84e30134fd72b4eba9a60e3a3

See more details on using hashes here.

File details

Details for the file reliq-0.0.48-cp314-cp314-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for reliq-0.0.48-cp314-cp314-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 56f7bf600ac5fa66a6061173bdae7826a917af5bae00ca98c6f9d07cb83cc54b
MD5 580248bdcee0a4ec0b8bf373f1c301a6
BLAKE2b-256 a0b5eb46f2000ae69fcad84f3d57d26d56468fb2731b4b8e07ef61ddcb15ca8a

See more details on using hashes here.

File details

Details for the file reliq-0.0.48-cp314-cp314-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reliq-0.0.48-cp314-cp314-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 06fee4235a59681e42ac8c4966724ee7a3e1e60c80fcd918a35b537cd03cd6c1
MD5 2f138f068be001dce59df5f340375c3d
BLAKE2b-256 ab7edca6a8f52c59988208931118c42325f3635333fd7cd14854141712f9f74d

See more details on using hashes here.

File details

Details for the file reliq-0.0.48-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.48-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8463544f7935c9db9f1fd01e61a24c26149a72af620e566b23a76077df454063
MD5 f1c5c017176d989690be6423110deb30
BLAKE2b-256 c1d2ccdb5f73fe1856503ed629c49cd9f7aedfc5f1a8fd198c202a579fd79b44

See more details on using hashes here.

File details

Details for the file reliq-0.0.48-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for reliq-0.0.48-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4e3949cc6e93772e29d0cd643130fffc3f87d2f95738925bda9e7224dc7e4914
MD5 5efd09ed75a2d2efe318e33c7af1f104
BLAKE2b-256 3aa3b9537ec2c377d0f9a876cef24439a522cedbdcc5f3695188974714b1a98f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bb2e6d0bca1ac3a086be71cdcb81cd7e78deedcf30916d739638661c030dbb4b
MD5 503f2e2aa669dea09bc04549c3eaec12
BLAKE2b-256 90c93fc958661c1c279b19f05440a6263ef136af2e34421fdc6e65f13b954ab9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9fd2b93724c1d434742c3a99890f7b1811af5db4e98d56a3cfa85810ab9582c9
MD5 7485d8b08dcf583f16528c4099fc91ce
BLAKE2b-256 9c3e93ea7ce099eb8fb32ec528bd74f26b49452664b5888a9f475ebb4b4ffc2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp313-cp313-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 452e05c4a334d8b93544ac872712e6d509e2c396a707ac3c1d4b62919771916a
MD5 3640096d982fc211589ed96a22330951
BLAKE2b-256 4536775f4746c93c3e8a296d471910f00670cef1d86b2503615d18d00e11655d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9d513b58b353c1167f2c8f6e4e8165cc9b9c37def5bbc796c5d87fdf653460b9
MD5 fce80ab53fa98610a45eede8a593b646
BLAKE2b-256 142cb52ec2f513e0f2e040d9b00ab139f6ee8c21b4127642814cb2f7113b7102

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1d1b0184acfa3d07f0253fe94eed2b93bcaeb1ff2defdef626cd710f4b79666e
MD5 3c3c83778bd467c09da5f0fbb60a308f
BLAKE2b-256 2612f1ee0cfc71c5578106c9a7cf300d1b2dc898acaabf67e261173991fe58c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5c4ab9bae4f74277ce72ff4e7342161c6eb3dd28b86c3116da54f7bbdbdcb91c
MD5 6bf20bd68b7490f6801ce17be078dcba
BLAKE2b-256 3f741e575f12c6e0c0e530fc9d2838838098c0569b6879f9ad3a274956f8a7c4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7865284540f32e1ca1960fe30e71d3ef9a1cbf30eba4f709f9b5baeaea22a01d
MD5 6931aaf66b553473afd29549be67774e
BLAKE2b-256 840df4d1b0886452025ecb15dd6dfd71bb9b7537fb9e6a22344e9645fde2af60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74d5f6e74c41047217833b1e53b86a487ccb66b20fffe5bb22caa42b94707f41
MD5 b0573cfc992b6a0334f05627fcd5e7b8
BLAKE2b-256 b0d5a641a9ae3a745d512150ff017fd50e1c5aa479746c03d1427ebac5f034ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp312-cp312-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 de573a7151150297db0d14db42e5294be55757dbf148fa9bdbc8f5041d7eb6d3
MD5 86894539b20fd3dd778fe0fe7ade8e13
BLAKE2b-256 d5f9fc4e07f51b139cb2fcff5d259ff306cc2991494e6f1a1ce594ad10b93e6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 54efc08156d61135f53f07906f58975c1df2c57bab76bce392fe702c8e99a13d
MD5 d670dcddbf80407015f44fbdfb01c698
BLAKE2b-256 c7d3464a694ae7851250e141fb1f98e854465ecbd6a4410f0a8a91f4b417bf59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 754827f967e752d975f0f1ef4fda15be7d9ca8802ed4983e95c5344d2e8cb300
MD5 20c7d8ac8c8ca6854bd581977a781af9
BLAKE2b-256 169247fa641414c70da7c26660ad21d68771c4244ade7914d83c599be8676b4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 199f6082b2654256701386c080d49cdc1d7be22c204a76356ceebf58d46c20b8
MD5 9148748997053f825778a33e5a9b08aa
BLAKE2b-256 00f175dea042e57833b700b8d1b41a571084087fb333e1316e0b6c0779ac50a3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 744f268bd76d69978e3fe9f2e972d2afbce827a19ddfab0318cea3fceeeb4939
MD5 d530790caa3763f5b2463027e70e86fc
BLAKE2b-256 40d77ea7ec72e2d90e33c4264d6790b908bbe9e30a6430aa4e4d7513445b69cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a05b6587ac87418c23ef208dfabe2734b4362f4357e00f6ff911d8fa0d10b90d
MD5 f11d9a94bd05b4a9374c46d4e7e9b7d8
BLAKE2b-256 ae6f5cbb59624ecb9fcca463873b6e20a5c515813a39a0107843d03708112c71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp311-cp311-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 3624f22c0a373f11c6595e7c16d7e38eab3b2ba8aba283dedc0c9b1a438b957a
MD5 7d2bdb242c224fdc1f9e2e8ea1569c07
BLAKE2b-256 86ac72efc050053e8bb593416b07f31e90e43c01be9f41dc955cee3bdc278628

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4c7f74df9fe9828b9b5e3cb9ac52504796481ca5f8ce405f2e187c310ee163e2
MD5 63db6796928c5ad0cb516ff1a748a5d5
BLAKE2b-256 2d576942db563c9c0e72c63c3a51cfab146112ea53480380c0dcaa8593a1beaa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7f408cf568f50cb380154946574829e9fac978a143ed2b041b467f531287a083
MD5 689b21eb6147ed115669b1504e9d69ad
BLAKE2b-256 58a561a06bf5485a5fa5afafeabb0a974fe211275ffa69852188996d761574ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 364ab9cdb3975857a0d4edc584da76665ed02af477199d2c7ae741d8b9bbce8c
MD5 46400e06ca362d73b205cac57f005003
BLAKE2b-256 49982a5fd1c4e06c01084437d677aceb26a265c739eedbb25864db933f02b8ac

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ac6d5e45b2fcb5240a9b8089b749c96a8a7f41820fb0043e973adba4f9bba914
MD5 041d78a4304e8d2350c0da975ade7a88
BLAKE2b-256 b91fec878f7aa01da67e76e3837345c61f5fb92c933b75691a618a627cf70919

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ada6a36afb2cd74e2bac9561ada2c3af402ccf161218ad19617c5f595d504d20
MD5 6b8b6eb009dc8ba7f17eacb76acf5a27
BLAKE2b-256 6aaaa68239c3d8f4c5d0a4fd82bc9c038da21caac565fa7b6fa3bcf1c4f10dce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp310-cp310-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 648e39d9baba1c9b95f8f5824a40ec1c11c4e9c1a15cddc75d156599af4c7827
MD5 e57d288d3b51e26796a2bfa1b54ab770
BLAKE2b-256 ac4987557e22c6aec5852428fcd1f6f4a654a74218d7e081473e31a11ca16d72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2e77054e6b988719d506c9ffffbd4d86eee3bb7cc1361285bb021fb6ed38ab9d
MD5 3772f7d14e960f266e752c43a2c77c08
BLAKE2b-256 fdc96805a3af1f88178e6358476ff77282eac9a7f30b02d6ef47e5d3ec7b3740

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 76080adb01f779297821a7996b26291171ad3e9472e26ced0a00749a658f4a61
MD5 5e2a314c5e386e57685813e850609f97
BLAKE2b-256 b61bda34a4cf0826349f050206754a408fcb1289bd5206ce8a811ff362c59661

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 3fbacacfd7202d1a85dff56d1fe15a9caa6ffb50eb29fd906c46f0c35e57dd50
MD5 9a699dc748627c8e82d40bf494371a59
BLAKE2b-256 0b90cdea79846a5816c60d29a232a26639f98714eddeae3672ebf5c1b7d92d24

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 56a55d903f9bee6adb0e59f27194fadd89f0534005c54405b63a05402279c76d
MD5 0bf89d0a89207670c606a7ab9409341c
BLAKE2b-256 e9c2b11c202d175ae24b09a576d25656d773160b5ce497b07b03e6c25f1e6be3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f81224e791ee770187a9dcf47300f1ccbae84417b7b4fa05f94484763f9869a
MD5 323d1cb1a4266b48136884afe96b8ba3
BLAKE2b-256 47e82a5eb0a8376fc7cdc6d54200a0ca3d980a43a4c0914d4c7be85d7a2f6dfd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp39-cp39-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 926ebb044dff25de0afc79a8c77510e1dc384ae9951e67b5b7de6f71a665e41d
MD5 f7dff4b3ee8c3229aeffe2f2982f0b52
BLAKE2b-256 17d0333911351357a1d643f0bec143148fa17d79b7f9175776a4fef110930af6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp39-cp39-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1bf0c47d4250f8731bff5d5401488dd28ab7ff6431d4a318c887a9d6bc7d52b7
MD5 0c3c1ff8ddf5c8ba4b47c65c0e5be884
BLAKE2b-256 1fd39210cbfd365530a4d3ac076dbc3ff2931e123f96332d204713e95e1f059d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 419dba87d2fe64a7a2702a4163b9f2ed163b61dd579d578747b6ef8d29ba3a0b
MD5 ceb275b27d7af66007bdcaea973e304f
BLAKE2b-256 beb38519626dff9e668015be0da16febb36383f785e53d3357d6fd3e8868052e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 be77bfcd2b3eb9c31c99ed305f716676e483a4e2f33fba490d88aa78ae3de260
MD5 798e38af7194f3d4221b5f7e26aeac3f
BLAKE2b-256 e2de7a48c52afe0d157ed312922c4685efca1416bf1cd3005776fba676513827

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 149167f185ebb7c9e799771451ec355f3e6b29c83da8a914bb8a3eaf2e03aada
MD5 2e27084d681b7d8ede250b2f1e6a0e82
BLAKE2b-256 e4cfa11d153a006df6b1968668a8963c53c6c76c2c9ee6ec12300bc297bcf0fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 330a25bb7108f87ebc5fb7a7d889e942e36323e772ab408e456280f824ba948f
MD5 57995ea16e9cb69bf1cca539becc8d83
BLAKE2b-256 1e689fab1216eb6189f8df0a7d461ff7a20fd406d28e8a45e9be6ee77fb32d64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp38-cp38-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 e88046ccb98b03cea62ba16d795b5f77edae36b39e49842d709a070c07e0eef3
MD5 4b6c28fa8f0f03b7cf8245fe0f660f7c
BLAKE2b-256 fe3d25d165bccee0c5e22ba2b4a83da954f8e8f0b63bd1d5e774b9090d88155f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1e6c72d1a8b00c6f6c10be8ac0a157cf3567ae690f92f8021be8ef03e6866ba9
MD5 ba2b525d90078e3f9d970446fcbf2036
BLAKE2b-256 dfe030b30c997c00394abf6fbeab3996239529e6ae731edc038367f6488f2556

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp38-cp38-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 3c8e300112a943ba4df34bc7ab831ac7743300cb80445a4ffb356c5d88e838f2
MD5 a191e04aaca5426b5cadf9779fae24ab
BLAKE2b-256 5661d0049d51417e3cb57466aaf44016478c8b4531a28bbb976b4dc13414888a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp38-cp38-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e29b7cf5c39062f03448039be06823ceb8285549610dc949cd56635237b64394
MD5 0f8c6c2be7f282153f8487561d44966a
BLAKE2b-256 7cf49efaecccb4bbb77d04adbaa6d3ac062cb139c195ceb04d2b475d40b9a6ca

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for reliq-0.0.48-cp37-cp37-win_amd64.whl
Algorithm Hash digest
SHA256 bee36a1cb41cc75e79f4215e35a92e3056fae76e029ec5e5eb97f1243896e096
MD5 b7b30beee108eabdd61f2915ffc4414c
BLAKE2b-256 5dafee10aaf368c9377eba6753033928b622f8b0c439ca12b8295e15a4ce137c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp37-cp37-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4301ae25000714cdc9ef6973d7d6adac462b97b7476d378cbca1f9c63e7830e2
MD5 c470352bbc8f34d781cf85a7a4a985bf
BLAKE2b-256 1dc3a6537982fa40145fe78f3385dd37fa399cebbb9308b214c4cff4c5d511fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp37-cp37-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 a857831c6a96cc3d9018bdc808e9cb04c0bc4ed839dc77f7787426df0b334b24
MD5 278bc354a627c1607744d25d38ca405b
BLAKE2b-256 fe4f0cc7c89d1ece38bec1f3582c9dff95527189e21e5d9daf68d2217610cb96

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp37-cp37-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c71e8cd20eeb3b61722478104b9f864e4f04979e1a7f53afbec9bb58e1b70d01
MD5 2fd95047d5afc85658f685c7991a15cb
BLAKE2b-256 5493c2f758488c2e258c996bcb0f16711ab8237fd77ea9632404c1dccb2a257b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp37-cp37-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 45cc8337709f7ab551761f1e0527f07936d7130fe1323b3a84e58f037d11de0a
MD5 7dd464c2cbdf38569541d9f059c440e1
BLAKE2b-256 9b12520003f6750928cffcc9d836a4c2d23d39ecb6a13c7f934f56e618a9184e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reliq-0.0.48-cp37-cp37-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6072a543522e401711281fa63d5fce4131e51b03ae526576c159995788fe751c
MD5 b3b25fbb8bc32b5eba9e3c82beaf875c
BLAKE2b-256 0112ea69fde3f08671ee01979a2ea81852a757a65b0d85a0900259dce8b65a12

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