Skip to main content

Utilities for parsing files in a directory based on a file name pattern.

Project description

Filepattern

Documentation Status PyPI PyPI - Downloads Bower

The filepattern utility is used to store files that follow a pattern, where the pattern is analogous to a simplified regular expression. The need for filepattern arises in situations where large amounts of data with a systematic naming convention needs to be filtered by patterns in the naming. For example, one may have a directory containing segmented images where the name contains information such as the channel, the column value, and the row value. filepattern provides the ability to extract all images containing such a naming pattern, filter by the row or column value, or group files by one or more of the aforementioned variables.

Summary

Install

filepattern is both pip and conda installable by running pip install filepattern or conda install filepattern -c conda-forge

Build and Install

Alternatively, filepattern can either be build inside a conda environment or independently outside of it directly from the source.

Inside Conda

filepattern uses a CMake build system. Below is an example of how to build filepattern Python package inside a conda environment on Linux.

git clone https://github.com/PolusAI/filepattern.git
cd filepattern
conda install -y -c conda-forge compilers --file ci-utils/envs/conda_cpp.txt --file ci-utils/envs/conda_py.txt
CMAKE_ARGS="-DCMAKE_PREFIX_PATH=$CONDA_PREFIX -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX " python -m pip install . -vv

Without Using Conda

To build filepattern outside of a conda environment, use the following example.

git clone https://github.com/PolusAI/filepattern.git
cd filepattern
mkdir build_dep
cd build_dep
bash ../ci-utils/install_prereq_linux.sh
cd ..
export FILEPATTERN_DEP_DIR=./build_dep/local_install
python -m pip install . -vv

C++ Library

filepattern also comes with a C++ API. To build and install filepattern as a C++ library, following the steps below.

git clone https://github.com/PolusAI/filepattern.git
cd filepattern
mkdir build
cd build
bash ../ci-utils/install_prereq_linux.sh
cmake -Dfilepattern_SHARED_LIB=ON -DCMAKE_PREFIX_PATH=./local_install -DCMAKE_INSTALL_PREFIX=./local_install ../src/filepattern/cpp/
make -j4
make install

To link filepattern with the client code, use the following CMake statements.

find_package(filepattern REQUIRED)
target_link_libraries(client_executable PRIVATE filepattern::filepattern)

Java API

filepattern also supplies a Java API. To add filepattern as a dependency to a project, the following can be added to the pom.xml of the maven project.

<dependencies>
    <dependency>
        <groupId>ai.polus.utils</groupId>
        <artifactId>filepattern</artifactId>
        <version>LATEST</version>
    </dependency>
</dependencies>

The Java API can also be built from source using Maven. To build the project, run

git clone https://github.com/PolusAI/filepattern.git
cd filepattern
mvn clean install

To build a jar instead of installing filepattern, mvn clean package can be used in place of mvn clean install.

For more information of the Java API, see the Java API documentation

Filepattern

When only a path to a directory and a pattern are supplied to the constructor of filepattern, filepattern will iterate over the directory, matching the filenames in the directory to the filepattern. The filepattern can either be supplied by the user or can be found using the infer_pattern method of filepattern. For example, consider a directory containing the following files,

img_r001_c001_DAPI.tif
img_r001_c001_TXREAD.tif
img_r001_c001_GFP.tif

In each of these filenames, there are three descriptors of the image: the row, the column, and the channel. To match these files, the pattern img_r{r:ddd}_c{c:ddd}_{channel:c+} can be used. In this pattern, the named groups are contained within the curly brackets, where the variable name is before the colon and the value is after the colon. For the value, the descriptors d and c are used, which represent a digit and a character, respectively. In the example pattern, three d's are used to capture three digits. The + after c denotes that one or more characters will be captured, which is equivalent to [a-zA-z]+ in a regular expression. The + symbol may be used after either d or c.

To have filepattern guess what the pattern is for a directory, the static method infer_pattern can be used:

import filepattern as fp

path = 'path/to/directory'

pattern = fp.infer_pattern(path)

print(pattern)

The result is:

img_r001_c001_{r:c+}.tif

Note that the infer_pattern can also guess the patterns from stitching vectors and text files when a path to a text file is passed, rather than a path to a directory.

To retrieve files from a directory that match the filepattern, an iterator is called on the FilePattern object, as shown below. A user specified custom pattern, such as the one below, or the guessed pattern can be passed to the constructor.

