Skip to main content

A Python wrapper for the FAPEC data compressor.

Project description

FaPyc

A Python wrapper for the FAPEC data compressor. (C) DAPCOM Data Services S.L. - https://www.dapcom.es

The full FAPEC compression and decompression library is included in this package, but a valid license file must be available to properly use it. Without a license, you can still use the decompressor (yet with some limitations, such as the maximum number of threads, the recovery of corrupted files, or the decompression of just one part of a multi-part archive). You can get free evaluation licenses at https://www.dapcom.es/get-fapec/ to test the compressor. For full licenses, please contact us at fapec@dapcom.es Once a valid license is obtained (either full or evaluation), you must define a FAPEC_HOME environment variable pointing to the path where you have stored your fapeclic.dat license file.

Usage

There are 3 main execution modes:

  • **File: When invoking Fapyc or Unfapyc on a filename, it will (de)compress it directly into another file.
  • Buffer: You can load the whole file to (de)compress on e.g. a byte array, and then invoke Fapyc/Unfapyc which will leave the result in the output buffer. Obviously, you should be careful with large files, as it may use a lot of RAM.
  • Chunk: FAPEC internally works in 'chunks' of data, typically 1-8 MB each (maximum 384MB each), which allows to progressively (de)compress a huge file while keeping memory usage under control. File and buffer (de)compression automatically uses this feature. For now, directly invoking this method is only available in the native C API, not in fapyc yet.

The file and buffer operations can also be combined:

  • Buffer-to-file compression: You can pass a buffer to Fapyc and tell it to progressively compress and store it into a file.
  • File-to-buffer decompression: You can directly decompress a file (without having to load it beforehand) and leave its decompressed output in a buffer, which you can use afterwards.

The basic syntax for these different modes is as follows:

  • File-to-file compression:
    from fapyc import Fapyc
    f = Fapyc(filename = your_file)
    f.compress_auto(output = your_file + ".fapec")  # We can also invoke a specific compression algorithm
  • Buffer-to-file compression:
    from fapyc import Fapyc
    f = Fapyc(buffer = your_data_buffer)
    f.compress_auto(output = "your_output_file.fapec")
  • Buffer-to-buffer compression:
    from fapyc import Fapyc
    f = Fapyc(buffer = your_data_buffer)
    f.compress_auto()
    your_data_handling_routine(f.outputBuffer)
  • File-to-file decompression:
    from fapyc import Unfapyc
    uf = Unfapyc(filename = your_fapec_file)
    uf.decompress(output = your_fapec_file + ".restored")  # or whatever filename/extension
  • File-to-buffer decompression:
    from fapyc import Unfapyc
    uf = Unfapyc(filename = your_fapec_file)
    uf.decompress()
    your_data_handling_routine(uf.outputBuffer)
  • Buffer-to-buffer decompression:
    from fapyc import Unfapyc
    uf = Unfapyc(buffer = your_data_buffer)
    uf.decompress()
    your_data_handling_routine(uf.outputBuffer)

In the current fapyc version, the following compression algorithms and parameters are available:

  • Automatic selection of the compression algorithm from the data contents:

    compress_auto()

  • LZW dictionary coding:

    compress_lzw()

  • Basic integer compression, allowing to indicate the bits per sample, signed integers (True/False), big endian (True/False), interleaving in samples, and lossy level:

    compress_basic(bits, sign, bigendian, il, lossy)

  • Tabulated text compression, allowing to indicate the separator character (and even a second separator):

    compress_tabtxt(sep1, sep2)

  • Double-precision floating point values, with interleaving and lossy level:

    compress_doubles(bigEndian, il, lossy)

  • FastQ genomic files compression:

    compress_fastq()

  • Kongsberg's .all files:

    compress_kall()

  • Kongsberg's .wcd files:

    compress_kwcd(lossy)

  • Kongsberg's .kmall and .kmwcd files:

    compress_kmall(sndlossy, silossy, amplossy, phaselossy, smartlossy)

  • Direct invocation of the FAPEC entropy coding core without any pre-processing:

    entropy_coder()

