Skip to main content

Fapyc

1. What is FAPEC and 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.

2. Quick guide

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.

In addition, the current version of Fapyc includes a console application that allows the user to use basic functionalities of Fapyc.These include:

  • Compress a file or folder: The user can compress a single file or a folder using basic options as overwrite, the number of threads and the output file path. The automatic compression will be used.
  • Decompress FAPEC file: You can see what parts contains a Fapec file and the information about them. Also, you can decompress one part or all of them.

3 Functions and data structures

3.1 User options

The user can modify some parameters of compression/decompression.In the current fapyc version, the following user options are available:

  • Sets the FAPEC user options: Verbosity level (0-3), Error Detection And Correction option (0-3), Encryption option (0-2), Decompression mode (0-3), Abort in case of decompression errors (do not try to recover) (0-1):

    fapyc_set_useropts(verbLevel, edacOpt, cryptOpt, decMode, abortErr)

  • Sets the number of threads. 0 means single-thread, 1 means one thread for compression/decompression plus read/write threads, 2...16 means multi-thread for comp/decomp , -1 means automatic configuration from the CPUs found:

    fapyc_set_nthreads(threadPool)

  • Set delete input after successfully finishing (True/False):

    fapyc_set_delInput(delInput)

  • Set ask before overwriting (True/False):

    fapyc_set_askOverwrite(askOverwrite)

  • Set do not recurse subdirectories (in compression) or extract all files in the same working directory (in decompression) (True-False):

    fapyc_set_noDirTree(noDirTree)

  • Set license-enforced privacy (True/False):

    fapyc_set_enforcePriv(enforcePriv)

  • Set encrypt file when compressing. 0 to generate a non-encrypted archive; 1 to use XXTEA; 2 to use OpenSSL (if supported):

    fapyc_set_cryptOpt(cryptOpt)

  • Set abort decompression in case of errors (True/False):

    fapyc_set_abortErr(abortErr)

  • Set the password for decompression (String):

    fapyc_set_decompress_password(password)

3.2 Logger functions

To handle errors conveniently the user can define his own looger in Python to manage this type of messages, with the following functions:

  • Set the fapyc logger to (re)use an existing Python logger provided by the user (Python logger):

    fapyc_set_logger(logger)

  • Write a message to the logger, specifying the logging level (Python logging level, String):

    fapyc_write_logger(level, msg)

  • Get the Fapyc log level corresponding to a given FAPEC-internal logger level (Fapec Log Level 0-3):

    fapyc_get_pyloglev(fapecLogLev)

  • Get the FAPEC log level corresponding to a given Python log level (Python logging level):

    fapyc_get_fapecloglev(pyLogLev)

  • Set the FAPEC log level (Python logging level):

    fapyc_set_loglev(logLev)

3.3 License functions

To use the full FAPEC compression and decompression library a license is required, to manage it, these functions are available:

  • Method to get the license type.

    fapyc_get_lic_type()

  • Method for obtaining the remaining days of the license:

    fapyc_get_eval_lic_rem_days()

  • Method to get the owener of the license:

    fapyc_get_lic_owner()

  • Method to "test" license file given by the user (String with the path of the file): Currently cannot activate the new license, only can be activated modifying FAPEC HOME.

    fapyc_test_or_use_lic_file(licfname)

3.4 Compression functions

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

  • Class with the Python implementation of the FAPEC compressor.

    Fapyc(filename, buffer, chunksize, blen, logger)

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

    compress_auto(output)

  • LZW dictionary coding:

    compress_lzw(output)

  • 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, output)

  • FASEC files compression:

    compress_fasec(bits, sign, bigendian, il, lossy, output)

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

    compress_tabtxt(sep1, sep2, output)

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

    compress_doubles(bigEndian, il, lossy, output)

  • FastQ genomic files compression:

    compress_fastq(output)

  • Kongsberg's .all files:

    compress_kall(output)

  • Kongsberg's .wcd files:

    compress_kwcd(lossy, output)

  • Kongsberg's .kmall and .kmwcd files:

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

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

    entropy_coder(output)

  • XTF files compression:

    compress_xtf(lossy, output)

  • EK80 files compression:

    compress_ek80(lossy, output)

3.5 Decompression functions

