Skip to main content

Scalable library for calculating features from intensity-label image data

Project description

Nyxus

Documentation Status PyPI PyPI Downloads Conda Conda Downloads

A scalable library for calculating features from intensity-label image data

Overview

Nyxus is a feature-rich, highly optimized, Python/C++ application capable of analyzing images of arbitrary size and assembling complex regions of interest (ROIs) split across multiple image tiles and files. This accomplished through multi-threaded tile prefetching and a three phase analysis pipeline shown below.

Nyxus can be used via Python or command line and is available in containerized form for reproducible execution. Nyxus computes over 450 combined intensity, texture, and morphological features at the ROI or whole image level with more in development. Key features that make Nyxus unique among other image feature extraction applications is its ability to operate at any scale, its highly validated algorithms, and its modular nature that makes the addition of new features straightforward.

Currently, Nyxus can read image data from OME-TIFF, OME-Zarr and DICOM 2D Grayscale images. It also has a Python API to support in-memory image data via Numpy array.

The docs can be found at Read the Docs.

Getting started

For use in python, the latest version of Nyxus can be installed via the Pip package manager or Conda package manager:

pip install nyxus

or

conda install nyxus -c conda-forge

Usage is very straightforward. Given intensities and labels folders, Nyxus pairs up intensity-label images and extracts features from all of them. A summary of the available feature are listed below.

from nyxus import Nyxus
nyx = Nyxus(["*ALL*"])
intensityDir = "/path/to/images/intensities/"
maskDir = "/path/to/images/labels/"
features = nyx.featurize_directory (intensityDir, maskDir)

Alternatively, Nyxus can process explicitly defined pairs of intensity-mask images thus specifying custom 1:N and M:N mapping between label and intensity image files. The following example extracts features from intensity images 'i1', 'i2', and 'i3' related with mask images 'm1' and 'm2' via a custom mapping:

from nyxus import Nyxus
nyx = Nyxus(["*ALL*"])
features = nyx.featurize_files(
    [
        "/path/to/images/intensities/i1.ome.tif", 
        "/path/to/images/intensities/i2.ome.tif",
        "/path/to/images/intensities/i3.ome.tif" 
    ], 
    [
        "/path/to/images/labels/m1.ome.tif", 
        "/path/to/images/labels/m2.ome.tif",
        "/path/to/images/labels/m2.ome.tif"
    ],
	False)

The features variable is a Pandas dataframe similar to what is shown below.

mask_image intensity_image label MEAN MEDIAN ... GABOR_6
0 p1_y2_r51_c0.ome.tif p1_y2_r51_c0.ome.tif 1 45366.9 46887 ... 0.873016
1 p1_y2_r51_c0.ome.tif p1_y2_r51_c0.ome.tif 2 27122.8 27124.5 ... 1.000000
2 p1_y2_r51_c0.ome.tif p1_y2_r51_c0.ome.tif 3 34777.4 33659 ... 0.942857
3 p1_y2_r51_c0.ome.tif p1_y2_r51_c0.ome.tif 4 35808.2 36924 ... 0.824074
4 p1_y2_r51_c0.ome.tif p1_y2_r51_c0.ome.tif 5 36739.7 37798 ... 0.854067
... ... ... ... ... ... ... ...
734 p5_y0_r51_c0.ome.tif p5_y0_r51_c0.ome.tif 223 54573.3 54573.3 ... 0.980769

Nyxus can also process intensity-mask pairs that are loaded as Numpy arrays using the featurize method. This method takes in either a single pair of 2D intensity-mask pairs or a pair of 3D arrays containing 2D intensity and mask images. There is also two optional parameters to supply names to the resulting dataframe, .

from nyxus import Nyxus
import numpy as np

nyx = Nyxus(["*ALL*"])

intens = np.array([
    [[1, 4, 4, 1, 1],
     [1, 4, 6, 1, 1],
     [4, 1, 6, 4, 1],
     [4, 4, 6, 4, 1]],
])

seg = np.array([
    [[1, 1, 1, 1, 1],
     [1, 1, 1, 1, 1],
     [0, 1, 1, 1, 1],
     [1, 1, 1, 1, 1]]
])

features = nyx.featurize(intens, seg)

The features variable is a Pandas dataframe similar to what is shown below.

mask_image intensity_image label MEAN MEDIAN ... GABOR_6
0 Segmentation1 Intensity1 1 45366.9 46887 ... 0.873016
1 Segmentation1 Intensity1 2 27122.8 27124.5 ... 1.000000
2 Segmentation1 Intensity1 3 34777.4 33659 ... 0.942857
3 Segmentation1 Intensity1 4 35808.2 36924 ... 0.824074
... ... ... ... ... ... ... ...
14 Segmentation2 Intensity2 6 54573.3 54573.3 ... 0.980769

Note that in this case, default names of virtual image files were provided for the mask_image and intensity_image columns. To override default names 'Intensity' and 'Segmentation' appearing in these columns, the optional arguments intensity_names and label_names are used by passing lists of names in. The length of the lists must be the same as the length of the mask and intensity arrays. The following example sets mask and intensity images in the output to desired values:

intens_names = ['int1', 'int2']
seg_names = ['seg1', 'seg2']
features = nyx.featurize(intens, seg, intens_name, seg_name)

The features variable will now use the custom names, as shown below