import filepattern as fp
import pprint

filepath = "path/to/directory"

pattern = "img_r{r:ddd}_c{c:ddd}_{channel:c+}.tif"

files = fp.FilePattern(filepath, pattern)

for file in files():
    pprint.pprint(file)

The output is:

({'c': 1, 'channel': 'DAPI', 'r': 1},
 ['path/to/directory/img_r001_c001_DAPI.tif'])
({'c': 1, 'channel': 'TXREAD', 'r': 1},
 ['path/to/directory/img_r001_c001_TXREAD.tif'])
({'c': 1, 'channel': 'GFP', 'r': 1},
 ['path/to/directory/img_r001_c001_GFP.tif'])

As shown in this example, the output is a tuple where the first member is a map between the group name supplied in the pattern and the value of the group for each file name. The second member of the tuple is a vector containing the path to the matched file. The second member is stored in a vector for the case where a directory is supplied with multiple subdirectories. In this case, a third optional parameter can be passed to the constructor. If the parameter recursive is set to True, a recursive directory iterator will be used, which iterates over all subdirectories. If the basename of two files from two different subdirectories match, filepattern will add the path of the file to the vector in the existing tuple rather than creating a new tuple.

For example, consider the directory with the structure

/root_directory
    /DAPI
        img_r001_c001.tif
    /GFP
        img_r001_c001.tif
    /TXREAD
        img_r001_c001.tif

In this case, the subdirectories are split by the channel. Recursive matching can be used as shown below.

import filepattern as fp
import pprint

filepath = "path/to/root/directory"

pattern = "img_r{r:ddd}_c{c:ddd}.tif"

files = fp.FilePattern(filepath, pattern, recursive=True)

for file in files():
    pprint.pprint(file)

The output of this case is:

({'c': 1, 'r': 1},
 ['path/to/root/directory/DAPI/img_r001_c001.tif',
  'path/to/root/directory/GFP/img_r001_c001.tif',
  'path/to/root/directory/TXREAD/img_r001_c001.tif'])

Floating Point Support

`filepattern` has the ability to capture floating point values in file patterns. For example, if we have a set of files
img_r0.05_c1.15.tif
img_r1.05_c2.25.tif
img_r2.05_c3.35.tif

We can capture the values in a couple of different ways. Similar to capturing digits, the character f can be used to capture an element of a floating point number. Note that with this method, the decimal point in the number must be captured by an f. For example, in the file img_r0.05_c1.15.tif, the floating point numbers would be capture with ffff. The code to utilize this method is

filepath = "path/to/directory"

pattern = "img_r{r:ffff}_c{c:ffff}.tif"

files = fp.FilePattern(filepath, pattern)

for file in files():
    pprint.pprint(file)

The result is:

({'c': 1.15, 'r': 0.05},
 ['path/to/directory/img_r0.05_c1.15.tif'])
({'c': 2.25, 'r': 1.05},
 ['path/to/directory/img_r1.05_c2.25.tif'])
({'c': 3.35, 'r': 2.05},
 ['path/to/directory/img_r2.05_c3.35.tif'])

To capture floating point numbers with an arbitrary number of digits, we can use f+. This method operates in the same way as using d+ or c+, where all digits (and the decimal point) will be captured for a floating point of any length. The code for this method is

filepath = "path/to/directory"

pattern = "img_r{r:f+}_c{c:f+}.tif"

files = fp.FilePattern(filepath, pattern)

for file in files():
    pprint.pprint(file)

The result of this code is the same as the previous example.

The final method for capturing floating points is to use d to capture the digits and to add the decimal point where needed. For example, in the file img_r0.05_c1.15.tif, the floating point numbers could be captured using d.dd. The code for this method is:

filepath = "path/to/directory"

pattern = "img_r{r:d.dd}_c{c:d.dd}.tif"

files = fp.FilePattern(filepath, pattern)

for file in files():
    pprint.pprint(file)

Once again, the results are the same as the first example.

Note that d can be used to specify even more specific floating points. For example, if we want to capturing all floating points with one digit in the whole part and an arbitrary number of digits in the decimal, we can add d.d+ for the pattern. Similarly, this could be used in a reverse manner to capture an arbitrary number of digits in the whole part using d+.ddd.

Group By

If images need to be processed in a specific order, for example by the row number, the group_by function is used. With the directory