In the current fapyc version, the following decompression functions and parameters are available:

  • Class with the Python implementation of the FAPEC decompressor.

    Unfapyc(filename=None, buffer=None, chunksize=1048576, blen=128, logger = None)

  • Wrapper method to call either buffer-to-buffer or file decompression.

    decompress(output="", partname= None, partindex= -1)

  • Method to get the number of parts of the FAPEC file.

    fapyc_get_farch_num_parts()

  • Method to get the part name of a index in the FAPEC file.

    fapyc_get_part_name(index)

  • Method to get a dict describing the compression options used for a given part.

    fapyc_get_part_cmpopts(index)

  • Method to get the original size of a part contained in a FAPEC archive.

    fapyc_get_part_origsize(index)

4.Main operation modes

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)
  • Get FAPEC file information:
    from fapyc import Unfapyc
    uf = Unfapyc(filename = your_fapec_file) 
    nparts = uf.fapyc_get_farch_num_parts()
    for i in range(nparts):
        part_name = uf.fapyc_get_part_name(i)
        cmpOpts = uf.fapyc_get_part_cmpopts(i)
        for x in cmpOpts:
            print(x,':',cmpOpts[x])
  • Part file-to-file decompression:
    from fapyc import Unfapyc
    uf = Unfapyc(filename = your_fapec_file) 
    uf.decompress(partindex = part_index, output = your_fapec_file + ".restored") 
  • Part file-to-buffer decompression:
    from fapyc import Unfapyc
    uf = Unfapyc(filename = your_fapec_file)
    uf.decompress(partindex = part_index)
    your_data_handling_routine(uf.outputBuffer)
  • Console compression:
     fapyc  {-ow} {-mt <t>} {-o /path/to/the/output/file} /path/to/the/file
  • Console decompression:
    unfapyc {-ow} {-mt <t>} {-o /path/to/the/output/file} /path/to/the/fapec/file
  • Console file information:
    unfapyc -list /path/to/the/fapec/file
  • Console part decompression:
    unfapyc {-ow} {-mt <t>} -part part_index /path/to/the/fapec/file

5.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")

Make plots from kmall stats file

In this example, the user provides a stats file generated when a kmall file is compressed with FAPEC

Release files for fapyc 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for fapyc 0.9.0
File
fapyc-0.9.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
fapyc-0.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
fapyc-0.9.0-cp314-cp314-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.15+ x86-64 Details
fapyc-0.9.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
fapyc-0.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
fapyc-0.9.0-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details
fapyc-0.9.0-cp313-cp313-macosx_10_15_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.15+ x86-64 Details
fapyc-0.9.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
fapyc-0.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
fapyc-0.9.0-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details
fapyc-0.9.0-cp312-cp312-macosx_10_15_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.15+ x86-64 Details
fapyc-0.9.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
fapyc-0.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
fapyc-0.9.0-cp311-cp311-macosx_15_0_arm64.whl CPython 3.11 CPython 3.11 macOS 15.0+ ARM64 Details
fapyc-0.9.0-cp311-cp311-macosx_10_15_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.15+ x86-64 Details
fapyc-0.9.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
fapyc-0.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
fapyc-0.9.0-cp310-cp310-macosx_15_0_arm64.whl CPython 3.10 CPython 3.10 macOS 15.0+ ARM64 Details
fapyc-0.9.0-cp310-cp310-macosx_10_15_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.15+ x86-64 Details
fapyc-0.9.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
fapyc-0.9.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
fapyc-0.9.0-cp39-cp39-macosx_15_0_arm64.whl CPython 3.9 CPython 3.9 macOS 15.0+ ARM64 Details
fapyc-0.9.0-cp39-cp39-macosx_10_15_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.15+ x86-64 Details

Total release size: 32.3 MB

Release files / fapyc-0.9.0-cp314-cp314-win_amd64.whl

Download URL fapyc-0.9.0-cp314-cp314-win_amd64.whl
Size 1.6 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
4598a399a12102e84da87f228628c8b4e4d79b1828d8434e8b849d6e456e7234
BLAKE2b-256 checksum
How to use checksums
d054d5ac8087a5265680be8a370df3e9e491f126fc04fcda2ff96e9b3c7ebba0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL fapyc-0.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.4 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e7dde7754f8669c782ae2ca5ef0ded6fbcc3d32fa848d3bc00c02a54eef5b61f
BLAKE2b-256 checksum
How to use checksums
120a7a39f2b555f9211aa62dae675db7b5972196afa08ce435e7f02d8586a2b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp314-cp314-macosx_10_15_x86_64.whl