mask_image intensity_image label MEAN MEDIAN ... GABOR_6
0 seg1 int1 1 45366.9 46887 ... 0.873016
1 seg1 int1 2 27122.8 27124.5 ... 1.000000
2 seg1 int1 3 34777.4 33659 ... 0.942857
3 seg1 int1 4 35808.2 36924 ... 0.824074
... ... ... ... ... ... ... ...
14 seg2 int2 6 54573.3 54573.3 ... 0.980769

For more information on all of the available options and features, check out the documentation.

Nyxus can also be built from source and used from the command line, or via a pre-built Docker container.

Getting and setting parameters of Nyxus

All parameters to configure Nyxus are available to set within the constructor. These parameters can also be updated after the object is created using the set_params method. This method takes in keyword arguments where the key is a valid parameter in Nyxus and the value is the updated value for the parameter. For example, to update the coarse_gray_depth to 256 and the gabor_f0 parameter to 0.1, the following can be done:

from nyxus import Nyxus
nyx = Nyxus(["*ALL*"])
intensityDir = "/path/to/images/intensities/"
maskDir = "/path/to/images/labels/"
features = nyx.featurize_directory (intensityDir, maskDir)
nyx.set_params(coarse_gray_depth=256, gabor_f0=0.1)

A list of valid parameters is included in the documentation for this method.

To get the values of the parameters in Nyxus, the get_params method is used. If no arguments are passed to this function, then a dictionary mapping all of the variable names to the respective value is returned. For example,

from nyxus import Nyxus
nyx = Nyxus(["*ALL*"])
intensityDir = "/path/to/images/intensities/"
maskDir = "/path/to/images/labels/"
features = nyx.featurize_directory (intensityDir, maskDir)
print(nyx.get_params())

will print the dictionary

{'coarse_gray_depth': 256, 
'features': ['*ALL*'], 
'gabor_f0': 0.1, 
'gabor_freqs': [1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0], 
'gabor_gamma': 0.1, 
'gabor_kersize': 16, 
'gabor_sig2lam': 0.8, 
'gabor_theta': 45.0, 
'gabor_thold': 0.025, 
'ibsi': 0, 
'n_loader_threads': 1, 
'n_feature_calc_threads': 4, 
'neighbor_distance': 5, 
'pixels_per_micron': 1.0}

There is also the option to pass arguments to this function to only receive a subset of parameter values. The arguments should be valid parameter names as string, separated by commas. For example,

from nyxus import Nyxus
nyx = Nyxus(["*ALL*"])
intensityDir = "/path/to/images/intensities/"
maskDir = "/path/to/images/labels/"
features = nyx.featurize_directory (intensityDir, maskDir)
print(nyx.get_params('coarse_gray_depth', 'features', 'gabor_f0'))

will print the dictionary

{ 
  'coarse_gray_depth': 256, 
  'features': ['*ALL*'], 
  'gabor_f0': 0.1 
}

Using Arrow for feature results

Nyxus provides the ability to get the results of the feature calculations in Arrow IPC and Parquet formats.