Examples

Compress and decompress a file

In this example we use the kmall option of FAPEC, suitable for this kind of geomaritime data files from Kongsberg Maritime:

from fapyc import Fapyc, Unfapyc, FapecLicense

filename = input("Path to KMALL file: ")

# Here we invoke FAPEC to directly run on files,
# so the memory usage will be small (just 16MB or so)
# although it won't allow us to directly access the
# (de)compressed buffers.
f = Fapyc(filename)
# Check that we have a valid license
lt = f.fapyc_get_lic_type()
if lt >= 0:
    ln = FapecLicense(lt).name
    lo = f.fapyc_get_lic_owner()
    print("FAPEC",ln,"license granted to",lo)
    f.compress_kmall()
    # Let's now decompress it, as a check
    print("Preparing to decompress %s" % (filename + ".fapec"))
    uf = Unfapyc(filename + ".fapec")
    uf.decompress(output=filename+".dec")
else:
    print("No valid license found")

Decompress an image into a buffer and show it

With this example we can view a colour image compressed with FAPEC:

from fapyc import Unfapyc
import numpy as np
from matplotlib import pyplot as plt

filename = input("Path to FAPEC-compressed 8-bit RGB image file: ")

# Decompress the file into a byte array buffer
uf = Unfapyc(filename = filename)

# Get the image features - assuming part index 0 (OK for a single-part archive; otherwise, we're simply taking the first part)
cmpOpts = uf.fapyc_get_part_cmpopts(0)

# Get the compression algorithm, which should be CILLIC, DWT or HPA for an image
algo = cmpOpts['algorithm'].decode('utf-8')
if algo != 'CILLIC' and algo != 'DWT' and algo != 'HPA':
    raise Exception("Not an image")
else:
    print("Found image compressed with the",algo,"algorithm")

# Get the image features we need
w = cmpOpts['imageWidth']
h = cmpOpts['imageHeight']
bpp = cmpOpts['sampleBits']
bands = cmpOpts['nBands']
coding = cmpOpts['bandsCoding']
coding2text = ['BIP','BIL','BSQ']

# Do some check
if bpp != 8 or bands != 3 or coding != 0:
    raise Exception("This test needs 8-bit colour images (3 colour bands) in pixel-interleaved coding mode")
else:
    print("Image features:",w,"x",h,"pixels,",bpp,"bits per pixel,",bands,"colour bands,",coding2text[coding],"coding")

uf.decompress()
# Check consistency (image dimensions vs. buffer size)
if len(uf.outputBuffer) != 3*w*h:
    print("Image dimensions inconsistent with file contents!")
else:
    # Reshape this one-dimensional array into a three-dimensional array (height, width, colours) to plot it
    ima = np.reshape(np.frombuffer(uf.outputBuffer, dtype=np.dtype('u1')), (h, w, 3))
    plt.imshow(ima)
    plt.show()

Compress and decompress a buffer

In this example we use the tab option of FAPEC, which typically outperforms gzip and bzip2 on tabulated text/numerical data such as point clouds or certain scientific data files:

from fapyc import Fapyc, Unfapyc

filename = input("Path to file: ")
file = open(filename, "rb")
# Beware - Load the whole file to memory
data = file.read()
f = Fapyc(buffer = data)
# Use 2 threads
f.fapyc_set_nthreads(2)
# Invoke our tabulated-text compression algorithm
# indicating a comma separator
f.compress_tabtxt(sep1=',')
print("Ratio =", round(float(len(data))/len(f.outputBuffer), 4))

# Now we decompress the buffer into another buffer
uf = Unfapyc(buffer = f.outputBuffer)
uf.fapyc_set_useropts(0, 3, 0, 0, 0)
uf.decompress()
print("Decompressed size:", len(uf.outputBuffer))