Download URL fapyc-0.9.0-cp314-cp314-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
1882cc4f046e32b5f6390fc7c247edb4311625c760c2e68aead75722f22e864c
BLAKE2b-256 checksum
How to use checksums
fda823f38862fd6b953b0356fd6f5ad6d05d65db038ca11cc72e6df585210f52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp313-cp313-win_amd64.whl

Download URL fapyc-0.9.0-cp313-cp313-win_amd64.whl
Size 1.5 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
31efdb56f57b976de53dd850d2f0ee3a0564f80780eaeae1e61644f9bf6ab7d0
BLAKE2b-256 checksum
How to use checksums
de76a9b4ab6c3737716378740af66031d8b0ab5909542917ff072de1b1ed02c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL fapyc-0.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.5 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3330cefdcacd60becffec27f1bf3a5c5f07a596aeaf385c5644a740675affe98
BLAKE2b-256 checksum
How to use checksums
a9f5d3736a5857f8d022a28814b982518af9e74320510540164c3b6f86c88de3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp313-cp313-macosx_15_0_arm64.whl

Download URL fapyc-0.9.0-cp313-cp313-macosx_15_0_arm64.whl
Size 1.3 MB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
f7350b4e478d81abe05ec8cc5bd0cc66040f4be21767a877850832698492c306
BLAKE2b-256 checksum
How to use checksums
0fea32e03dc9d970844885bcaedb3cc620f7a791b3c872ea6257dea8055ed30f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp313-cp313-macosx_10_15_x86_64.whl

Download URL fapyc-0.9.0-cp313-cp313-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags CPython 3.13 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
bed343387fc21d462531d773ddd1ca6202f8fae8294c73caf76bd52ebd6c5579
BLAKE2b-256 checksum
How to use checksums
221c717b16da1a36ec7486697e8189234a24c1f73ac5661378c6b25113d44043
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp312-cp312-win_amd64.whl

Download URL fapyc-0.9.0-cp312-cp312-win_amd64.whl
Size 1.5 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
ad5bc6a09d8b74b30f846027f44586120282d53cdeb292287aa0229e54d6a2e6
BLAKE2b-256 checksum
How to use checksums
9f0717413b24f978d56ef1f17bf939101fcb339cb7d7519f9665489e206b9bec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL fapyc-0.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.5 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ccdb50862c5cfd71cbf6cb11d15062494262df60ad491ee32ed17182ec687bbd
BLAKE2b-256 checksum
How to use checksums
670e1d46983a70e882a036711bf3ab113796a9d5193558b11c91c7fb3ddb37d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp312-cp312-macosx_15_0_arm64.whl

Download URL fapyc-0.9.0-cp312-cp312-macosx_15_0_arm64.whl
Size 1.3 MB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
7401eb38d33cfd985f3f2084b5df3879973c985f7b13c39f9984fabc57034759
BLAKE2b-256 checksum
How to use checksums
d549a258239459596e0ac5fb7129c42601fc7991bf3b273a3ae12b1dd4e23ff8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp312-cp312-macosx_10_15_x86_64.whl

Download URL fapyc-0.9.0-cp312-cp312-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
879c5354f5cb4da03feb4de1809850e1902f9d427f0a31cdfd0922612724d75e
BLAKE2b-256 checksum
How to use checksums
4a59c0e8a7ffdfc9112119c1f77d6c7b2725e2a49dbba774bb62cd5ee91b2418
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp311-cp311-win_amd64.whl

Download URL fapyc-0.9.0-cp311-cp311-win_amd64.whl
Size 1.5 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
bd0f477e50edf5c570f611c03334bdc01dd7e0600299ae56936cdcb43051c28e
BLAKE2b-256 checksum
How to use checksums
b6e93397c1f46583a53fc7e8f6e7fc74dc3609c6e00d0b5225abaa4e6b962cde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL fapyc-0.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
be43d5b80acc8150d52eee111cba05ea3da1612f4228ad0f68d28a5673e81966
BLAKE2b-256 checksum
How to use checksums
2f4d92c4052158968f7cd1f551d094cbc4503843369baa191b42eb700f0bc30f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp311-cp311-macosx_15_0_arm64.whl

Download URL fapyc-0.9.0-cp311-cp311-macosx_15_0_arm64.whl
Size 1.3 MB
Tags CPython 3.11 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
436ff2ae412948c0b5fbd0a8b6b6146124043ff2bf908cfc5e70a3292f77c1e4
BLAKE2b-256 checksum
How to use checksums
ba5544a68c0363163bcb503550fb0f420da386e54405840bb5f4f12c989f1681
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp311-cp311-macosx_10_15_x86_64.whl

