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.1-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12 Windows x86-64

fapyc-0.6.1-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.1-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.1-cp312-cp312-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12 macOS 13.0+ ARM64

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

Uploaded CPython 3.11 Windows x86-64

fapyc-0.6.1-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.1-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.1-cp311-cp311-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11 macOS 13.0+ ARM64

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

Uploaded CPython 3.10 Windows x86-64

fapyc-0.6.1-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.1-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.1-cp310-cp310-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.10 macOS 13.0+ ARM64

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

Uploaded CPython 3.9 Windows x86-64

fapyc-0.6.1-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.1-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.1-cp39-cp39-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.9 macOS 13.0+ ARM64

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

Uploaded CPython 3.8 Windows x86-64

fapyc-0.6.1-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.1-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.1-cp38-cp38-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.8 macOS 13.0+ ARM64

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

Uploaded CPython 3.7m Windows x86-64

fapyc-0.6.1-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.1-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.1-cp37-cp37m-macosx_13_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.7m macOS 13.0+ ARM64

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

Uploaded CPython 3.6m Windows x86-64

fapyc-0.6.1-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.1-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.1-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.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: fapyc-0.6.1-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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6959a934a5cb11569d7022f1c436949887c22d9f105389e739a3e9360e58cefa
MD5 18eca28e750c63f3a32234bdcf1ee9c8
BLAKE2b-256 93c1ee87346fd623b39d1e8fe290dce70c8e85f86fef3142ba9d2e34f8c68f30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b1f3fec51cea019b4ec23d8ba2dc42add363aa50181855dc7b32e52f7a1d53e
MD5 cb0a1f8e3680c0a291693a5dbc513bcc
BLAKE2b-256 d385401b3dbc27c297bacfcfb7627bb4ff93a264d2ce867309d6eda62e46baf1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3c94bcfc727cfa0a0863fc0afce56dc8556c960e0a30b63e31217462b33c57e8
MD5 37b14f6f8b9d6913c4dc99375ac6187e
BLAKE2b-256 75273c0141573859537680b04fb87c376f53d781c64f1f29bce1e6da3ef987fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 45c64190f24848097b12ac44be2be97098d2f507f567cb7ca8c11ef06e37c755
MD5 7a47673ecb5cd2edb8e871c382e34fda
BLAKE2b-256 ddea2ece0f332b73bc3031a698237f218350de1b81875e8d51f53806360e4e80

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fapyc-0.6.1-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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 26f993a4732024a3afa6f97195022ef064030c5862f80bfcb452058badb184bb
MD5 95363f5591fb8acd73d8a34e38d0483b
BLAKE2b-256 48f21ce57dbe8775eae63f42df2c936f620cf0778700475b7bc68b4441ea3ec3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 785deb2625b0c659b44c3bcaed8a4f33ac7970181343c12f74e011d5350843e7
MD5 0a7f2da2c85a6f73bfa3cf7b400488f7
BLAKE2b-256 0c3ee3b3c8a6bb436408bf67dc78729a6d66f45e308f198d8544d9c24af78be4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 23aa0e09052590aa3508cbe35255c6c3b4703cf4d9a1cad01ffee91a27e00cd8
MD5 1815a64465579b4e06c855662ceac69f
BLAKE2b-256 633563efee8ff829c166902272bead989e70327b6eab65a9c08ffa24f6f0d225

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 f3308ba386ec1464954d8858a9d65162cb56dd4a9640bda38558818ce742f33c
MD5 634f99569d338515f58c7742f05c3cb9
BLAKE2b-256 80b1b34619681e2b3227e95f90df1d00913685de8c0b97aceec6c23e318d3dc9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fapyc-0.6.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 767fec0dd3abdc7f0345886a87d755d41b9d5641ac8f95e02884a272fb2b2129
MD5 b3dfc713387f8878ec46318f44825d4d
BLAKE2b-256 34e8c471ae090b267fcbae4f5917c8986bc729949d2d927a64a2e62f830556ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6633abd130168ac9dac336423a7bf97464fe2e5f74c3184d8574c29f091c3053
MD5 730efa6ba418aabdb01192655e3a56ae
BLAKE2b-256 e7b7d5b79b521a74d6e31ddacf00e25e175fd6dd923f0730cc6284256b488d98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 847e7d76e7cc81da94977d5fcf538e134bb99c37edd514baa4fe0f7f940f5fdf
MD5 6c35b908915bd464baf2a5c06c9d2745
BLAKE2b-256 cca58d8f535e2ba3058a2ef68dc1cbd6a305b9e043943b5384e947e093a7273f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 db4888c4dfba838c32dbb8a5d98caec2ad7de39ca631e6b031945916ed626666
MD5 9919e483289e4978bfae75473c24d399
BLAKE2b-256 c4e18938b3e099d1e3db474ae205080bdc50f726ee6d5138ddcef81810b1f325

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fapyc-0.6.1-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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e8614440dae07d2d7cf63fcd461fc9846050995f48ab2427450d4087d9df3dab
MD5 b9714b1d50d50da39fb5a1b356cab5fa
BLAKE2b-256 b3f8889e943fe9bdb42c15bb36865286361c6fbf203307d26042774584520411

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b0bcf6c844ab811902fd254244b4b6a78fc23af8839d34b65b52a91eb96ed83d
MD5 e6cd8f1fb2a0da27bfdcb44da8d5bb04
BLAKE2b-256 8ab5ab509539383a8e109da004ff46b4618c7a6787c3c523b228f8eea8c87976

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 cbf36c8ce12257ade7c63fe663b78e97e6a265748e4fc365055cf14cf599ada0
MD5 8ed10911238d40e080ac828bf735e76f
BLAKE2b-256 e43a912792d58e3f57a036921eba4ee158da80113da5578988a5e001448f7b94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 562b453f70814ae5c8eefffb1814744f195c69c469e91a6cb00fcb77522e0e6d
MD5 8ab4e63c39900e34965c61e9520272a5
BLAKE2b-256 fc2181c88a66e33bc9fadc91daa99f34d08fb63991b24832c62588492c951136

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fapyc-0.6.1-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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 a37d5321f6ecabe7b57b6c4bf01e6afbe562f131d54f10bd2d12602750136226
MD5 50ba89a5cfe0e43eed442b911062eb6b
BLAKE2b-256 21ee8689b72113cb0827e8740ac21b77d4e59e0bc1b80ca2499997f5f632958a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 007f2681a198c3f153b8eb5eb930526bdcda1d2005e46f9bb3233d6361a73af4
MD5 1f29b939d083d442677ac7637f242a43
BLAKE2b-256 b6da3905642b466465582eccff6e1de31968a2db59f1c21f11ba2db6a587775e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 dadefb0ecefce4dc6ed6af637d44d9293b13fae376c5acaf260c7d86d2627422
MD5 4105ae03608a4ae35b73c71017efc42d
BLAKE2b-256 ae70e694ac27c08295a80f8374ab29d648797dc3b7c36e4e5f6a21807c1b78d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp38-cp38-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 03c9943326a770a4f4d8bc7feb71ae26f8851c7ead7ab128dc9a69f18c8e37b8
MD5 9236c6a0b5c9488d48831d2a43de6535
BLAKE2b-256 a0467b4007229ccd972676b05e0973045d749bd3aa26daa4288f8ad627288ded

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fapyc-0.6.1-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.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d5261237da7bbd5822188bc02f49435175d8141d5a41916d4e463d1b51f065dc
MD5 54f1554a26aa555700a21db7cb55ff79
BLAKE2b-256 b904166dc3522b7253e1484f140783b5f6c56a652541ae3af30e27f6a657fc52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 06175b77aa39a30f686f608904b1d4c82a19e7d2cc155ecc9636c5bccf5a9562
MD5 bf434c7c718321471d19dc2988fd8f8f
BLAKE2b-256 769be501c8a11e588bf410954fbe479575bbcd88318b6cc0bf8b491ad47cd8cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp37-cp37m-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 16ffacc54e1a2abcd57d0920979d66c06092ee699fc50f0c84119bf409a10237
MD5 a5700f3487bc888c79eede96033362e7
BLAKE2b-256 18eb3306fae27cf5905115324005fa88dfb7d15e788e868dba616c6d89ba711a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp37-cp37m-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 6a6eb569c6678ca41748c0daf44a506e902bcf3a4b567856d3b630f1ad300843
MD5 d4b46b2fceb6c7d8664dee0c65146721
BLAKE2b-256 92a3fae3838470a416b0a9d74d970078436d25b10c686dab6c9da7981822f645

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fapyc-0.6.1-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.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 14b9f645085d163a5bc764b27430fbe30d0c91f2b7ede313e06078d61626cff4
MD5 057ccf82432503267df839274efb5eb9
BLAKE2b-256 739b8a369da2bdd554629022191762b5b66ebad79a66b41cbef9b1fbb9098e35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f46b120e5adc52d91e0610586b3526d6ae76ace689973b8270f97f75b9b7ab2
MD5 3b9bdbade3793efa8652fa398b3e1949
BLAKE2b-256 7ff2e8615275d89851a8bc6d7d859aac451a0b4b916f5f3e991bc87854782b50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp36-cp36m-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ad404ba8c8b4e7c86b3c9d8e485f784e7191d45e1524027f40d6b414d61dda25
MD5 37771c38cd28eb0a4037bab07469bb2d
BLAKE2b-256 54dec4c951519c0ae477807d9f1e4c792b6587739ba1002174b4eb4fee559b98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fapyc-0.6.1-cp36-cp36m-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 f5d4231ce43141e8aedc091b86adebc8f489d57e9eb94d28e7163e8b321b54b7
MD5 bc4414f4e97db8f32ad0a2271c062ed7
BLAKE2b-256 33203fb2d3273a62c8c0e12249c31aa6ab67c7bf70d0ecbe187571bb1d0b4dc3

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