img_r001_c001_DAPI.tif
img_r002_c001_DAPI.tif
img_r001_c001_TXREAD.tif
img_r002_c001_TXREAD.tif
img_r001_c001_GFP.tif
img_r002_c001_GFP.tif

the images can be returned in groups where r is held constant by passing the parameter group_by='r' to the object iterator.

import filepattern as fp
import pprint

filepath = "path/to/directory"

pattern = "img_r{r:ddd}_c{c:ddd}_{channel:c+}.tif"

files = fp.FilePattern(filepath, pattern)

for file in files(group_by='r'):
    pprint.pprint(file)

The output is:

('r': 1, [({'c': 1, 'channel': 'DAPI', 'file': 0, 'r': 1},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_DAPI.tif']),
 ({'c': 1, 'channel': 'TXREAD', 'file': 0, 'r': 1},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_TXREAD.tif']),
 ({'c': 1, 'channel': 'GFP', 'file': 0, 'r': 1},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_GFP.tif'])])
('r': 2, [({'c': 1, 'channel': 'DAPI', 'file': 0, 'r': 2},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r002_c001_DAPI.tif']),
 ({'c': 1, 'channel': 'GFP', 'file': 0, 'r': 2},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r002_c001_GFP.tif']),
 ({'c': 1, 'channel': 'TXREAD', 'file': 0, 'r': 2},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r002_c001_TXREAD.tif'])])

Note that the return of each call is a tuple where the first member is the group_by variable mapped to the current value and the second member is a list of files where the group_by variable matches the current value.

Get Matching

To get files where the variable matches a value, the get_matching method is used. For example, if only files from the TXREAD channel are needed, get_matching(channel=['TXREAD'] is called.

filepath = "/home/ec2-user/Dev/FilePattern/data/example"

pattern = "img_r{r:ddd}_c{c:ddd}_{channel:c+}.tif"

files = fp.FilePattern(filepath, pattern)

matching = files.get_matching(channel=['TXREAD'])

pprint.pprint(matching)

The output is:

[({'c': 1, 'channel': 'TXREAD', 'r': 1},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_TXREAD.tif']),
 ({'c': 1, 'channel': 'TXREAD', 'r': 2},
  ['/home/ec2-user/Dev/FilePattern/data/example/img_r002_c001_TXREAD.tif'])]

Text files

filepattern can also take in a text file as an input rather than a directory. To use this functionality, a path to a text file is supplied to the path variable rather than a directory. When a text file is passed as input, each line of the text file will be matched to the pattern. For example, a text file containing containing the strings

img_r001_c001_DAPI.tif
img_r001_c001_TXREAD.tif
img_r001_c001_GFP.tif

can be matched to the pattern img_r{r:ddd}_c{c:ddd}_{channel:c+}.tif with:

import filepattern as fp
import pprint

filepath = "path/to/file.txt"

pattern = "img_r{r:ddd}_c{c:ddd}_{channel:c+}.tif"

files = fp.FilePattern(filepath, pattern)

for file in files():
    pprint.pprint(file)

The output is:

({'c': 1, 'channel': 'DAPI', 'r': 1},
 ['img_r001_c001_DAPI.tif'])
({'c': 1, 'channel': 'TXREAD', 'r': 1},
 ['img_r001_c001_TXREAD.tif'])
({'c': 1, 'channel': 'GFP', 'r': 1},
 ['img_r001_c001_GFP.tif'])

After calling filepattern on a text file, the group_by and get_matching functionality can be used the same as outlined in the FilePattern section.

Stitching vectors

filepattern can also take in stitching vectors as input. In this case, a path to a text file containing a stitching vector is passed to the path variable. A stitching vector has the following form,

file: x01_y01_wx0_wy0_c1.ome.tif; corr: 0; position: (0, 0); grid: (0, 0);
file: x02_y01_wx0_wy0_c1.ome.tif; corr: 0; position: (3496, 0); grid: (3, 0);
file: x03_y01_wx0_wy0_c1.ome.tif; corr: 0; position: (6992, 0); grid: (6, 0);
file: x04_y01_wx0_wy0_c1.ome.tif; corr: 0; position: (10488, 0); grid: (9, 0);

This stitching vector can be processed using

import filepattern as fp

filepath = 'path/to/stitching/vector.txt'

pattern = 'x0{x:d}_y01_wx0_wy0_c1.ome.tif'

files = fp.FilePattern(filepath, pattern)

for file in files():
    pprint.pprint(files)

The output is:

({'correlation': 0, 'gridX': 0, 'gridY': 0, 'posX': 0, 'posY': 0, 'x': 1},
 ['x01_y01_wx0_wy0_c1.ome.tif'])
({'correlation': 0, 'gridX': 3, 'gridY': 0, 'posX': 3496, 'posY': 0, 'x': 2},
 ['x02_y01_wx0_wy0_c1.ome.tif'])
({'correlation': 0, 'gridX': 6, 'gridY': 0, 'posX': 6992, 'posY': 0, 'x': 3},
 ['x03_y01_wx0_wy0_c1.ome.tif'])
({'correlation': 0, 'gridX': 9, 'gridY': 0, 'posX': 10488, 'posY': 0, 'x': 4},
 ['x04_y01_wx0_wy0_c1.ome.tif'])

As shown in the output, filepattern not only captures the specified variables from the pattern, but also captures the variables supplied in the stitching vector.

Out of core

filepattern has the ability to use external memory when the dataset is too large to fit in main memory, i.e. it utilizes disk memory along with RAM. It has the same functionality as filepattern, however it takes in an addition parameter called block_size, which limits the amount of main memory used by filepattern. Consider a directory containing the files:

img_r001_c001_DAPI.tif
img_r001_c001_TXREAD.tif
img_r001_c001_GFP.tif

This directory can be processed with only one file in memory as:

import filepattern as fp
import pprint

filepath = "path/to/directory"

pattern = "img_r{r:ddd}_c{c:ddd}_{channel:c+}.tif"

files = fp.FilePattern(filepath, pattern, block_size="125 B")


for file in files():
    pprint.pprint(file)

The output from this example is:

({'c': 1, 'channel': 'DAPI', 'r': 1},
 ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_DAPI.tif'])
({'c': 1, 'channel': 'TXREAD', 'r': 1},
 ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_TXREAD.tif'])
({'c': 1, 'channel': 'GFP', 'r': 1},
 ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_GFP.tif'])

Note that the block_size argument is provided in bytes (B) in this example, but also has the options for kilobytes (KB), megabytes (MB), and gigabytes (GB). The block_size must be under 1000 GB.

Group by and get matching

The out of core version of filepattern contains the same functionalities as the in memory version. group_by is called the same way, i.e.,

for file in files(group_by="r"):
    pprint.pprint(file)

The output remains identical to the in memory version.

The get_matching functionality remains the same, however the API is slightly different. In this case, get_matching is called as

for matching in files.get_matching(channel=['TXREAD'])
    pprint.pprint(matching)

where the output is returned in blocks of block_size. The output is:

({'c': 1, 'channel': 'TXREAD', 'r': 1},
 ['/home/ec2-user/Dev/FilePattern/data/example/img_r001_c001_TXREAD.tif'])

Out of Core: text files and stitching vectors

Out of core processing can also be used for stitching vectors and text files. To utilize this functionality, call filepattern the same way as described previously, but add in the block_size parameter, as described in the (Out of Core)[#out-of-core] section.

Authors

Jesse McKinzie(Jesse.McKinzie@axleinfo.com, jesse.mckinzie@nih.gov) Nick Schaub (nick.schaub@nih.gov, nick.schaub@labshare.org)

License

This project is licensed under the MIT License Creative Commons License - see the LICENSE file for details

Acknowledgments

  • This utility was inspired by the notation found in the MIST algorithm developed at NIST.

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

filepattern-2.1.4-cp313-cp313-win_amd64.whl (307.7 kB view details)

Uploaded CPython 3.13Windows x86-64

filepattern-2.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

filepattern-2.1.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

filepattern-2.1.4-cp313-cp313-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

filepattern-2.1.4-cp313-cp313-macosx_10_15_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13macOS 10.15+ x86-64

filepattern-2.1.4-cp312-cp312-win_amd64.whl (307.7 kB view details)

Uploaded CPython 3.12Windows x86-64

filepattern-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

filepattern-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

filepattern-2.1.4-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

filepattern-2.1.4-cp312-cp312-macosx_10_15_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 10.15+ x86-64

filepattern-2.1.4-cp311-cp311-win_amd64.whl (308.0 kB view details)

Uploaded CPython 3.11Windows x86-64

filepattern-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

filepattern-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

filepattern-2.1.4-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

filepattern-2.1.4-cp311-cp311-macosx_10_15_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 10.15+ x86-64

filepattern-2.1.4-cp310-cp310-win_amd64.whl (306.7 kB view details)

Uploaded CPython 3.10Windows x86-64

filepattern-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

filepattern-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

filepattern-2.1.4-cp310-cp310-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

filepattern-2.1.4-cp310-cp310-macosx_10_15_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10macOS 10.15+ x86-64

filepattern-2.1.4-cp39-cp39-win_amd64.whl (305.1 kB view details)

Uploaded CPython 3.9Windows x86-64

filepattern-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

filepattern-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

filepattern-2.1.4-cp39-cp39-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

filepattern-2.1.4-cp39-cp39-macosx_10_15_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9macOS 10.15+ x86-64

File details

Details for the file filepattern-2.1.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f7f38d540e8f3ac337f49f34bde13d83696b406e83b082ce788ec2f928d213c1
MD5 c384c95c2f5608ce5e34a4ef58f31ea4
BLAKE2b-256 a1149c53da4142f21d9ff75d0fee10a33f68a73fbfc7892021d4f9ba131bad29

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5e372b684cf25ec32afacc21f68c4c6f05a16ced512bae40739fbcd902db93a1
MD5 c4937fb51f662421f6ee33ba5b1dc82a
BLAKE2b-256 8a092e54634aee5fe491d08bda7256df3fd5907679ceb05b3fbeac7853d41713

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c66976f51c3b3f02ef9414d2bc153b2b584fe72120b90b7c7120053bf321b438
MD5 4b21f0183388e9025b3385b6f8c8319d
BLAKE2b-256 4f22caea6b7c8823ccbd1efc6cf1934ab79d6d48d5cedb692075f53da1597f30

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1a9d8737af9c5e50a7ba0e88a36bee1d451d1603f6ea3cc0ca8985c5fb24cf4
MD5 0041ab385ccdc3ceff5c2e3df4cd7050
BLAKE2b-256 9a529d754d233b6800ca9ef6d62ebcb3afbc80c54257b93a46a63eef5a9bf697

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp313-cp313-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp313-cp313-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 5eb27ff22b8a7cf3f08daf6e4bda5968f5ce3a65a5f61e0236e8fcb06c9bd08d
MD5 d9bc9817764d8f0fcfdfb7f7bd1a7f11
BLAKE2b-256 9b6ef1705d9a5f0eed6baff102b5423ede83be8877d718363a668274955e7966

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ce17969e99f5e0d837153ab2a9ef04852ad35a29edabdcbded381c7e8351bc4b
MD5 f6a2481e869ab1316645ef0c8e2aea69
BLAKE2b-256 726e28f630cedc6ef13084f004ab95c94f2e32f89e3b5c8970051348db555275

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 956f3076857f60063c330d969d542edb78573f4147fce528d4411baac04423b1
MD5 19984610af9678ca0a6400518e96b0bc
BLAKE2b-256 f5aa9b957dd92d39879ad6d0dffecf921b87c9a1d1015ca06582fe7f5d9206c0

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2ed4716567c39f83c386d5392e33808ad04b5a710269d022d4299e0f07424181
MD5 96244a81976143e7e02ec32d67989c21
BLAKE2b-256 e031400defdc2bd02ea76f4a3296d253e92d85a70c7e4410b2cfd7d7a3b892a2

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78ae593526b024425888658fdaa05743879f71fdbafcc5858874c5c0840faad3
MD5 4161b2051c4298ee01e7fd0f2fce7572
BLAKE2b-256 47a0001a0f4fba41ed022438e1d4269a19754925bccad8a2a0e4d348614981e4

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp312-cp312-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp312-cp312-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 692bcf4cf24282a6fecaac89ac992649761582865b534430a8ed1b637222e6aa
MD5 778c5af3dc53cb311c4f02d4131b7e78
BLAKE2b-256 483f75c47a463817355fb67be00b79d3b148a1556886339999e1684bd73bb032

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c5eed2dd5b4ce9e4d4576813122a652cef5bace222dbe0274d8d0ce62ea372d5
MD5 497a643aa604e51e235b75726b8d147b
BLAKE2b-256 2276a2f57aced87b733ea14e0c2749aca200d8c5c842e46d430430c0a933b0ff

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 941fecd2855aed738174141a4e227b3f04e5a12e13f8187db960e22d3d7b50ae
MD5 c8654447f43d9caf4d21ca6d10a9c6b7
BLAKE2b-256 d32147cd0adb3eb9663cb91879e2fa714f13d5271fc910e9f31e1d044adf84bb

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 90a7d10e0410eea7e12f82f04e23966f51a42a447c8c02ceecd0ac0a9cc7a64b
MD5 7f20fcf96d586926de543a405269b650
BLAKE2b-256 52e9d31eb22d84b85258135b9b6409f806bf97de3575443995878026b1cbf3cd

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32d640f60828b5385e9afc7931732e7d56073d081ece11e21a2e1fdc2b22f04b
MD5 9c9dea40156377b389829af004d12595
BLAKE2b-256 8b721a66e93b947012932efbf8c902d54be3fae879a60b3c5dded2be329c5e4f

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 fcfc93c353cc8643d8eee92acb4234b33a00e3b195862165f2202fcd31d01c56
MD5 a33926329866b60d85df6969d009ac56
BLAKE2b-256 99fbf2f79ebeecccf72f602c1c759414711fbf82e7378fedfd27315f12ed94c5

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 aaf5a62339103e3be9ce6a69976eb511db6da54b5e59e1ad93a22b7815a0b6ae
MD5 4e78087d23e0af87e594f0dde655dcf4
BLAKE2b-256 ef80d761240caecdcaa7ed110cdcf1bce431fe5b5b7c27583da7f76c3e64b477

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1e88ea8a5f7e58fb0fb6f24657c3a3e99f22df281a79784201255326d0aa502f
MD5 af7b3417493a7f52ce4e929ec0d4d73e
BLAKE2b-256 753ed601d3bf9db050302ce9b8033b823042715ff98ddf71c52228bf8f9ec4e3

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5462e1bd89008177e5894699c38d246891b75fd7f434a06bf1a06938193f603a
MD5 29f74e3ec2e1570d99f1c5bf63d31447
BLAKE2b-256 13c62fcbb9918d12cc75b3a0a5606ea1756a15448d51aa3dc2cdf54457a1a4c2

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 998b4fb8b6d26c952dfc4e2d7946b75ff52429446ecead6786642c8f4a2e6e57
MD5 293202f611f145a93164968c95c833d0
BLAKE2b-256 568b5640f40ae998e5aeb6945d27d7f6bfcb35a0f196d9411a7522831dcdd35a

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 9911122bf4162f60aa4bd29356b5424c452b3ddd4997f6aa09ab515b110114fe
MD5 3604e122e02eea36d1dbecc2c64d2d91
BLAKE2b-256 f9b63c052e336d22e44605e8cc0aef24b2a8da02868454afd3333d19645f8998

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: filepattern-2.1.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 305.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for filepattern-2.1.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 15c583ddb8bf1f5301bf1ec1bfd3e7fedb001d7a0a7bb6dedee1a3ffa2c3772f
MD5 131e661a3d6abcd12b4520dc938749fb
BLAKE2b-256 1a580c9a6092eea357e7bc7bbad67d200d28b002bbd12848e1cfdcfecbbe51cf

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f31bf3e6ca154f5c5722f2f467f78d9321cfce148249b2d3675c0e5d17cfd9ff
MD5 48c31ab8579c13312907d92577f9d24a
BLAKE2b-256 ba3dc4736c83172bd2555f8c4d056ca51fef3911c1edfb7dd1a2eae293110e2a

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ea7ef8c732413fcbe63db6e91cbb961697e6c8bffd8a688b4cae259b7dec4f45
MD5 fbde661706bba5c7ddd26164dbdd267a
BLAKE2b-256 b6ccf8cce2d7addca5b582ce43d96d2cda6467254774f039c8399d1bc53f3a76

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5cebf61dbee8bc563e6962af1fa2788e18053bccd27f61960e4b1f37410db299
MD5 b1b5a2907601f59882f684c17e94dc78
BLAKE2b-256 eafa4c83afd261bbbb20a3a25dba1611ffccfd4c66c41786ee79d37b94a87a9c

See more details on using hashes here.

File details

Details for the file filepattern-2.1.4-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for filepattern-2.1.4-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 ba92134b98ad95ad22036f923f9961d4fa38d09434471c45aeb0dabeb206080f
MD5 83d937b528cb131fd664024347033382
BLAKE2b-256 a479c3db56cac295b06fa648676de0dc8cc214f486bfa2e62b493f5f6397e5c0

See more details on using hashes here.

Supported by

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