Download URL fapyc-0.9.0-cp311-cp311-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
9c8086d41d7e3506a00cc7cb550712e667b48ccb03c90a51996756f54ce34d56
BLAKE2b-256 checksum
How to use checksums
9b022c725fbaf3fe545296308bd3bee6a6e0abd30e6dc22ae2a868706bca50aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp310-cp310-win_amd64.whl

Download URL fapyc-0.9.0-cp310-cp310-win_amd64.whl
Size 1.5 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
25102da46d54af2b570fadf1c7fd02b0f998c9db26f62ba48cc35120345f6861
BLAKE2b-256 checksum
How to use checksums
28e9bdbf9cc10bb3b2147ec9a8bc229d8c10c10f3a9f80c2051ca320ebfc5014
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL fapyc-0.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.5 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ae78b3cd3244495d6e8fce60f1e62fa174b78371a75bca38aeeeda8cf2177aa4
BLAKE2b-256 checksum
How to use checksums
3fbc3d9a15fc9ee3f7e65627dc42ec89da6284b145824d7335cf159c2c11c3a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp310-cp310-macosx_15_0_arm64.whl

Download URL fapyc-0.9.0-cp310-cp310-macosx_15_0_arm64.whl
Size 1.3 MB
Tags CPython 3.10 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
1c8de077749a621c56de809d463e8475a6b48846d433825822df2e318d8206d3
BLAKE2b-256 checksum
How to use checksums
edfc820ae0f15b1f25319eba96b230c36a5b175d863521d8b06c2e1591855f46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp310-cp310-macosx_10_15_x86_64.whl

Download URL fapyc-0.9.0-cp310-cp310-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags CPython 3.10 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
ea72fd933c11c8c51bdf33b8ed79f4e3f508b84e2960654fad52aa2d5b754271
BLAKE2b-256 checksum
How to use checksums
c038d4c0c47823c53d604428fdc4ccc7429a2838c52e5a9f5bc985b4369a6891
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp39-cp39-win_amd64.whl

Download URL fapyc-0.9.0-cp39-cp39-win_amd64.whl
Size 1.5 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
85d7f680a5bfb54846bf3b3c0eb238ef437d415e71f53941e65ac372015f4482
BLAKE2b-256 checksum
How to use checksums
01e91a67b4dc383c692e61114fd30a8a0091c4175c5f86057a677da8d650db0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL fapyc-0.9.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.4 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
c9b715555c9364acdb06de5e45e9c90e86b58e59dea9c93ad91ae1d9f2bb71b8
BLAKE2b-256 checksum
How to use checksums
96b7382e44afcc3e7fbbddca71f69749c32cf9b337ccf4b103c6d7454d03edad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp39-cp39-macosx_15_0_arm64.whl

Download URL fapyc-0.9.0-cp39-cp39-macosx_15_0_arm64.whl
Size 1.3 MB
Tags CPython 3.9 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
053af609fb9c628968ce5a81303864757bf6f93a46376af8b90bf1c8eaad5033
BLAKE2b-256 checksum
How to use checksums
4ea5f244e986204bde0aaf3b15075219120cf1145400347e3620464359a0b445
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / fapyc-0.9.0-cp39-cp39-macosx_10_15_x86_64.whl

Download URL fapyc-0.9.0-cp39-cp39-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags CPython 3.9 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
ea3a62d0575aee6fd99db7565525dc2933304ced20d1d0153e3a11cc8b1ece79
BLAKE2b-256 checksum
How to use checksums
4d4e02a2f273c2b3461758243febbc78c937db83ee522c14e10d14cd2dde0890
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release history Release notifications | RSS feed

This release

0.9.0 This release

23 release files

0.8.0

24 release files

0.7.2

24 release files

0.7.1

28 release files

0.7.0

28 release files

0.6.2

7 release files

0.6.1

28 release files

0.6.0

28 release files

0.5.0

28 release files

0.3.7

28 release files

0.3.6

14 release files

0.3.5

28 release files

0.3.4

28 release files

0.3.3

28 release files

0.3.2

21 release files

0.3.1

21 release files

0.3.0

14 release files

0.2.0

6 release files

0.1.0

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page