A Python wrapper for the FAPEC data compressor.
Project description
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()
-
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()
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
File details
Details for the file fapyc-0.7.0-cp312-cp312-win_amd64.whl
.
File metadata
- Download URL: fapyc-0.7.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/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 625e15d604976ed5f01d9f46d58c418c4b3d2087d4362af27ed40e1f42551b5b |
|
MD5 | 19eabebe86d4442ba843dc5cd6bfdbf7 |
|
BLAKE2b-256 | fef0ccb3d5724ab384d6659aa8c83bd26c47a2ac3ad21213851203ec831ff908 |
File details
Details for the file fapyc-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb66cc76c6c5da3deb290b84e6badb9a86132b23c0adcb74064efcf750739d76 |
|
MD5 | 7fa0d6a55fa1b0f6871be76d61a8100d |
|
BLAKE2b-256 | 6eecee3ad5f9ba5ddd953f1d9f647c061ac5110a2eedfa931fe13ed0423d244e |
File details
Details for the file fapyc-0.7.0-cp312-cp312-macosx_13_0_arm64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp312-cp312-macosx_13_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.12, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad1e9f8d10c76f536e2852f881e1f6f1fbbeaea4aef5829090b6d0fa3cad61f2 |
|
MD5 | f05fbdd8a11a53ebde0c2c48b315eb38 |
|
BLAKE2b-256 | b2863d29ae7fc50d27a1c0bc558bc8112251e78565bffa75cd8ed1137e685e3d |
File details
Details for the file fapyc-0.7.0-cp312-cp312-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp312-cp312-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.12, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9de51606cbc2a89b9cee562f7be2c8f5510da06bab93473259d2ff7d4d771a59 |
|
MD5 | 692ec0142bb9af6e52474f1fc17cb032 |
|
BLAKE2b-256 | 63445d0e5508cfb53887e0596604d330d7cc4c1eedf0900052898c7e0d99631b |
File details
Details for the file fapyc-0.7.0-cp311-cp311-win_amd64.whl
.
File metadata
- Download URL: fapyc-0.7.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/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 779d591e52deef4954b745ad1e143d099aa4e54341096f1a3c46623c028ba77e |
|
MD5 | 0c96f4489c14d4f39eb46a98ec21551a |
|
BLAKE2b-256 | 93a9f7006b685df6564624017db9a792abeb6a8ae96a0a49d274328e83aa0e6a |
File details
Details for the file fapyc-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d8b6ca0ab4df777bb5160d79c668eb585bad44f2834178d45acaa7b83de26eb |
|
MD5 | f532625690b1b1ec7425576b19bca654 |
|
BLAKE2b-256 | bb04e56f295ca0ef74bab274f8ceec83a51dafd927b527aee156c19d655a543b |
File details
Details for the file fapyc-0.7.0-cp311-cp311-macosx_13_0_arm64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp311-cp311-macosx_13_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.11, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba2f7748f84de4b3f379e1b165965de58f1257027436d374352b8fc2a14664ed |
|
MD5 | 0246c45a48245a163ca612a7307521b8 |
|
BLAKE2b-256 | 3af040ab88f63242f97a26d3f53ff11d15f1f6896b5219a03bc6a0b35a43a176 |
File details
Details for the file fapyc-0.7.0-cp311-cp311-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp311-cp311-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.11, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c799555af361f14c399eac297760b17f705adf4ec40f109331e90662e3b011e7 |
|
MD5 | 082ebb4077eb7bc4ccf77dab9634fe99 |
|
BLAKE2b-256 | 05fe973891b17e45543187c49157defa89b4821a8f4bd419771cbcc41db30317 |
File details
Details for the file fapyc-0.7.0-cp310-cp310-win_amd64.whl
.
File metadata
- Download URL: fapyc-0.7.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/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 62ac3bcaacf68af45be477442a77bafcd3f771e7be901e8bd592f1fe42667f3c |
|
MD5 | 8e433cc816dc92da1bfa5208588e8285 |
|
BLAKE2b-256 | 03c391fae1d011d2b48ed5e0d05964118a53a7b73577406423f12d4ba90a1059 |
File details
Details for the file fapyc-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e0dbb81f6dee80484a89cb3230d6fc96b0be6eae963e4a056ce5a487ceca5d2 |
|
MD5 | c2728db74aec41e06640f761d8cd2bd2 |
|
BLAKE2b-256 | 913c5ae08317c7e89ac6c98af7a7a4c8a53b9bcc523e44b5f430916155d1cc88 |
File details
Details for the file fapyc-0.7.0-cp310-cp310-macosx_13_0_arm64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp310-cp310-macosx_13_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.10, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e10d1d41c750bdaa056a473a4d99a26b157ec1b1ed66a05c3d74ba1d3c85e027 |
|
MD5 | 223468d14a182ac24fd79176e82cd6a8 |
|
BLAKE2b-256 | 19261153ba7b51bbcbd86230c8ccafae329a18201a6cbfe9aa762a504fa0ba8c |
File details
Details for the file fapyc-0.7.0-cp310-cp310-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp310-cp310-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b5ea45167647cd9f74c64e54bc02d850c35ad0f8fb084b98e16908a0bdc902f |
|
MD5 | f39a39f8e4e55a7ecd6acb54d04a575d |
|
BLAKE2b-256 | 2a757ec9c2174f30dc3eb42f0be81795bbe39e1c31b8d2f7d1642ef5b58f3dc9 |
File details
Details for the file fapyc-0.7.0-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: fapyc-0.7.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/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12e27908a34b541c4b4c508cb76e1d5807c66bffef345385dbb8a7ffa73bbcf1 |
|
MD5 | 25511d4252305fbf4254d4ef9022e8b9 |
|
BLAKE2b-256 | b94892e905ed6ad29424818a152f1927e746cf1b0cbd4503605d5bd403025b06 |
File details
Details for the file fapyc-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d3c574e936b766f1b5ae08ce9ffb7664da46f7059f93804c64b86724277a14a1 |
|
MD5 | d4d34072fa3247c745e6ff8da7c4ba43 |
|
BLAKE2b-256 | c068e02d9509fa5a19e490f4384f83d44b4fde99a53aa204c3adb9c170505225 |
File details
Details for the file fapyc-0.7.0-cp39-cp39-macosx_13_0_arm64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp39-cp39-macosx_13_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.9, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0633bea6a0a9b7e5e9a5981b050f5e1e63299e75eafc65cddcf3e3279f654cdf |
|
MD5 | 46f1e33b9f6feb48de87be50181ece24 |
|
BLAKE2b-256 | 8897aec689570582b8f0f9d7724829657ea13ce52c8a16291d2eb53470c58948 |
File details
Details for the file fapyc-0.7.0-cp39-cp39-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp39-cp39-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf92f6d10d6b535d23dd95d6929e02aeb2aefbebb7449a48f4c66cc73e74d52a |
|
MD5 | 81bc9113da1de60c12576a9301467d7a |
|
BLAKE2b-256 | a4a9c0c81c52c92a07c32ff4a608b3d3f9517a8b413091c1060dd547e68eaa98 |
File details
Details for the file fapyc-0.7.0-cp38-cp38-win_amd64.whl
.
File metadata
- Download URL: fapyc-0.7.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/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 636e86059bc2e05c0fc1ebdc17b62f226ac12cadfdc44fdba069f2bcd38d6369 |
|
MD5 | 9abb39f9d9f9d96a8d9ac0e676959630 |
|
BLAKE2b-256 | 22695a9748ba1f80012c73b755add6e7d03f9c1f872fbdff5412ff9497db07e2 |
File details
Details for the file fapyc-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31cad198939dc76d9fccc54c31eb2de1410f21e88a21581a5f4a4a4e5766d976 |
|
MD5 | 1d31423c81219e84c3b095c8b505914c |
|
BLAKE2b-256 | c7913a8ca40aa2ad12d9f3aec7fc0f3d2b427b39dd743fc47dc39efe37681565 |
File details
Details for the file fapyc-0.7.0-cp38-cp38-macosx_13_0_arm64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp38-cp38-macosx_13_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.8, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a254db14c5064ed2e21582d8b9d2c14d77f0b97fb1155bc9a0e4173dca5b179e |
|
MD5 | 35ec1a3aeda176359e88e57af0322540 |
|
BLAKE2b-256 | a27e758fe906ed29ff33ade794026127de0c0ba3b12cfb33d3533860f5587728 |
File details
Details for the file fapyc-0.7.0-cp38-cp38-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp38-cp38-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.8, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c0efe34fed1affd7a5f752c792ffd08df540564af10bbcf039288810c333151 |
|
MD5 | bfcd47c3d304ad8b13d2bab6f9507cbb |
|
BLAKE2b-256 | 73bab775c00962ce355da1a2e2a806f8bda692b108dcef4db8d0077626183f68 |
File details
Details for the file fapyc-0.7.0-cp37-cp37m-win_amd64.whl
.
File metadata
- Download URL: fapyc-0.7.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/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 358ac35cf515882afc523b06b3ecf47da490eb11f1f807750a9747a50edf3880 |
|
MD5 | 0e6af1a014bcf36acb3b9f092999d622 |
|
BLAKE2b-256 | ecbe4b6a6aebe874d7a2c4f073d32008df11f9e98e016dab5ba7278b725bbf1f |
File details
Details for the file fapyc-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1279ca36d549d06de670b3651bb3adc347e70c5c76130b7af439b039fbc27e6 |
|
MD5 | 05b1b51d2b62693344ba768690d14a05 |
|
BLAKE2b-256 | be1a63df74711b2253e48c9184cd503819aae51bf01cfa23bb6d282e1360df2f |
File details
Details for the file fapyc-0.7.0-cp37-cp37m-macosx_13_0_arm64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp37-cp37m-macosx_13_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.7m, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0eb237e091da9fbeceab8b78a6c49f5be6c893277f734a84e53f6c8915ea340e |
|
MD5 | fd7776d88266bc496bedb71d7d9c56c2 |
|
BLAKE2b-256 | f3e74a3a966944efd1e883485749108a8b9dce468d6d4318f25c22a7f981267e |
File details
Details for the file fapyc-0.7.0-cp37-cp37m-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp37-cp37m-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.7m, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb02942fa57f203b60d2929d6b57abd779ad32d76a6aebc6b913dec420330a57 |
|
MD5 | 898c630e7a46c13fd8a8c8fb670f69db |
|
BLAKE2b-256 | 06b66e75aec35e884f9c2672e0f0b0cb29f337ea485ae2498c1fbc10380fe213 |
File details
Details for the file fapyc-0.7.0-cp36-cp36m-win_amd64.whl
.
File metadata
- Download URL: fapyc-0.7.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/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd29724ad488f2974d988756a9bf85191c7c6be75ba83a6d6b93e203e07c213c |
|
MD5 | f69fa7685cbb4cd739ac3f974f1e8e16 |
|
BLAKE2b-256 | 54f4565cfec91f892ccd11bb6cc66a82a4e6a8f9b3ba58ac1687d8267286f209 |
File details
Details for the file fapyc-0.7.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.6m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c418d0497ca3935a9719bf4c9077e629c47b04a3c71cd81e605d985096106f73 |
|
MD5 | 9edf6a82abd29ea8cb8fbcf0ed5901f8 |
|
BLAKE2b-256 | ca540f4edf9b9bafe9e5ad00707b523052797cc716e035df6e2c4ec501f29bca |
File details
Details for the file fapyc-0.7.0-cp36-cp36m-macosx_13_0_arm64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp36-cp36m-macosx_13_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.6m, macOS 13.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94c1fe098ce9681cae6d3ea02f3e9d030e462106b110a557b1fcf13ef949f70a |
|
MD5 | ef7d9dc89692068411c15d680c5109a1 |
|
BLAKE2b-256 | d73eb0c69603b9fc859b69c0bfc1279757022dbac071074fdc14debc42eff8e6 |
File details
Details for the file fapyc-0.7.0-cp36-cp36m-macosx_10_15_x86_64.whl
.
File metadata
- Download URL: fapyc-0.7.0-cp36-cp36m-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.6m, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e8089c0f561d32bfa8da3c2fba212a428a2961d14b00260ef7e2d1428aa0e040 |
|
MD5 | e8191552ea0c62f53e82638057ecd33e |
|
BLAKE2b-256 | affcf1d92739d5880f6c6b01e4e43a9e086dde4f9c44efa677c1fc4f467b312a |