To create an Arrow IPC or Parquet file, use output_type="arrowipc" or output_type="parquet" in Nyxus.featurize* calls. Optionally, an output_path argument can be passed to specify the location of the output file. For example,

    from nyxus import Nyxus
    import numpy as np

    intens = np.array([
        [[1, 4, 4, 1, 1],
            [1, 4, 6, 1, 1],
            [4, 1, 6, 4, 1],
            [4, 4, 6, 4, 1]],
                    
        [[1, 4, 4, 1, 1],
            [1, 1, 6, 1, 1],
            [1, 1, 3, 1, 1],
            [4, 4, 6, 1, 1]],
        
        [[1, 4, 4, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 6, 1, 1],
            [1, 1, 6, 1, 1]],
        
        [[1, 4, 4, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 6, 1, 1]],
    ])

    seg = np.array([
        [[1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1]],
                    
        [[1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [0, 1, 1, 1, 1],
            [1, 1, 1, 1, 1]],
        
        [[1, 1, 1, 0, 0],
            [1, 1, 1, 1, 1],
            [1, 1, 0, 1, 1],
            [1, 1, 1, 1, 1]],
                    
        [[1, 1, 1, 0, 0],
            [1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [1, 1, 1, 1, 1]]
        
    ])

    nyx = Nyxus(["*ALL_INTENSITY*"])

    arrow_file = nyx.featurize(intens, seg, output_type="arrowipc", output_path="some_path")

    print(arrow_file)

The output is:

    NyxusFeatures.arrow

This functionality is also available in the through the command line using the flag --outputType. If this flag is set to --outputType=arrowipc then the results will be written to an Arrow IPC file in the output directory and --outputType=parquet will write to a Parquet file.

Available features

The feature extraction plugin extracts morphology and intensity based features from pairs of intensity/binary mask images and produces a csv file output. The input image should be in tiled OME TIFF format. The plugin extracts the following features:

Nyxus provides a set of pixel intensity, morphology, texture, intensity distribution features, digital filter based features and image moments


Nyxus feature code Description
INTEGRATED_INTENSITY Integrated intensity of the region of interest (ROI)
MEAN, MAX, MEDIAN, STANDARD_DEVIATION, MODE Mean/max/median/stddev/mode intensity value of the ROI
SKEWNESS, KURTOSIS, HYPERSKEWNESS, HYPERFLATNESS higher standardized moments
MEAN_ABSOLUTE_DEVIATION Mean absolute deviation
ENERGY ROI energy
ROOT_MEAN_SQUARED Root of mean squared deviation
ENTROPY ROI entropy - a measure of the amount of information in the ROI
UNIFORMITY Uniformity - measures how uniform the distribution of ROI intensities is
UNIFORMITY_PIU Percent image uniformity, another measure of intensity distribution uniformity
P01, P10, P25, P75, P90, P99 1%, 10%, 25%, 75%, 90%, and 99% percentiles of intensity distribution
INTERQUARTILE_RANGE Distribution's interquartile range
ROBUST_MEAN_ABSOLUTE_DEVIATION Robust mean absolute deviation
MASS_DISPLACEMENT ROI mass displacement
AREA_PIXELS_COUNT ROI area in the number of pixels
COMPACTNESS Mean squared distance of the object’s pixels from the centroid divided by the area
BBOX_YMIN Y-position and size of the smallest axis-aligned box containing the ROI
BBOX_XMIN X-position and size of the smallest axis-aligned box containing the ROI
BBOX_HEIGHT Height of the smallest axis-aligned box containing the ROI
BBOX_WIDTH Width of the smallest axis-aligned box containing the ROI
MAJOR/MINOR_AXIS_LENGTH, ECCENTRICITY, ORIENTATION, ROUNDNESS Inertia ellipse features
NUM_NEIGHBORS, PERCENT_TOUCHING The number of neighbors bordering the ROI's perimeter and related neighbor methods
EXTENT Proportion of the pixels in the bounding box that are also in the region
CONVEX_HULL_AREA Area of ROI's convex hull
SOLIDITY Ratio of pixels in the ROI common with its convex hull image
PERIMETER Number of pixels in ROI's contour
EQUIVALENT_DIAMETER Diameter of the circle having circumference equal to the ROI's perimeter
EDGE_MEAN/MAX/MIN/STDDEV_INTENSITY Intensity statistics of ROI's contour pixels
CIRCULARITY Represents how similar a shape is to circle. Clculated based on ROI's area and its convex perimeter
EROSIONS_2_VANISH Number of erosion operations for a ROI to vanish in its axis aligned bounding box
EROSIONS_2_VANISH_COMPLEMENT Number of erosion operations for a ROI to vanish in its convex hull
FRACT_DIM_BOXCOUNT, FRACT_DIM_PERIMETER Fractal dimension features
GLCM Grey level co-occurrence Matrix features
GLRLM Grey level run-length matrix based features
GLDZM Grey level distance zone matrix based features
GLSZM Grey level size zone matrix based features
GLDM Grey level dependency matrix based features
NGTDM Neighbouring grey tone difference matrix features
ZERNIKE2D, FRAC_AT_D, RADIAL_CV, MEAN_FRAC Radial distribution features
GABOR A set of Gabor filters of varying frequencies and orientations

For the complete list of features see Nyxus provided features

Feature groups

Apart from defining your feature set by explicitly specifying comma-separated feature code, Nyxus lets a user specify popular feature groups. Supported feature groups are:


Group code Belonging features
*all_intensity* integrated_intensity, mean, median, min, max, range, standard_deviation, standard_error, uniformity, skewness, kurtosis, hyperskewness, hyperflatness, mean_absolute_deviation, energy, root_mean_squared, entropy, mode, uniformity, p01, p10, p25, p75, p90, p99, interquartile_range, robust_mean_absolute_deviation, mass_displacement
*all_morphology* area_pixels_count, area_um2, centroid_x, centroid_y, weighted_centroid_y, weighted_centroid_x, compactness, bbox_ymin, bbox_xmin, bbox_height, bbox_width, major_axis_length, minor_axis_length, eccentricity, orientation, num_neighbors, extent, aspect_ratio, equivalent_diameter, convex_hull_area, solidity, perimeter, edge_mean_intensity, edge_stddev_intensity, edge_max_intensity, edge_min_intensity, circularity
*basic_morphology* area_pixels_count, area_um2, centroid_x, centroid_y, bbox_ymin, bbox_xmin, bbox_height, bbox_width
*all_glcm* glcm_asm, glcm_acor, glcm_cluprom, glcm_clushade, glcm_clutend, glcm_contrast, glcm_correlation, glcm_difave, glcm_difentro, glcm_difvar, glcm_dis, glcm_energy, glcm_entropy, glcm_hom1, glcm_hom2, glcm_id, glcm_idn, glcm_idm, glcm_idmn, glcm_infomeas1, glcm_infomeas2, glcm_iv, glcm_jave, glcm_je, glcm_jmax, glcm_jvar, glcm_sumaverage, glcm_sumentropy, glcm_sumvariance, glcm_variance
*all_glrlm* glrlm_sre, glrlm_lre, glrlm_gln, glrlm_glnn, glrlm_rln, glrlm_rlnn, glrlm_rp, glrlm_glv, glrlm_rv, glrlm_re, glrlm_lglre, glrlm_hglre, glrlm_srlgle, glrlm_srhgle, glrlm_lrlgle, glrlm_lrhgle
*all_glszm* glszm_sae, glszm_lae, glszm_gln, glszm_glnn, glszm_szn, glszm_sznn, glszm_zp, glszm_glv, glszm_zv, glszm_ze, glszm_lglze, glszm_hglze, glszm_salgle, glszm_sahgle, glszm_lalgle, glszm_lahgle
*all_gldm* gldm_sde, gldm_lde, gldm_gln, gldm_dn, gldm_dnn, gldm_glv, gldm_dv, gldm_de, gldm_lgle, gldm_hgle, gldm_sdlgle, gldm_sdhgle, gldm_ldlgle, gldm_ldhgle
*all_ngtdm* ngtdm_coarseness, ngtdm_contrast, ngtdm_busyness, ngtdm_complexity, ngtdm_strength
*all_easy* All the features except the most time-consuming GABOR, GLCM, and the group of 2D moment features
*all* All the features

Command line usage

Assuming you built the Nyxus binary as outlined below, the following parameters are available for the command line interface:

Parameter
Description Type
--outputType Output type for feature values (speratecsv, singlecsv, arrow, parquet). Default value: '--outputType=separatecsv' string constant
--features String constant or comma-seperated list of constants requesting a group of features or particular feature. Default value: '--features=*ALL*' string
--filePattern Regular expression to match image files in directories specified by parameters '--intDir' and '--segDir'. To match all the files, use '--filePattern=.*' string
--intDir Directory of intensity image collection path
--outDir Output directory path
--segDir Directory of labeled image collection path
--coarseGrayDepth (optional) Custom number of greyscale level bins used in texture features. Default: '--coarseGrayDepth=256' integer
--glcmAngles (optional) Enabled direction angles of the GLCM feature. Superset of values: 0, 45, 90, and 135. Default: '--glcmAngles=0,45,90,135' list of integer constants
--intSegMapDir (optional) Data collection of the ad-hoc intensity-to-mask file mapping. Must be used in combination with parameter '--intSegMapFile' path
--intSegMapFile (optional) Name of the text file containing an ad-hoc intensity-to-mask file mapping. The files are assumed to reside in corresponding intensity and label collections. Must be used in combination with parameter '--intSegMapDir' string
--pixelDistance (optional) Number of pixels to treat ROIs within specified distance as neighbors. Default value: '--pixelDistance=5' integer
--pixelsPerCentimeter (optional) Number of pixels in centimeter used by unit length-related features. Default value: 0 real
--ramLimit (optional) Amount of memory not to exceed by Nyxus, in megabytes. Default value: 50% of available memory. Example: '--ramLimit=2000' to use 2,000 megabytes integer
--reduceThreads (optional) Number of CPU threads used on the feature calculation step. Default: '--reduceThreads=1' integer
--skiproi (optional) Skip ROIs having specified labels. Example: '--skiproi=image1.tif:2,3,4;image2.tif:45,56' string
--tempDir (optional) Directory used by temporary out-of-RAM objects. Default value: system temporary directory path
--hsig (optional) Channel signature Example: "--hsig=_c" to match images whose file names have channel info starting substring '_c' like in 'p0_y1_r1_c1.ome.tiff' string
--hpar (optional) Channel number that should be used as a provider of parent segments. Example: '--hpar=1' integer
--hchi (optional) Channel number that should be used as a provider of child segments. Example: '--hchi=0' integer
--hag (optional) Name of a method how to aggregate features of segments recognized as children of same parent segment. Valid options are 'SUM', 'MEAN', 'MIN', 'MAX', 'WMA' (weighted mean average), and 'NONE' (no aggregation, instead, same parent child segments will be laid out horizontally) string
--fpimgdr (optional) Desired dynamic range of voxels of a floating point TIFF image. Example: --fpimgdr=240 makes intensities be read in range 0-240. Default value: 10e4 unsigned integer
--fpimgmin (optional) Minimum intensity of voxels of a floating point TIFF image. Default value: 0.0 real
--fpimgdr (optional) Maximum intensity of voxels of a floating point TIFF image. Default value: 1.0 real

Examples

Example 1: Running Nyxus to process images of specific image channel

Suppose we need to process intensity/mask images of channel 1 :

./nyxus --features=*all_intensity*,*basic_morphology* --intDir=/path/to/intensity/images --segDir=/path/to/mask/images --outDir=/path/to/output --filePattern=.*_c1\.ome\.tif --outputType=singlecsv 

Example 2: Running Nyxus to process specific image

Suppose we need to process intensity/mask file p1_y2_r68_c1.ome.tif :

./nyxus --features=*all_intensity*,*basic_morphology* --intDir=/path/to/intensity/images --segDir=/path/to/mask/images --outDir=/path/to/output --filePattern=p1_y2_r68_c1\.ome\.tif --outputType=singlecsv 

Example 3: Running Nyxus to extract only intensity and basic morphology features

./nyxus --features=*all_intensity*,*basic_morphology* --intDir=/path/to/intensity/images --segDir=/path/to/mask/images --outDir=/path/to/output --filePattern=.* --outputType=singlecsv 

Example 4: Skipping specified ROIs while extracting features

Suppose we need to blacklist ROI labels 2 and 3 from the kurtosis feature extraction globally, in each image. The command line way to do that is using option --skiproi :

./nyxus --skiproi=2,3 --features=KURTOSIS --intDir=/path/to/intensity/images --segDir=/path/to/mask/images --outDir=/path/to/output --filePattern=.* --outputType=singlecsv 

As a result, the default feature extraction result produced without option --skiproi looking like

          mask_image  intensity_image  label    KURTOSIS
0    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      1   -0.134216
1    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      2   -0.130024
2    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      3   -1.259801
3    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      4   -0.934786
4    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      5   -1.072111
..          ...             ...           ...      ...

will start looking like

          mask_image  intensity_image  label    KURTOSIS
0    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      1   -0.134216
1    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      4   -0.934786
2    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      5   -1.072111
3    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      6   -0.347741
4    p0_y1_r1_c0.tif  p0_y1_r1_c0.tif      7   -1.283468
..          ...             ...           ...      ...

Note the comma character separator   ,   in the blacklisted ROI label list.

If we need to blacklist ROI labels 15 and 16 only in image image421.tif ROI label 17 in image image422.tif, we can do it via a per-file blacklist :

./nyxus --skiproi=image421.tif:15,16;image421.tif:17 --features=KURTOSIS --intDir=/path/to/intensity/images --segDir=/path/to/mask/images --outDir=/path/to/output --filePattern=.* --outputType=singlecsv 

Note the colon character   :   between the file name and backlisted labels within this file and semicolon character separator   ;   of file blacklists.

Example 5: Skipping specified ROIs while extracting features (via Python API)

The Nyxus Python API equivalent of global ROI blacklisting is implemented by method blacklist_roi(string) called before a call of method featurize...(), for example, labels 15, 16, and 17 can be globally blacklisted as follows:

from nyxus import Nyxus
nyx = Nyxus(features=["KURTOSIS"])
nyx.blacklist_roi('15,16,17')
features = nyx.featurize_directory (intensity_dir="/path/to/intensity/images", label_dir="/path/to/mask/images", file_pattern=".*")

Similarly, per-file ROI blacklists are defined in a way similar to the command line interface:

from nyxus import Nyxus
nyx = Nyxus(features=["KURTOSIS"])
nyx.blacklist_roi('p0_y1_r1_c0.ome.tif:15,16;p0_y1_r2_c0.ome.tif:17')
features = nyx.featurize_directory (intensity_dir="/path/to/intensity/images", label_dir="/path/to/mask/images", file_pattern=".*")

See also methods clear_roi_blacklist() and roi_blacklist_get_summary() .

Nested ROIs

Hierarchical ROI analysis in a form of finding ROIs nested geometrically as nested AABBs and aggregating features of child ROIs within corresponding parent is available as an optional extra step after the feature extraction of the whole image set is finished. To enable this step, all the command line options '--hsig', '--hpar', '--hchi', and '--hag' need to have non-blank valid values.

Valid aggregation options are SUM, MEAN, MIN, MAX, WMA (weighted mean average), or NONE (no aggregation).

Example 6: Processing an image set with nested ROI postprocessing

nyxus --features=*ALL_intensity* --intDir=/path/to/intensity/images --segDir=/path/to/mask/images --outDir=/path/to/output/directory --filePattern=.* --outputType=separatecsv --reduceThreads=4 --hsig=_c --hpar=1 --hchi=0 --hag=WMA 

As a result, 2 additional CSV files will be produced for each mask image whose channel number matches the value of option '--hpar': file

<imagename>_nested_features.csv

where features of the detected child ROIs are laid next to their parent ROIs on same lines and auxiliary file

<imagename>_nested_relations.csv

serving as a relational table of parent and child ROI labels within parent ROI channel image <imagename>.

Nested features Python API

The nested features functionality can also be utilized in Python using the Nested class in nyxus. The Nested class contains two methods, find_relations and featurize.

The find_relations method takes in a path to the label files, along with a child filepattern to identify the files in the child channel and a parent filepattern to match the files in the parent channel. The find_relation method returns a Pandas DataFrame containing a mapping between parent ROIs and the respective child ROIs.

The featurize method takes in the parent-child mapping along with the features of the ROIs in the child channel. If a list of aggregate functions is provided to the constructor, this method will return a pivoted DataFrame where the rows are the ROI labels and the columns are grouped by the features.

Example 7: Using aggregate functions

from nyxus import Nyxus, Nested
import numpy as np

int_path = 'path/to/intensity'
seg_path = 'path/to/segmentation'

nyx = Nyxus(['GABOR'])

child_features = nyx.featurize(int_path, seg_path, file_pattern='p[0-9]_y[0-9]_r[0-9]_c0\.ome\.tif')

nest = Nested(['sum', 'mean', 'min', ('nanmean', lambda x: np.nanmean(x))])

df = nest.find_relations(seg_path, 'p{r}_y{c}_r{z}_c1.ome.tif', 'p{r}_y{c}_r{z}_c0.ome.tif')

df2 = nest.featurize(df, features)

The parent-child map is

    Image              Parent_Label  Child_Label
    0  /path/to/image          72             65
    1  /path/to/image          71             66
    2  /path/to/image          70             64
    3  /path/to/image          68             61
    4  /path/to/image          67             65

and the aggregated DataFrame is

            GABOR_0                                  GABOR_1                                  GABOR_2              ... 
            sum        mean      min       nanmean    sum      mean       min       nanmean   sum      mean        ...
    label                                                                                                          ...                                                                                                      
     1      24.010227  0.666951  0.000000  0.666951  19.096262  0.530452  0.001645  0.530452  17.037345  0.473260  ... 
     2      13.374170  0.445806  0.087339  0.445806   7.279187  0.242640  0.075000  0.242640   6.390529  0.213018  ...  
     3       5.941783  0.198059  0.000000  0.198059   3.364149  0.112138  0.000000  0.112138   2.426409  0.080880  ...  
     4      13.428773  0.559532  0.000000  0.559532  12.021938  0.500914  0.008772  0.500914   9.938915  0.414121  ...  
     5       6.535722  0.181548  0.000000  0.181548   1.833463  0.050930  0.000000  0.050930   2.083023  0.057862  ...

Example 8: Without aggregate functions

from nyxus import Nyxus, Nested
import numpy as np

int_path = 'path/to/intensity'
seg_path = 'path/to/segmentation'

nyx = Nyxus(['GABOR'])

child_features = nyx.featurize(int_path, seg_path, file_pattern='p[0-9]_y[0-9]_r[0-9]_c0\.ome\.tif')

nest = Nested()

df = nest.find_relations(seg_path, 'p{r}_y{c}_r{z}_c1.ome.tif', 'p{r}_y{c}_r{z}_c0.ome.tif')

df2 = nest.featurize(df, features)

the parent-child map remains the same but the featurize result becomes

                     GABOR_0                                                                ...    
    Child_Label       1          2         3         4         5    6    7    8    9    10  ...    
    label                                                                                   ...
    1            0.666951       NaN       NaN       NaN       NaN  NaN  NaN  NaN  NaN  NaN  ...     
    2                 NaN  0.445806       NaN       NaN       NaN  NaN  NaN  NaN  NaN  NaN  ...     
    3                 NaN       NaN  0.198059       NaN       NaN  NaN  NaN  NaN  NaN  NaN  ...     
    4                 NaN       NaN       NaN  0.559532       NaN  NaN  NaN  NaN  NaN  NaN  ...     
    5                 NaN       NaN       NaN       NaN  0.181548  NaN  NaN  NaN  NaN  NaN  ...

Building from source

Nyxus uses CMake as the build system and needs a C++17 supported compiler to build from the source.

Dependencies

To build Nyxus from source, several build dependencies are needed to be satisfied. These dependencies arise from Nyxus's need to read and write various data format. The dependencies are listed below.

  • Tiff Support: libtiff, libdeflate, zlib
  • Zarr Support: z5, xtensor, nlohman_json, blosc, zlib
  • Dicom Support: dcmtk, fmjpeg, zlib
  • Apache Arrow Support: arrow-cpp, pyarrow
  • Python Interface: pybind11

These packages also have underlying dependencies and at times, these dependency resolution may appear challenging. We prefer conda to help with resolving these dependencies. However, for users without access to a conda enviornment, we have also provided installation script to build and install all the dependencies except Apache Arrow.

By default, Nyxus can be built with a minimal set of dependecies (Tiff support and Python interface). To build Nyxus with all the supported IO options mentioned above, pass -DALLEXTRAS=ON in the cmake command.

GPU Support

Nyxus also can be build with NVIDIA GPU support. To do so, a CUDA Development toolkit compatible with the host C++ compiler need to be present in the system. For building with GPU support, pass -DUSEGPU=ON flag in the cmake command.

Inside Conda

To build the command line interface, pass -DBUILD_CLI=ON in the cmake command.

Below is an example of how to build Nyxus inside a conda environment on Linux.

conda create -n nyxus_build python=3.10
conda activate nyxus_build
git clone https://github.com/PolusAI/nyxus.git
cd nyxus
conda install mamba -c conda-forge
mamba install -y -c conda-forge --file ci-utils/envs/conda_cpp.txt 
export NYXUS_DEP_DIR=$CONDA_PREFIX
mkdir build
cd build
cmake -DBUILD_CLI=ON -DALLEXTRAS=ON  -DUSEGPU=ON ..
make -j4

To install the python package in the conda environment on Linux, use the following direction.

conda create -n nyxus_build python=3.10
conda activate nyxus_build
git clone https://github.com/PolusAI/nyxus.git
cd nyxus
conda install mamba -c conda-forge
mamba install -y -c conda-forge --file ci-utils/envs/conda_cpp.txt --file ci-utils/envs/conda_py.txt
export NYXUS_DEP_DIR=$CONDA_PREFIX
CMAKE_ARGS="-DUSEGPU=ON -DALLEXTRAS=ON -DPython_ROOT_DIR=$CONDA_PREFIX -DPython_FIND_VIRTUALENV=ONLY" python -m pip install . -vv

Without Using Conda

To build Nyxus outside of a conda environment, we will first need to build and install all the required and optional dependecies. ci-utils/install_prereq_windwos.bat and ci-utils/install_prereq_linux.sh performs the task for Windows and Linux (and Mac) respectively. These script take a --min_build yes option to only build the minimal dependencies. Below, we provide an example for Windows OS.

git clone https://github.com/PolusAI/nyxus.git
cd nyxus
mkdir build
cd build
..\ci-utils\install_prereq_windows.bat
cmake -DBUILD_CLI=ON -DUSEGPU=ON -DALLEXTRAS=ON -DCMAKE_PREFIX_PATH=.\local_install -DCMAKE_INSTALL_PREFIX=.\local_install ..
cmake --build . --config Release
set PATH=%PATH%;%cd%\local_install\bin

To install the python package in the environment on Linux, use the following direction.

python -m virtualenv venv
venv\Scripts\activate.bat
git clone https://github.com/PolusAI/nyxus.git
cd nyxus
mkdir build_dep
cd build_dep
..\ci-utils\install_prereq_windows.bat
cd ..
set NYXUS_DEP_DIR=%cd%\build_dep\local_install
set CMAKE_ARGS=-DUSEGPU=ON -DALLEXTRAS=ON
python -m pip install . -vv
xcopy /E /I /y %NYXUS_DEP_DIR%\bin\*.dll %VIRTUAL_ENV%\lib\site-packages\nyxus

Note that, in both cases, the dlls of the dependencies need to be in the PATH (for CLI) or in the site-packages location (for Python package).

Running via Docker

Running Nyxus from a local directory freshly made Docker container is a good idea. It allows one to test-run conteinerized Nyxus before it reaches Docker cloud deployment.

To search available Nyxus images run command

docker search nyxus

and you'll be shown that it's available at least via organization 'polusai'. To pull it, run

docker pull polusai/nyxus

The following command line is an example of running the dockerized feature extractor (image hash 87f3b560bbf2) with only intensity features selected:

docker run -it [--gpus all] --mount type=bind,source=/images/collections,target=/data 87f3b560bbf2 --intDir=/data/c1/int --segDir=/data/c1/seg --outDir=/data/output --filePattern=.* --outputType=separatecsv --features=entropy,kurtosis,skewness,max_intensity,mean_intensity,min_intensity,median,mode,standard_deviation

WIPP Usage

Nyxus is available as plugin for WIPP.

Label image collection: The input should be a labeled image in tiled OME TIFF format (.ome.tif). Extracting morphology features, Feret diameter statistics, neighbors, hexagonality and polygonality scores requires the segmentation labels image. If extracting morphological features is not required, the label image collection can be not specified.

Intensity image collection: Extracting intensity-based features requires intensity image in tiled OME TIFF format. This is an optional parameter - the input for this parameter is required only when intensity-based features needs to be extracted.

File pattern: Enter file pattern to match the intensity and labeled/segmented images to extract features (https://pypi.org/project/filepattern/) Filepattern will sort and process files in the labeled and intensity image folders alphabetically if universal selector(.*.ome.tif) is used. If a more specific file pattern is mentioned as input, it will get matches from labeled image folder and intensity image folder based on the pattern implementation.

Pixel distance: Enter value for this parameter if neighbors touching cells needs to be calculated. The default value is 5. This parameter is optional.

Features: Comma separated list of features to be extracted. If all the features are required, then choose option all.

Outputtype: There are 4 options available under this category. Separatecsv - to save all the features extracted for each image in separate csv file. Singlecsv - to save all the features extracted from all the images in the same csv file. Arrow - to save all the features extracted from all the images in Apache Arrow format. Parquet - to save all the features extracted from all the images in Apache Parquet format

Embedded pixel size: This is an optional parameter. Use this parameter only if units are present in the metadata and want to use those embedded units for the features extraction. If this option is selected, value for the length of unit and pixels per unit parameters are not required.

Length of unit: Unit name for conversion. This is also an optional parameter. This parameter will be displayed in plugin's WIPP user interface only when embedded pixel size parameter is not selected (ckrresponding check box checked).

Pixels per unit: If there is a metric mentioned in Length of unit, then Pixels per unit cannot be left blank and hence the scale per unit value must be mentioned in this parameter. This parameter will be displayed in plugin's user interface only when embedded pixel size parameter is not selected.

Note: If Embedded pixel size is not selected and values are entered in Length of unit and Pixels per unit, then the metric unit mentioned in length of unit will be considered. If Embedded pixel size, Length of unit and Pixels per unit is not selected and the unit and pixels per unit fields are left blank, the unit will be assumed to be pixels.

Output: The output is a csv file containing the value of features required.

For more information on WIPP, visit the official WIPP page.

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

nyxus-0.8.2-cp312-cp312-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.12 Windows x86-64

nyxus-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (24.7 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

nyxus-0.8.2-cp312-cp312-macosx_11_0_arm64.whl (17.2 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

nyxus-0.8.2-cp312-cp312-macosx_10_15_x86_64.whl (18.7 MB view details)

Uploaded CPython 3.12 macOS 10.15+ x86-64

nyxus-0.8.2-cp311-cp311-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.11 Windows x86-64

nyxus-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (24.7 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

nyxus-0.8.2-cp311-cp311-macosx_11_0_arm64.whl (17.2 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

nyxus-0.8.2-cp311-cp311-macosx_10_15_x86_64.whl (18.7 MB view details)

Uploaded CPython 3.11 macOS 10.15+ x86-64

nyxus-0.8.2-cp310-cp310-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.10 Windows x86-64

nyxus-0.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (24.7 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

nyxus-0.8.2-cp310-cp310-macosx_11_0_arm64.whl (17.2 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

nyxus-0.8.2-cp310-cp310-macosx_10_15_x86_64.whl (18.7 MB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

nyxus-0.8.2-cp39-cp39-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.9 Windows x86-64

nyxus-0.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (24.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

nyxus-0.8.2-cp39-cp39-macosx_11_0_arm64.whl (17.2 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

nyxus-0.8.2-cp39-cp39-macosx_10_15_x86_64.whl (18.7 MB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

nyxus-0.8.2-cp38-cp38-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.8 Windows x86-64

nyxus-0.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (24.7 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

nyxus-0.8.2-cp38-cp38-macosx_10_15_x86_64.whl (18.7 MB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

File details

Details for the file nyxus-0.8.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: nyxus-0.8.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 6.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.13

File hashes

Hashes for nyxus-0.8.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1cd255eb19495d4587df4c5a3feb1a8fb71ca6c0a71634714912e681d5fd5f15
MD5 2bc7ae9929a194f1d700b3975055a49b
BLAKE2b-256 c5b77a4278d9a924ea0c9abbf1050275b22dbb45110cf18f48aa7de2839b0922

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4002edf04c089cbaba01288d72f1eea1411dbe09e11ba5ace28149a755420ff1
MD5 9e999931cad9b841e3391f239c17939c
BLAKE2b-256 a06ed912ca64fb0d10cdc2eeedec04dcd39fb4ad6c64573e9b84fcfe4e59394d

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cacc3d2d65d59a54eeec2bd30c57716ee1396c25409a4344ed8082aeaaa90b81
MD5 c5d117b2a5c1469516c4672a38f97c69
BLAKE2b-256 e015ac3cc79d13186a2ff632d4762c2298b74d20a9c1c4bd9f4a89246cbfaa5e

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp312-cp312-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp312-cp312-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 17d0dd9b35a1953a0c751f48d40d696e9dbd8c8d5cc50b3e199516dd28a2d9b7
MD5 b192a3d5483f22baa94b45d0ae731413
BLAKE2b-256 1f96e11f00793c38e0df6cce8784d66baeb1a0a77b42eb6eb2be5b645cb2df3c

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: nyxus-0.8.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 6.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.13

File hashes

Hashes for nyxus-0.8.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c7058e643fb5cec4c0d12ecc68e6b56e4efd56f44c78a9f7854f065f32b261cb
MD5 248f17d66ecb8a0573db2fbdf6a22f8f
BLAKE2b-256 8db436f986e730d835138716f6b81109c476179aeddbc345db83b6e8428c358b

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6d538d6f61ae16ad754913e95051fd6c9fb656b4d7625081d0b576a4b337c7ae
MD5 926d6d26984963903585c846f373609d
BLAKE2b-256 13a65082a33b0442cbcbd8ff82a85b507a6345e9edd7ebea16f4cf61592b98f7

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5bd90e3dce72e0f9a04634b0385fc1a51d4116fca04d199f7f748334cd2af7c7
MD5 5e3ce280f1cbc4155dbbed9d47f1cc06
BLAKE2b-256 97d464adaec147187a1f4bb5905fe44954af5b34577146e05dbafb554a1469af

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 3b0fa8979d695614c746bc9a5fdae3965d7ebab13cf6d7b842aaab02ec9de948
MD5 18c0ccff15084a8b4695d0802bdc8d8a
BLAKE2b-256 d0f402c2fcb4b5dc14ffdbe03ca2da7fc631f01cd41fb9434f2f13ed3802712e

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: nyxus-0.8.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 6.6 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.13

File hashes

Hashes for nyxus-0.8.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 571dde2ca08772bdb173380a2f50ebeca7b20862e56e4463df04890d48529b2e
MD5 ddddb0291ce9ad6db7517b031732ff4f
BLAKE2b-256 ddc7f062b1e5303933d520f2ad9f914e0b155eb9cc10bf267e50fffb49543aea

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cf2ac6ebb67de512a2d14b23bcb777f9f9638d1e346807f31a8e6cfcc9ce86b2
MD5 36fc723c5e4b0134d66c13895eada81f
BLAKE2b-256 a362244130dc4c8c17f876013ef2d81c32e3c87ff37584a4b7336569d6321d26

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a556bc200f195d1eccb4e83b0bc45c942130739a8f303f814ddfabe0dd14d5be
MD5 fe3138c09e8e61a0513e478a5ff29623
BLAKE2b-256 19c33e124280162aaaed5b37d9655ae135cd8f4fedfb9b19c30eb7f6623f7d66

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6df3b8f0bda99cc04a64a3ef52ec4f4038b2e690c6f6f3c427fcbc6486015f85
MD5 c192ed86c55fff038ac0cfa1f8a3993e
BLAKE2b-256 94fe1b94a44fe322b4f5d086c27bb2cdebdd0d63ce7df2742cf7edfb7e72da45

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: nyxus-0.8.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 6.6 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.13

File hashes

Hashes for nyxus-0.8.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f585f6a7eef780a4a4d926f1a681b4170961eaea9e142b95b635c7c33b322b04
MD5 7eb65c0d5519c0b930db03253b5ccf70
BLAKE2b-256 fc4c529bcd11ad17057fd482ad11b6dc08d6a8844f2dbbfcd75e4cebced4d6a2

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9c838a9e7be6e1348ca0d327433e3a1e01fc3af73ee88043f40b807ed919132
MD5 70ee7dbe2653dc120c63ac03cba5f8d0
BLAKE2b-256 a0618f03584a5e89f67812d0f246574e77c0b3aa11545bcba2e68188f611219d

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3fc0bcaa432a951b2d72134ff46c6e247522751955acf332f48e74601d9a294a
MD5 820216eca4ec3ce3d644499d7a867326
BLAKE2b-256 e49373c852fc111a047f0e0dce5f80cdd6d0f9ca91429d08a7937557eff6ce59

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 1498e5654a3d586a33e2091119ec2810398e21ca0657f34f8424a30f5a8d31ad
MD5 b237aefd544fbaa5ef31bb9c92fafaf7
BLAKE2b-256 6803bd49e351111c1d55d3c7bfe6a6ee9a20f381756fbb5738b898ec861090da

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: nyxus-0.8.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 6.7 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.13

File hashes

Hashes for nyxus-0.8.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 557b8213035a7d98d05761340eb6d2e0a6d2cb3649d348a7e5c747cb3efd88f1
MD5 faccce3115e8074fe8d94c3fd75b0ea3
BLAKE2b-256 718c774d105c112a247ba0c435ee3a4ed8ecdc9018fae23517aa7adc39c31f6e

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8c5eba78a0a10d2d85834b5c524ca7e4294ed874c5b740a6314191bb7015225a
MD5 b8d34d09b6ba136096a8049483fba84c
BLAKE2b-256 0c444c7a6ac4cddd2dfd442b971e035b5f1aa6fe07e9bcf4dfb4869ab23c817d

See more details on using hashes here.

File details

Details for the file nyxus-0.8.2-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nyxus-0.8.2-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 f431bcceef61f9724bf47166824ef158e85f138d8f32ee566ea4bf3727db884c
MD5 dc4665a1ac5049e3755b303abf634fdb
BLAKE2b-256 9c4c3d60593b4b5a70a859570794f01446cf2b6b0671a053ca446102283059db

See more details on using hashes here.

Supported by

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