Decompress a file into a buffer, and do some operations on it

Here we provide a quite specific use case, based on the ESA/DPAC Gaia DR3 bulk catalogue (which is publicly available as FAPEC-compressed CSVs). In this example, we decompress two of the files, and while getting their CSV-formatted contents with Pandas we filter the contents according to some conditions, and generate some plots. This is just to illustrate how you can directly work on several compressed files. Note that it may require quite a lot of RAM, perhaps 4GB. You may need to install pyqt5 with pip.

from fapyc import Unfapyc
from io import BytesIO
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
import gc

filename = input("Path to GaiaDR3 csv.fapec file: ")
filename2 = input("Path to another GaiaDR3 csv.fapec file: ")

### Option 1: open the file, load it to memory (beware!), and decompress the buffer; it would be like this:
#file = open(filename, "rb")
#data = file.read()
#uf = Unfapyc(buffer = data)

### Option 2: directly decompress from the file into a buffer:
uf = Unfapyc(filename = filename)

# Here we'll use a verbose mode to see the decompression progress
uf.fapyc_set_useropts(2, 3, 0, 0, 0)
uf.fapyc_set_nthreads(2)
# Invoke decompressor
uf.decompress()

# Define our query (filter):
myq = "ra_error < 0.1 & dec_error < 0.1 & ruwe > 0.5 & ruwe < 2"

# Regenerate the CSV from the bytes buffer
print("Decoding and filtering CSV...")
df = pd.read_csv(BytesIO(uf.outputBuffer), comment="#").query(myq)

# Repeat for the 2nd file
uf = Unfapyc(filename = filename2)
uf.fapyc_set_useropts(2, 3, 0, 0, 0)
uf.fapyc_set_nthreads(2)
uf.decompress()
print("Decoding, filtering and joining CSV...")
df = pd.concat([df, pd.read_csv(BytesIO(uf.outputBuffer), comment="#").query(myq)])
# Remove NaNs and nulls from these two columns
df = df[np.isfinite(df['bp_rp'])]
df = df[np.isfinite(df['phot_g_mean_mag'])]
# Delete Unfapyc and force garbage collection, to try to free some memory
del uf
gc.collect()

print("Info from the filtered CSVs:")
print(df.info())

# Prepare some nice histograms for all data
plt.subplot(2,2,1)
plt.title("Skymap (%d sources)" % df.shape[0])
plt.xlabel("RA")
plt.ylabel("DEC")
print("Getting 2D histogram...")
plt.hist2d(df.ra, df.dec, bins=(200, 200), cmap=plt.cm.jet)
plt.colorbar()

plt.subplot(2,2,2)
plt.title("G-mag distribution")
plt.xlabel("G magnitude")
plt.ylabel("Counts")
plt.yscale("log")
print("Getting histogram...")
plt.hist(df.phot_g_mean_mag, bins=(100))

plt.subplot(2,2,3)
plt.title("Colour-Magnitude Diagram")
plt.xlabel("BP-RP")
plt.ylabel("G")
print("Getting 2D histogram...")
plt.hist2d(df.bp_rp, df.phot_g_mean_mag, bins=(100, 100), norm = colors.LogNorm(), cmap=plt.cm.jet)
plt.colorbar()

plt.subplot(2,2,4)
plt.title("Parallax error distribution")
plt.xlabel("G magnitude")
plt.ylabel("Parallax error")
print("Getting 2D histogram...")
plt.hist2d(df.phot_g_mean_mag, df.parallax_error, bins=(100, 100), norm = colors.LogNorm(), cmap=plt.cm.jet)

print("Plotting...")
plt.show()

Compress file using a logger

In this example, the user can provide a Python logger to get an information message from Fapyc, to capture the progress and get more information in case of errors (otherwise the native FAPEC library just writes to the console).

import logging
from fapyc import Fapyc, Unfapyc

filename = input("Path to the file to compress: ")
logger_file = 'fapyc.log'
logger = logging.getLogger(__name__)
logging.basicConfig(filename=logger_file, filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logger.setLevel(logging.DEBUG)

file = open(filename, "rb")
data = file.read()
file.close()

f = Fapyc(filename = filename, logger = logger)
f.fapyc_set_loglev(logging.INFO)
f.compress_doubles(output = "a.fapec")

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

fapyc-0.6.0-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12 Windows x86-64

fapyc-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

fapyc-0.6.0-cp312-cp312-macosx_13_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12 macOS 13.0+ x86-64

fapyc-0.6.0-cp312-cp312-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12 macOS 13.0+ ARM64

fapyc-0.6.0-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11 Windows x86-64

fapyc-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

fapyc-0.6.0-cp311-cp311-macosx_13_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11 macOS 13.0+ x86-64

fapyc-0.6.0-cp311-cp311-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11 macOS 13.0+ ARM64

fapyc-0.6.0-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10 Windows x86-64

fapyc-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

fapyc-0.6.0-cp310-cp310-macosx_13_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10 macOS 13.0+ x86-64

fapyc-0.6.0-cp310-cp310-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.10 macOS 13.0+ ARM64

fapyc-0.6.0-cp39-cp39-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.9 Windows x86-64

fapyc-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

fapyc-0.6.0-cp39-cp39-macosx_13_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9 macOS 13.0+ x86-64

fapyc-0.6.0-cp39-cp39-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.9 macOS 13.0+ ARM64

fapyc-0.6.0-cp38-cp38-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.8 Windows x86-64

fapyc-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

fapyc-0.6.0-cp38-cp38-macosx_13_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8 macOS 13.0+ x86-64

fapyc-0.6.0-cp38-cp38-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.8 macOS 13.0+ ARM64

fapyc-0.6.0-cp37-cp37m-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.7m Windows x86-64

fapyc-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

fapyc-0.6.0-cp37-cp37m-macosx_13_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.7m macOS 13.0+ x86-64

fapyc-0.6.0-cp37-cp37m-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.7m macOS 13.0+ ARM64

fapyc-0.6.0-cp36-cp36m-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.6m Windows x86-64

fapyc-0.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

fapyc-0.6.0-cp36-cp36m-macosx_13_0_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.6m macOS 13.0+ x86-64

fapyc-0.6.0-cp36-cp36m-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.6m macOS 13.0+ ARM64

File details

Details for the file fapyc-0.6.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for fapyc-0.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 06c74cadc6a64d478d558df2fc5617865cda3656fcfc0e145a8f7f67337ab074
MD5 9acb89f8399d950a66615ba6a335953d
BLAKE2b-256 1a5b3fcb0ea88e9c6fb7fe3e60eaa55fd3fa2820d8b55a96537ea77553895725

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6e0f91ccfb54490e20d2dbbcf71a679bb26d525c95e7aa6cdea043f0c8d37764
MD5 d2aa121303ebdd1fcc871eb7b9d058cd
BLAKE2b-256 1ff1484e27b1535c1c1bc22e70bcca9201740e27026b16eb69c0a454e153c5ba

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 0c99489419edc579af21871cec74d751c76feea421275f5b23c83f0d88e12e73
MD5 65ca62e52f27f133ac961f2eb00d409f
BLAKE2b-256 53c5564ba6d9107d0fc8c38451f5fcb4d7e5c7f69433ead131b16baf3859b588

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 658f0111e80d04f9bf9ca40ede3293b8d6f5298fd800a5fc6b40face7c4e8418
MD5 c4426bb716e2f8ea3b0baaf2365c06ef
BLAKE2b-256 ea1a133d92d87b973111c256864f0e9334e2de09a54ad6d42acfafcb08c849f0

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for fapyc-0.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fd19bd99d79df08954105a55e207b6b4d896cdfa6149400325b765b3a7399a95
MD5 8077d24c994546aca59ccc7e283771ef
BLAKE2b-256 17912d01f945fde41f977aa8868b9dbd22d3e3cc822832c765a5cecd44d53436

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 faa0e99e9a98d76c03e360e9a056b32ded304cbab6559fbb11a3e775f64661e1
MD5 994d5499fedc5121e4679e00b2f61aab
BLAKE2b-256 6f4b9ca6b031fcdc8a9101a77d84546ec9e18a1ad6cc93f693bb7ed3751048c0

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e8d9fc9c0a3245c5006b1d22ff02ccacba66229117c40649625c0d8d3cb4871e
MD5 0ea48cd80bb1e6e4f171ed4acb1f7f6d
BLAKE2b-256 1a27ffdd7d1ed125e8079df5333af4064b02f6c40d427a6350f2ab3f3d052aa4

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 ab8c79dc44130a9f36c124af9c3a3df38fb590754f58b1516e3d19c3fd7aa27e
MD5 74c2245b512f5dfb353c159dce1fd02a
BLAKE2b-256 3990df617c098e64650354f90f42f83186aef3e43acf4cb6631d6d90c0ba2d99

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for fapyc-0.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 22c33baeacd02124c4dbb88042e83ae073b70c22f575ff8f44c2e3349305b5b7
MD5 c5702780de74ab0e5cf10bc7e0583d84
BLAKE2b-256 5e9cb2352e0afce4e21826df472615f3ddaa74cc1403e59dcf0e1a314cb6e242

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ba732c25ed462729e83c07d4b00099ab4c25b722598a78c75c20544a7872604e
MD5 34951f02d0fe14f775399da0f4da1f61
BLAKE2b-256 360b69ac828899f24b0f7c823a08473b94f23787ec7f82f2709609931f0151b3

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f119aa42e980b15cf32d3e3383003846a933488e6fe809697cb84f26aac5761d
MD5 1af1e3d5a405928f4d7607265c372c7b
BLAKE2b-256 2d53cbf06cad6a992b8983a43730f5394e4a458cf586e918b24191ce982f9486

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 35201d5a3d0a4aa5877a397267f8d1c50a5f98ffd11c18dce1d3160168ba756b
MD5 b72db82f6fba7137a8bac95b8e7a19cb
BLAKE2b-256 eb694e6195aebd4cfadbe8f6b80b61d2e6bc883be3f48627f8f0554888d546db

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for fapyc-0.6.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 0bdb4d7412b5c9eb3621eadfa69f929f664b7c6f9eb15a1ab5d5002cb6b22512
MD5 373ff8ead871b1ccdb50d2d9d2ab99b1
BLAKE2b-256 77c452d47085b928ca6729b0427ade2e68761bfdf1f361d46c25035eda3879e8

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 659b059d142384d210190dfc72eed031d179b1b2550f165fd2a4a11a2dd19a84
MD5 09fdbb426aee1cf9f37693aaa844a56b
BLAKE2b-256 581f1b76cb46a04dc5f154a939aa14d3ba06090c689a17023b3b04e6453e8dd2

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e1359b2efcaec7bc5ef2474cbc279d51f2c864b34883dc86951860dcd06b32ef
MD5 dd31807c81a2d09e665988900ae6d485
BLAKE2b-256 671ab1e33cd9addc0cbcf782c2ec2b69dd47c419952aa4244b9e0048a48d3f2f

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp39-cp39-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 bcff9ecf57ebdf39e6d6ddee09e32d265c4e1f405ef653f512a646e59e66a038
MD5 826d4101a36c4cb3a3945fd3dfd26b24
BLAKE2b-256 6f07eedfd471c69c81e486398fa554332c8cb95fb50cc69eee48ee22fb9098c4

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for fapyc-0.6.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 21be680a81e697c1b4a419900919574b38dd68ea8acaf51e43e95ed5070792bc
MD5 c8719d74e2f9b9dc3b1bd27e6b7ee385
BLAKE2b-256 d4f2df20c42997bcf799e7274b0bf38b1073dd26f6e64548d85a81aebbd3956b

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d2d169696d51305343ebf14185d78cdd1bf21672ac77a41284b46dd99cb348e
MD5 2ff7e77cb316f4124930581ab0c87be6
BLAKE2b-256 5ca7645620debec8edf1b939e5647e76f900d121b0daaf7b84bc017eca8907dc

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp38-cp38-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ca28be25dc61049c1585a13039c2b2b2cd74ee1c8df15f7beb64c5b6d581f327
MD5 da5df1b8213f2859781d466b06ed657b
BLAKE2b-256 43115866c005680400f0ae3fdc2fa79b2175ed59618d2b40a9ddff17c66a16d2

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp38-cp38-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp38-cp38-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 ff94bfa88c1665d472143d8c654fc6ded1b961a2e3657411156b525693b1717c
MD5 8d76fb8e4de5478162ff22eb898b4b35
BLAKE2b-256 6a870b4a87cef02522ab3eba2a1841435e0f954edbbe1f22b7ffd31b00508bed

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for fapyc-0.6.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c2dafae222d04fcd34ecf50414bc61561ac4bf87798db85d56e90873d513c318
MD5 c07828bea8435a7258df31846c0e3aef
BLAKE2b-256 278832a910da4c705a9d512c39cf7405b58f8e8c173185f6aa0e62da21ddac7f

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b714c999fcbd7b0ac2a31db75085b29bb59e55d28ea244e34071c2b73298b9b
MD5 979d9b53ee82ce53eae02849ac6198bf
BLAKE2b-256 48580d51b311065f67591a78bafe037b4394ff0dd6193264f2498af298c1ede0

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp37-cp37m-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp37-cp37m-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c7bb094ae0fcf43b55e67cc342b47f6cbc0476f427ffb85fdd2acab0599339a9
MD5 268b558f98ad3443f4591dbca3bc04ac
BLAKE2b-256 1d5fa5d115fd0aa16073539a966477e50b786c74d259e6a9c68958752bde1f65

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp37-cp37m-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp37-cp37m-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 f802c0b4092de252979104814fdfd709843a8cca91bc7faf4beed472f0391e8f
MD5 3cba16f4fb90b3510a73c746abf3d495
BLAKE2b-256 89a4655e2d42354f02afeb3e1ece47017e0dfb6960154a851e386efc9cac1bf5

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for fapyc-0.6.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 e73982fbb53d87fe6aeb8141bbb22af6e0627b98fc34536ce4eccdcb74052809
MD5 89379ead08eaabb75bea3375379f82e7
BLAKE2b-256 5ec43acccd39536f17bfd58529cfe5827979e15ff4af301b91280de0476add49

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7d741c926f66a2e306437eb93817ee12bf9bc65f7f38cf26c5aad98ae4afe346
MD5 f799e52fe548f5ab173ff06a0acebd96
BLAKE2b-256 72ce9121774aa37fafae88265f326b11df47d5d2d0484d3ea9ac3dfdcd306fbc

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp36-cp36m-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp36-cp36m-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 06a97500497b81739de73670a2e9b12a50fa2f8ca6f648b13838aaad3d31e7e5
MD5 6e005ac99bb14137c34a3dac23b9e0d2
BLAKE2b-256 3d94671ee754824952359a112e6a708cd93d16a8f52c86d5752e0b7e19e46206

See more details on using hashes here.

File details

Details for the file fapyc-0.6.0-cp36-cp36m-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for fapyc-0.6.0-cp36-cp36m-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 eb037ebce17f45b92ce7ef8f797ae462481c9307ef45d6a696ad30c1780fc7c9
MD5 e942f526384a4e00ebdd5275268503e8
BLAKE2b-256 a5458d70a5e882c7f956b0b86188976685f083b4c7193f4c569121706b02b8a2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page