diff --git a/CHANGELOG.md b/CHANGELOG.md index db029af..8bf0c1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,16 +4,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2.4.1] - 2020-12-23 +## [2.5.0] - 2020-08-11 +### Added + - Added a python stub package to pin package versions +### Changed + - Removed opt-SNE because it hasn't been updated in several years and it is + not trivial to install + +## [2.4.1] - 2020-12-23 ### Fixed - Added missing `@importFrom magrittr %>%` in `PAGA()` header - ### Changed - Reformatted `PAGA()` code ## [2.4.0] - 2020-12-23 - ### Added - Added [PaCMAP](https://github.com/YingfanWang/PaCMAP) diff --git a/DESCRIPTION b/DESCRIPTION index 2c50e39..6df730e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: ReductionWrappers Title: Wrapper exposing several Python dimensional reduction tools -Version: 2.4.0.0000 +Version: 2.5.0 Authors@R: person(given = "Miles", family = "Smith", @@ -13,14 +13,13 @@ Url: https://github.com/milescsmith/ReductionWrappers BugReports: https://github.com/milescsmith/ReductionWrappers/issues Depends: R (>= 3.5.0) Imports: - cowplot, rlang, reticulate, parallel, ggplot2, + ggpubr, glue, magrittr, - RANN, Matrix, Seurat, SingleCellExperiment, diff --git a/NAMESPACE b/NAMESPACE index 9245e9d..86a75cd 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -13,14 +13,11 @@ export(DooptSNE) export(PAGA) export(PAGAplot) export(openTSNE) -export(optSNE) export(pacmap) export(phate) export(phenograph) export(umap) importFrom(Matrix,Matrix) -importFrom(Matrix,sparseMatrix) -importFrom(RANN,nn2) importFrom(Seurat,"Idents<-") importFrom(Seurat,AddMetaData) importFrom(Seurat,CreateDimReducObject) @@ -32,7 +29,6 @@ importFrom(SingleCellExperiment,reducedDim) importFrom(SingleCellExperiment,reducedDimNames) importFrom(SummarizedExperiment,"colData<-") importFrom(SummarizedExperiment,colData) -importFrom(cowplot,theme_cowplot) importFrom(ggplot2,aes) importFrom(ggplot2,geom_point) importFrom(ggplot2,geom_segment) @@ -40,6 +36,7 @@ importFrom(ggplot2,geom_text) importFrom(ggplot2,ggplot) importFrom(ggplot2,labs) importFrom(ggplot2,scale_color_manual) +importFrom(ggpubr,theme_pubr) importFrom(glue,glue) importFrom(magrittr,"%>%") importFrom(magrittr,set_colnames) @@ -49,4 +46,3 @@ importFrom(reticulate,import) importFrom(reticulate,py_module_available) importFrom(rlang,"%||%") importFrom(s2a,convert_to_anndata) -importFrom(stringr,str_glue) diff --git a/R/forceatlas2.R b/R/forceatlas2.R index 1736f44..b386d42 100644 --- a/R/forceatlas2.R +++ b/R/forceatlas2.R @@ -1,4 +1,4 @@ -#' ForceAtlas2 +#' @title ForceAtlas2 #' #' An R wrapper around the Python implementation of ForceAtlas2 found at #' https://github.com/bhargavchippada/forceatlas2 @@ -10,6 +10,9 @@ #' @param iterations Number of times to iterate the main loop #' @param ... Additional arguments to pass to the forceatlas2 object instantiation #' +#' @importFrom reticulate import +#' @importFrom glue glue +#' #' @rdname fa2 #' fa2 <- function(init_pos, @@ -20,37 +23,44 @@ fa2 <- function(init_pos, required_modules <- c("fa2","numpy") for (i in required_modules) { if (!py_module_available(i)) { - stop(glue("The {i} module is unavailable. + stop(glue::glue("The {i} module is unavailable. Please activate the appropriate environment or install the module.")) } } - fa2 <- import(module = "fa2", delay_load = TRUE) - np <- import(module = "numpy", delay_load = TRUE) + fa2 <- reticulate::import(module = "fa2", delay_load = TRUE) + np <- reticulate::import(module = "numpy", delay_load = TRUE) # shamelessly based from the fantastic Scanpy package - forceatlas2 <- fa2$ForceAtlas2(outboundAttractionDistribution=FALSE, # Dissuade hubs - linLogMode=FALSE, # NOT IMPLEMENTED - adjustSizes=FALSE, # Prevent overlap (NOT IMPLEMENTED) - edgeWeightInfluence=1.0, - # Performance - jitterTolerance=1.0, # Tolerance - barnesHutOptimize=TRUE, - barnesHutTheta=1.2, - multiThreaded=FALSE, # NOT IMPLEMENTED - # Tuning - scalingRatio=2.0, - strongGravityMode=FALSE, - gravity=1.0, - # Log - verbose=TRUE) + forceatlas2 <- + fa2$ForceAtlas2( + outboundAttractionDistribution=FALSE, # Dissuade hubs + linLogMode=FALSE, # NOT IMPLEMENTED + adjustSizes=FALSE, # Prevent overlap (NOT IMPLEMENTED) + edgeWeightInfluence=1.0, + # Performance + jitterTolerance=1.0, # Tolerance + barnesHutOptimize=TRUE, + barnesHutTheta=1.2, + multiThreaded=FALSE, # NOT IMPLEMENTED + # Tuning + scalingRatio=2.0, + strongGravityMode=FALSE, + gravity=1.0, + # Log + verbose=TRUE + ) - fa_results <- forceatlas2$forceatlas2(G = adjacencies, - pos = init_pos, - iterations = as.integer(iterations)) + fa_results <- + forceatlas2$forceatlas2( + G = adjacencies, + pos = init_pos, + iterations = as.integer(iterations) + ) fa_embeddings <- np$array(fa_results) rownames(fa_embeddings) <- rownames(init_pos) - colnames(fa_embeddings) <- as.character(glue("fa_{1:ncol(fa_embeddings)}")) - return(fa_embeddings) + colnames(fa_embeddings) <- as.character(glue::glue("fa_{1:ncol(fa_embeddings)}")) + + fa_embeddings } diff --git a/R/interfaceFunction.R b/R/interfaceFunction.R index e2f7681..35d43eb 100644 --- a/R/interfaceFunction.R +++ b/R/interfaceFunction.R @@ -23,6 +23,7 @@ PushData <- #' @rdname PushData #' @method PushData Seurat #' @importFrom Seurat CreateDimReducObject +#' @importFrom glue glue #' @return Seurat object PushData.Seurat <- function( @@ -38,8 +39,8 @@ PushData.Seurat <- reduction_data <- CreateDimReducObject( embeddings = python_df, - assay = assay_used, - key = as.character(glue("{reduction_save}_")) + assay = assay_used, + key = as.character(glue::glue("{reduction_save}_")) ) object[[reduction_save]] <- reduction_data object @@ -60,7 +61,7 @@ PushData.SingleCellExperiment <- rownames(python_df) <- colnames(object) reducedDim( - x = object, + x = object, type = toupper(reduction_save) ) <- python_df @@ -99,6 +100,7 @@ ReductionBridge <- #' @rdname ReductionBridge #' @method ReductionBridge Seurat #' @importFrom Seurat Embeddings DefaultAssay +#' @importFrom glue glue #' @return Seurat object ReductionBridge.Seurat <- function( @@ -106,26 +108,26 @@ ReductionBridge.Seurat <- reduction_use = "pca", reduction_save, function_use, - dims_use = NULL, - assay_use = NULL, + dims_use = NULL, + assay_use = NULL, ...) { - if (match.call()[5] == "pacmap()"){ + if (match.call()[5] == "pacmap()") { assay_use <- assay_use %||% "RNA" cell_embeddings <- GetAssayData( object = object, slot = "scale.data", - assay = assay_use) %>% - as.matrix + assay = assay_use) |> + as.matrix() } else { if (reduction_use %in% names(object)) { - cell_embeddings <- Embeddings(object[[reduction_use]]) + cell_embeddings <- Seurat::Embeddings(object[[reduction_use]]) adjacencies <- object@graphs - assay <- DefaultAssay(object = object[[reduction_use]]) + assay <- Seurat::DefaultAssay(object = object[[reduction_use]]) } else { - message(glue("{reduction_use} has not yet been performed")) + message(glue::glue("{reduction_use} has not yet been performed")) stop() } } @@ -133,11 +135,11 @@ ReductionBridge.Seurat <- dims_use = dims_use %||% 1:ncol(cell_embeddings) if (!all(dims_use %in% 1:ncol(cell_embeddings))) { - stop(glue("You have selected dimensions that are outside the bounds of {reduction_use}")) + stop(glue::glue("You have selected dimensions that are outside the bounds of {reduction_use}")) } if (match.call()[5] == "fa2()") { - snn <- Matrix(object@graphs[[glue("{assay}_snn")]]) + snn <- Matrix(object@graphs[[glue::glue("{assay}_snn")]]) snn <- snn[rownames(cell_embeddings),rownames(cell_embeddings)] python_df <- function_use(cell_embeddings[,dims_use], snn, ...) } else { @@ -145,10 +147,10 @@ ReductionBridge.Seurat <- } object <- PushData( - object = object, - python_df = python_df, + object = object, + python_df = python_df, reduction_save = reduction_save, - assay_used = assay + assay_used = assay ) object @@ -157,8 +159,6 @@ ReductionBridge.Seurat <- #' @rdname ReductionBridge #' @method ReductionBridge SingleCellExperiment #' @importFrom SingleCellExperiment reducedDim reducedDimNames -#' @importFrom RANN nn2 -#' @importFrom Matrix sparseMatrix #' @return SingleCellExperiment object ReductionBridge.SingleCellExperiment <- function( @@ -166,18 +166,18 @@ ReductionBridge.SingleCellExperiment <- reduction_use = "PCA", reduction_save, function_use, - dims_use = NULL, + dims_use = NULL, ...) { - if (toupper(reduction_use) %in% reducedDimNames(object)) { + if (toupper(reduction_use) %in% SingleCellExperiment::reducedDimNames(object)) { cell_embeddings <- - reducedDim( - x = object, + SingleCellExperiment::reducedDim( + x = object, type = toupper(reduction_use) ) } else { - stop(glue("{reduction_use} has not yet been performed")) + stop(glue::glue("{reduction_use} has not yet been performed")) } if (match.call()[5] == "fa2()") { @@ -193,53 +193,19 @@ ReductionBridge.SingleCellExperiment <- dims_use = dims_use %||% 1:ncol(cell_embeddings) if (!all(dims_use %in% 1:ncol(cell_embeddings))) { - stop(glue("You have selected dimensions that are outside the bounds of {reduction_use}")) + stop(glue::glue("You have selected dimensions that are outside the bounds of {reduction_use}")) } python_df <- function_use(cell_embeddings[,dims_use], ...) PushData( - object = object, - python_df = python_df, + object = object, + python_df = python_df, reduction_save = toupper(reduction_save) ) } -#' @title DooptSNE -#' -#' @description Perform tSNE projection on a Seurat object using the -#' Multicore-opt-SNE function -#' -#' @param object A Seurat or SingleCellExperiment object to be transformed. -#' @param reduction_use Prior dimensional reduction to use for calculations -#' (i.e. pca, ica, cca, etc...). Default: pca -#' @param reduction_save Name to use for the reduction (i. e. tsne, umap, -#' etc...). Default: tsne -#' @param dims_use Dimensions from `reduction_use` to pass to PHATE -#' @param ... Extra parameters to pass to the multicoreTSNE function. -#' -#' @export -#' -DooptSNE <- - function( - object, - reduction_use = "pca", - reduction_save = "optsne", - dims_use = NULL, - ...) { - - ReductionBridge( - object = object, - reduction_use = reduction_use, - reduction_save = reduction_save, - function_use = optSNE, - dims_use = dims_use, - ... - ) -} - - #' @title DoopenTSNE #' #' @description Perform tSNE projection on a Seurat object using the openTSNE @@ -258,17 +224,17 @@ DooptSNE <- DoopenTSNE <- function( object, - reduction_use = "pca", + reduction_use = "pca", reduction_save = "openTSNE", - dims_use = NULL, + dims_use = NULL, ...) { ReductionBridge( - object = object, - reduction_use = reduction_use, + object = object, + reduction_use = reduction_use, reduction_save = reduction_save, - function_use = openTSNE, - dims_use = dims_use, + function_use = openTSNE, + dims_use = dims_use, ... ) } @@ -290,17 +256,17 @@ DoopenTSNE <- DoUMAP <- function( object, - reduction_use = "pca", + reduction_use = "pca", reduction_save = "umap", - dims_use = NULL, + dims_use = NULL, ...) { ReductionBridge( - object = object, - reduction_use = reduction_use, + object = object, + reduction_use = reduction_use, reduction_save = reduction_save, - function_use = umap, - dims_use = dims_use, + function_use = umap, + dims_use = dims_use, ... ) } @@ -323,17 +289,17 @@ DoUMAP <- DoForceAtlas2 <- function( object, - reduction_use = "pca", + reduction_use = "pca", reduction_save = "fa2", - dims_use = NULL, + dims_use = NULL, ...) { ReductionBridge( - object = object, - reduction_use = reduction_use, + object = object, + reduction_use = reduction_use, reduction_save = reduction_save, - function_use = fa2, - dims_use = dims_use, + function_use = fa2, + dims_use = dims_use, ... ) } @@ -356,17 +322,17 @@ DoForceAtlas2 <- DoPHATE <- function( object, - reduction_use = "pca", + reduction_use = "pca", reduction_save = "phate", - dims_use = NULL, + dims_use = NULL, ...) { ReductionBridge( - object = object, - reduction_use = reduction_use, + object = object, + reduction_use = reduction_use, reduction_save = reduction_save, - function_use = phate, - dims_use = dims_use, + function_use = phate, + dims_use = dims_use, ... ) } @@ -390,17 +356,17 @@ DoPHATE <- DooptSNE <- function( object, - reduction_use = "pca", + reduction_use = "pca", reduction_save = "optsne", - dims_use = NULL, + dims_use = NULL, ...) { ReductionBridge( - object = object, - reduction_use = reduction_use, + object = object, + reduction_use = reduction_use, reduction_save = reduction_save, - function_use = optSNE, - dims_use = dims_use, + function_use = optSNE, + dims_use = dims_use, ... ) } @@ -422,15 +388,15 @@ DooptSNE <- DoPaCMAP <- function( object, - assay_use = "RNA", + assay_use = "RNA", reduction_save = "PAC", ...) { ReductionBridge( - object = object, - assay_use = assay_use, + object = object, + assay_use = assay_use, reduction_save = reduction_save, - function_use = pacmap, + function_use = pacmap, ... ) } @@ -450,7 +416,6 @@ DoPaCMAP <- #' meta.data slot #' @param ... Extra parameters to pass to the phenograph function. #' -#' @importFrom glue glue #' @export #' DoPhenoGraph <- @@ -470,23 +435,23 @@ DoPhenoGraph.Seurat <- function( object, reduction_use = "pca", - k = 30, - prefix = "community", + k = 30, + prefix = "community", ...) { if (reduction_use %in% names(object)) { cell_embeddings <- Embeddings(object[[reduction_use]]) } else { - message(glue("{reduction_use} has not yet been performed")) + message(glue::glue("{reduction_use} has not yet been performed")) stop() } for (value in k) { - cluster_name <- glue("{prefix}{value}") + cluster_name <- glue::glue("{prefix}{value}") communities <- phenograph(cell_embeddings, k = value, ...) - object <- AddMetaData( - object = object, + object <- Seurat::AddMetaData( + object = object, metadata = communities, col.name = cluster_name ) @@ -506,20 +471,20 @@ DoPhenoGraph.SingleCellExperiment <- function( object, reduction_use = "pca", - k = 30, - prefix = "community", + k = 30, + prefix = "community", ...) { - if (reduction_use %in% reducedDimNames(object)) { - cell_embeddings <- reducedDim(x = object, type = reduction_use) + if (reduction_use %in% SingleCellExperiment::reducedDimNames(object)) { + cell_embeddings <- SingleCellExperiment::reducedDim(x = object, type = reduction_use) } else { - message(glue("{reduction_use} has not yet been performed")) + message(glue::glue("{reduction_use} has not yet been performed")) stop() } for (value in k) { - cluster_name <- glue("{prefix}{value}") + cluster_name <- glue::glue("{prefix}{value}") communities <- phenograph(cell_embeddings, k = value, ...) colData(object)[[cluster_name]] <- communities } diff --git a/R/opentsne.R b/R/opentsne.R index 755cf94..9aef09d 100644 --- a/R/opentsne.R +++ b/R/opentsne.R @@ -1,4 +1,4 @@ -#' openTSNE +#' @title openTSNE #' #' An R wrapper for the openTSNE Python module found at #' https://github.com/pavlin-policar/openTSNE/ @@ -124,41 +124,49 @@ openTSNE <- function(rdf, callbacks = NULL, callbacks_every_iters = 50, random_state = NULL){ - if (!py_module_available("openTSNE")){ + if (!reticulate::py_module_available("openTSNE")){ stop("The openTSNE module is unavailable. Please activate the appropriate environment or install the module.") } - openTSNE.module <- import(module = "openTSNE", delay_load = TRUE) + openTSNE.module <- + reticulate::import( + module = "openTSNE", + delay_load = TRUE + ) + if (is.null(n_jobs)){ - n_jobs <- detectCores() + n_jobs <- parallel::detectCores() } - tsne <- openTSNE.module$TSNE(n_components = as.integer(n_components), - perplexity = as.numeric(perplexity), - learning_rate = as.numeric(learning_rate), - early_exaggeration_iter = as.integer(early_exaggeration_iter), - early_exaggeration = as.numeric(early_exaggeration), - n_iter = as.integer(n_iter), - exaggeration = exaggeration, - theta = as.numeric(theta), - n_interpolation_points = as.integer(n_interpolation_points), - min_num_intervals = as.integer(min_num_intervals), - ints_in_interval = as.numeric(ints_in_interval), - initialization = initialization, - metric = as.character(metric), - metric_params = metric_params, - initial_momentum = as.numeric(initial_momentum), - final_momentum = as.numeric(final_momentum), - n_jobs = as.integer(n_jobs), - neighbors = as.character(neighbors), - negative_gradient_method = as.character(negative_gradient_method), - callbacks = callbacks, - callbacks_every_iters = as.integer(callbacks_every_iters), - random_state = random_state) + tsne <- openTSNE.module$TSNE( + n_components = as.integer(n_components), + perplexity = as.numeric(perplexity), + learning_rate = as.numeric(learning_rate), + early_exaggeration_iter = as.integer(early_exaggeration_iter), + early_exaggeration = as.numeric(early_exaggeration), + n_iter = as.integer(n_iter), + exaggeration = exaggeration, + theta = as.numeric(theta), + n_interpolation_points = as.integer(n_interpolation_points), + min_num_intervals = as.integer(min_num_intervals), + ints_in_interval = as.numeric(ints_in_interval), + initialization = initialization, + metric = as.character(metric), + metric_params = metric_params, + initial_momentum = as.numeric(initial_momentum), + final_momentum = as.numeric(final_momentum), + n_jobs = as.integer(n_jobs), + neighbors = as.character(neighbors), + negative_gradient_method = as.character(negative_gradient_method), + callbacks = callbacks, + callbacks_every_iters = as.integer(callbacks_every_iters), + random_state = random_state + ) opentsne_df <- tsne$fit(X = rdf) rownames(opentsne_df) <- rownames(rdf) - colnames(opentsne_df) <- glue("tsne_{1:n_components}") - return(opentsne_df) + colnames(opentsne_df) <- glue::glue("tsne_{1:n_components}") + + opentsne_df } diff --git a/R/optSNE.R b/R/optSNE.R deleted file mode 100644 index 29c88a4..0000000 --- a/R/optSNE.R +++ /dev/null @@ -1,136 +0,0 @@ -#' @title opt-SNE -#' -#' @description An R wrapper for the opt-SNE Python module found at -#' https://github.com/omiq-ai/Multicore-opt-SNE -#' -#' @param rdf A variable by observation data frame -#' @param n_components integer Dimensions of the embedded space. Default: 3 -#' @param perplexity numeric The perplexity is related to the -#' number of nearest neighbors that is used in other manifold learning -#' algorithms. Larger datasets usually require a larger perplexity. Consider -#' selecting a value between 5 and 50. The choice is not extremely critical -#' since t-SNE is quite insensitive to this parameter. Default: 30 -#' @param early_exaggeration numeric Controls how tight natural -#' clusters in the original space are in the embedded space and how much space -#' will be between them. For larger values, the space between natural clusters -#' will be larger in the embedded space. Again, the choice of this parameter -#' is not very critical. If the cost function increases during initial -#' optimization, the early exaggeration factor or the learning rate might be -#' too high. Default: 12.0 -#' @param learning_rate numeric The learning rate for t-SNE is -#' usually in the range [10.0, 1000.0]. If the learning rate is too high, the -#' data may look like a ‘ball’ with any point approximately equidistant from -#' its nearest neighbours. If the learning rate is too low, most points may -#' look compressed in a dense cloud with few outliers. If the cost function -#' gets stuck in a bad local minimum increasing the learning rate may help. Default: 200.0 -#' @param n_iter integer Maximum number of iterations for the -#' optimization. Should be at least 250. Default: 1000 -#' @param n_iter_without_progress integer Maximum number of -#' iterations without progress before we abort the optimization, used after -#' 250 initial iterations with early exaggeration. Note that progress is only -#' checked every 50 iterations so this value is rounded to the next multiple -#' of 50. Default: 300 -#' @param min_grad_norm numeric If the gradient norm is below -#' this threshold, the optimization will be stopped. Default: 1e-7 -#' @param metric character or callable The metric to use when calculating distance -#' between instances in a feature array. If metric is a character, it must be one -#' of the options allowed by scipy.spatial.distance.pdist for its metric -#' parameter, or a metric listed in pairwise.PAIRWISE.DISTANCE.FUNCTIONS. If -#' metric is “precomputed”, X is assumed to be a distance matrix. -#' Alternatively, if metric is a callable function, it is called on each pair -#' of instances (rows) and the resulting value recorded. The callable should -#' take two arrays from X as input and return a value indicating the distance -#' between them. The default is “euclidean” which is interpreted as squared -#' euclidean distance. -#' @param init character or numpy array Initialization of -#' embedding. Possible options are ‘random’, ‘pca’, and a numpy array of shape -#' (n.samples, n.components). PCA initialization cannot be used with -#' precomputed distances and is usually more globally stable than random -#' initialization. Default: “random” -#' @param verbose integer Verbosity level. Default: 0 -#' @param random_state int, RandomState instance or NULL If int, -#' random.state is the seed used by the random number generator; If -#' RandomState instance, random.state is the random number generator; If NULL, -#' the random number generator is the RandomState instance used by np.random. -#' Note that different initializations might result in different local minima -#' of the cost function. Default: NULL -#' @param method character By default the gradient -#' calculation algorithm uses Barnes-Hut approximation running in \eqn{O(N log N)} -#' time. method=’exact’ will run on the slower, but exact, algorithm in \eqn{O(N^2)} -#' time. The exact algorithm should be used when nearest-neighbor errors need -#' to be better than 3%. However, the exact method cannot scale to millions of -#' examples. Default: ‘barnes.hut’ -#' @param angle numeric Only used if method=’barnes.hut’ This is -#' the trade-off between speed and accuracy for Barnes-Hut T-SNE. ‘angle’ is -#' the angular size (also referred to as theta) of a distant node as -#' measured from a point. If this size is below ‘angle’ then it is used as a -#' summary node of all points contained within it. This method is not very -#' sensitive to changes in this parameter in the range of 0.2 - 0.8. Angle -#' less than 0.2 has quickly increasing computation time and angle greater 0.8 -#' has quickly increasing error.#' Default: 0.5 -#' @param auto_iter boolean Should optimal parameters be determined? -#' If false, behaves like stock MulticoreTSNE Default: TRUE -#' @param auto_iter_end intNumber of iterations for parameter -#' optimization. Default: 5000 -#' @param n_jobs Number of processors to use. Default: all. -#' -#' @importFrom reticulate import py_module_available -#' @importFrom parallel detectCores -#' -#' @return data.frame with tSNE coordinates -#' @export -#' -optSNE <- function(rdf, - n_components = 3, - perplexity = 30.0, - early_exaggeration = 12.0, - learning_rate = 200.0, - n_iter = 1000, - n_iter_without_progress = 300, - min_grad_norm = 1e-07, - metric = "euclidean", - init = "random", - verbose = 1, - random_state = NULL, - method = "barnes_hut", - angle = 0.5, - auto_iter = TRUE, - auto_iter_end = 5000, - n_jobs = NULL){ - if (!py_module_available("MulticoreTSNE")){ - stop("The Multicore-opt-SNE module is unavailable. Please activate the appropriate environment or install the module.") - } - - optsne_module <- - import( - module = "MulticoreTSNE", - delay_load = TRUE - ) - - if (is.null(n_jobs)){ - n_jobs <- detectCores() - } - - optsne <- - optsne_module$MulticoreTSNE( - n_components = as.integer(n_components), - perplexity = as.numeric(perplexity), - early_exaggeration = as.numeric(early_exaggeration), - learning_rate = as.numeric(learning_rate), - n_iter = as.integer(n_iter), - n_iter_without_progress = as.integer(n_iter_without_progress), - min_grad_norm = as.numeric(min_grad_norm), - metric = metric, - init = init, - verbose = as.integer(verbose), - random_state = random_state, - method = method, - angle = as.numeric(angle), - auto_iter = auto_iter, - auto_iter_end = auto_iter_end, - n_jobs = n_jobs - ) - - optsne_df <- optsne$fit_transform(rdf) - return(optsne_df) -} diff --git a/R/pacmap.R b/R/pacmap.R index bb2625d..e528d9f 100644 --- a/R/pacmap.R +++ b/R/pacmap.R @@ -102,12 +102,13 @@ pacmap <- function(rdf, verbose = FALSE, apply_pca = TRUE, intermediate = FALSE){ - if (!py_module_available("pacmap")){ + + if (!reticulate::py_module_available("pacmap")){ stop("The pacmap module is unavailable. Please activate the appropriate environment or install the module.") } pacmap_module <- - import( + reticulate::import( module = "pacmap", delay_load = TRUE ) diff --git a/R/paga.R b/R/paga.R index 2a39ef2..af7c1e7 100644 --- a/R/paga.R +++ b/R/paga.R @@ -56,10 +56,10 @@ #' @export #' #' @importFrom s2a convert_to_anndata -#' @importFrom stringr str_glue +#' @importFrom glue glue #' @importFrom reticulate import #' @importFrom Seurat DietSeurat Idents<- -#' @importFrom magrittr %>% set_rownames set_colnames +#' @importFrom magrittr set_rownames set_colnames #' @importFrom rlang %||% #' #' @examples @@ -113,9 +113,9 @@ PAGA <- ){ if (isTRUE(slim)){ - DefaultAssay(object) <- assay + Seurat::DefaultAssay(object) <- assay slimmed_obj <- - DietSeurat( + Seurat::DietSeurat( object = object, assay = assay, dimreducs = neighbors_use_rep, @@ -123,19 +123,19 @@ PAGA <- ) converted_object <- - convert_to_anndata( + s2a::convert_to_anndata( object = slimmed_obj, assay = assay ) } else { converted_object <- - convert_to_anndata( + s2a::convert_to_anndata( object = object, assay = assay ) } - sc <- import( + sc <- reticulate::import( module = "scanpy", delay_load = TRUE ) @@ -148,19 +148,19 @@ PAGA <- # I hate matplotlib. matplotlib <- - import( + reticulate::import( module = "matplotlib", delay_load = TRUE ) matplotlib$use("Agg", force = TRUE) - if (str_glue("X_{neighbors_use_rep}") %in% converted_object$obsm_keys()){ + if (glue::glue("X_{neighbors_use_rep}") %in% converted_object$obsm_keys()){ sc$pp$neighbors( adata = converted_object, n_neighbors = as.integer(neighbors_n_neighbors), n_pcs = neighbors_n_pcs, - use_rep = str_glue("X_{neighbors_use_rep}"), + use_rep = glue::glue("X_{neighbors_use_rep}"), knn = neighbors_knn, random_state = as.integer(neighbors_random_state), method = neighbors_method, @@ -168,7 +168,7 @@ PAGA <- ) } else { if (length(converted_object$obsm_keys()) > 0) { - message(str_glue("{neighbors_use_rep} was not found. Performing PCA...")) + message(glue::glue("{neighbors_use_rep} was not found. Performing PCA...")) } else { message("No reduced dimensional reductions found. Performing PCA...") } @@ -196,7 +196,8 @@ PAGA <- partition_type = clustering_partition_type ) - converted_object$obs[[clustering_key_added]] <- as.factor(as.integer(converted_object$obs[[clustering_key_added]])) + converted_object$obs[[clustering_key_added]] <- + as.factor(as.integer(converted_object$obs[[clustering_key_added]])) sc$tl$paga( adata = converted_object, @@ -213,7 +214,7 @@ PAGA <- } utils <- - import( + reticulate::import( module = "scanpy.tools._utils", delay_load = TRUE ) @@ -244,26 +245,27 @@ PAGA <- ) paga <- list( - connectivities = converted_object$uns[["paga"]]$connectivities$todense() %>% - set_rownames(levels(converted_object$obs[[converted_object$uns[["paga"]]$groups]])) %>% - set_colnames(levels(converted_object$obs[[converted_object$uns[["paga"]]$groups]])), + connectivities = converted_object$uns[["paga"]]$connectivities$todense() |> + magrittr::set_rownames(levels(converted_object$obs[[converted_object$uns[["paga"]]$groups]])) |> + magrittr::set_colnames(levels(converted_object$obs[[converted_object$uns[["paga"]]$groups]])), connectivities_tree = converted_object$uns[["paga"]]$connectivities_tree$todense(), group_name = converted_object$uns[["paga"]]$groups, groups = levels(converted_object$obs[[converted_object$uns[["paga"]]$groups]]), - # group_colors = setNames(converted_object$uns[[str_glue("{converted_object$uns[['paga']]$groups}_colors")]], + # group_colors = setNames(converted_object$uns[[glue::glue("{converted_object$uns[['paga']]$groups}_colors")]], # 0:(nrow(converted_object$uns[["paga"]]$pos)-1) + 1), - position = as_tibble( + position = tibble::as_tibble( cbind( levels(converted_object$obs[[converted_object$uns[["paga"]]$groups]]), - converted_object$uns[["paga"]]$pos), + converted_object$uns[["paga"]]$pos + ), .name_repair = ~make.names(c("group","x", "y")) - ) %>% - mutate( - across( - x:y, - .fns = as.numeric), - ), - umap = as_tibble( + ) |> + dplyr::mutate( + splyr::across( + x:y, + .fns = as.numeric), + ), + umap = tibble::as_tibble( converted_object$obsm['X_umap'], .name_repair = ~make.names( @@ -276,23 +278,23 @@ PAGA <- ) ) - paga$edges <- tibble( + paga$edges <- tibble::tibble( group1 = paga$groups[row(paga$connectivities)[upper.tri(paga$connectivities)]], group2 = paga$groups[col(paga$connectivities)[upper.tri(paga$connectivities)]], - weight = paga$connectivities[upper.tri(paga$connectivities)] %>% as.numeric() - ) %>% + weight = paga$connectivities[upper.tri(paga$connectivities)] |> as.numeric() + ) |> mutate( - x1 = paga$position$x[match(.$group1, rownames(paga$position))] %>% as.numeric(), - y1 = paga$position$y[match(.$group1, rownames(paga$position))] %>% as.numeric(), - x2 = paga$position$x[match(.$group2, rownames(paga$position))] %>% as.numeric(), - y2 = paga$position$y[match(.$group2, rownames(paga$position))] %>% as.numeric() - ) %>% + x1 = paga$position$x[match(.$group1, rownames(paga$position))] |> as.numeric(), + y1 = paga$position$y[match(.$group1, rownames(paga$position))] |> as.numeric(), + x2 = paga$position$x[match(.$group2, rownames(paga$position))] |> as.numeric(), + y2 = paga$position$y[match(.$group2, rownames(paga$position))] |> as.numeric() + ) |> filter(weight >= edge_filter_weight) paga_umap <- CreateDimReducObject( - embeddings = converted_object$obsm[['X_umap']] %>% - set_rownames(colnames(object[[assay]])) %>% - set_colnames( + embeddings = converted_object$obsm[['X_umap']] |> + magrittr::set_rownames(colnames(object[[assay]])) |> + magrittr::set_colnames( paste0( "UMAP_", 1:ncol(converted_object$obsm['X_umap']) @@ -307,7 +309,7 @@ PAGA <- object@misc$paga <- paga if (isTRUE(set_ident)){ - Idents(object) <- object@meta.data[[grouping]] + Seurat::Idents(object) <- object@meta.data[[grouping]] } object @@ -321,7 +323,7 @@ PAGA <- #' @param object Seurat object with PAGA in misc slot to plot #' @param edge_scale_weight Factor to scale edge line segment weight by. Default: 0.5 #' -#' @importFrom cowplot theme_cowplot +#' @importFrom ggpubr theme_pubr #' @importFrom ggplot2 ggplot aes geom_point geom_segment scale_color_manual geom_text labs #' #' @return @@ -333,11 +335,12 @@ PAGAplot <- object, edge_scale_weight = 0.2 ){ - object@misc$paga$position %>% - ggplot(aes(x, y)) + - geom_segment( + object@misc$paga$position |> + ggplot2::ggplot(aes(x, y)) + + ggplot2::geom_segment( data = object@misc$paga$edges, - aes(x = x1, + ggplot2::aes( + x = x1, y = y1, xend = x2, yend = y2, @@ -345,16 +348,17 @@ PAGAplot <- colour = "black", show.legend = FALSE ) + - scale_size_identity() + - geom_point( - aes(color = group), + ggplot2::scale_size_identity() + + ggplot2::geom_point( + ggplot2::aes(color = group), size = 7, alpha = 1, show.legend = FALSE) + - scale_color_brewer() + - geom_text(aes(label = group), + ggplot2::scale_color_brewer() + + ggplot2::geom_text(ggplot2::aes(label = group), color = "black", fontface = "bold") + - labs(x = "UMAP_1", - y = "UMAP_2") + ggplot2::labs(x = "UMAP_1", + y = "UMAP_2") + + ggpubr::theme_pubr() } diff --git a/R/phate.R b/R/phate.R index cb1772c..000ed35 100644 --- a/R/phate.R +++ b/R/phate.R @@ -1,4 +1,4 @@ -#' phate +#' @title phate #' #' An R wrapper around the PHATE Python module found at #' https://github.com/KrishnaswamyLab/PHATE @@ -73,32 +73,33 @@ phate <- function(ce, n_jobs = NULL, random_state = NULL, verbose = 1){ - if (!py_module_available("phate")){ + if (!reticulate::py_module_available("phate")){ stop("The phate module is unavailable. Please activate the appropriate environment or install the module.") } - phate <- import(module = "phate", delay_load = TRUE) + phate <- reticulate::import(module = "phate", delay_load = TRUE) if (is.null(n_jobs)){ - n_jobs <- detectCores() + n_jobs <- parallel::detectCores() } if (is.null(n_pca)){ n_pca <- ncol(ce) } - phate_op <- phate$PHATE(n_components = as.integer(n_components), - k = as.integer(k), - a = as.integer(a), - n_landmark = as.integer(n_landmark), - t = as.character(t), - gamma = as.numeric(gamma), - n_pca = as.integer(n_pca), - knn_dist = knn_dist, - mds_dist = mds_dist, - mds = mds, - n_jobs = as.integer(n_jobs), - random_state = random_state, - verbose = as.integer(verbose) + phate_op <- phate$PHATE( + n_components = as.integer(n_components), + k = as.integer(k), + a = as.integer(a), + n_landmark = as.integer(n_landmark), + t = as.character(t), + gamma = as.numeric(gamma), + n_pca = as.integer(n_pca), + knn_dist = knn_dist, + mds_dist = mds_dist, + mds = mds, + n_jobs = as.integer(n_jobs), + random_state = random_state, + verbose = as.integer(verbose) ) - phate_df <- phate_op$fit_transform(ce) - return(phate_df) + + phate_op$fit_transform(ce) } diff --git a/R/phenograph.R b/R/phenograph.R index 938ef9f..44f4b54 100644 --- a/R/phenograph.R +++ b/R/phenograph.R @@ -1,4 +1,4 @@ -#' Phenograph +#' @title Phenograph #' #' Used to cluster high dimensional data. An R wrapper around the Python #' Phenograph module found at https://github.com/jacoblevine/PhenoGraph @@ -48,24 +48,31 @@ phenograph <- function(rdf, n_jobs = NULL, q_tol = 0.001, louvain_time_limit = 2000, - nn_method = "kdtree"){ - if (!py_module_available("phenograph")){ + nn_method = "kdtree" + ){ + + if (!reticulate::py_module_available("phenograph")){ stop("The PhenoGraph module is unavailable. Please activate the appropriate environment or install the module.") } + if (is.null(n_jobs)){ - n_jobs <- detectCores() + n_jobs <- parallel::detectCores() } - phenograph_module <- import(module = "phenograph", delay_load = TRUE) - phenograph_tuple <- phenograph_module$cluster(rdf, - k = as.integer(k), - directed = directed, - prune = prune, - min_cluster_size = as.integer(min_cluster_size), - jaccard = jaccard, - primary_metric = primary_metric, - n_jobs = as.integer(n_jobs), - q_tol = as.numeric(q_tol), - louvain_time_limit = as.integer(louvain_time_limit), - nn_method = "kdtree") - return(phenograph_tuple[[1]]) + phenograph_module <- reticulate::import(module = "phenograph", delay_load = TRUE) + phenograph_tuple <- + phenograph_module$cluster( + rdf, + k = as.integer(k), + directed = directed, + prune = prune, + min_cluster_size = as.integer(min_cluster_size), + jaccard = jaccard, + primary_metric = primary_metric, + n_jobs = as.integer(n_jobs), + q_tol = as.numeric(q_tol), + louvain_time_limit = as.integer(louvain_time_limit), + nn_method = "kdtree" + ) + + phenograph_tuple[[1]] } diff --git a/R/umap.R b/R/umap.R index 5a71561..960d79d 100644 --- a/R/umap.R +++ b/R/umap.R @@ -1,4 +1,4 @@ -#' umap +#' @title umap #' #' An R wrapper around the UMAP Python module found at #' https://github.com/lmcinnes/umap @@ -155,62 +155,67 @@ #' @rdname umap #' umap <- function(rdf, - n_neighbors = 15, - n_components = 3, - metric = "euclidean", - n_epochs = NULL, - learning_rate = 1.0, - init = "spectral", - min_dist = 0.1, - spread = 1.0, - set_op_mix_ratio = 1.0, - local_connectivity = 1, - repulsion_strength = 1.0, + n_neighbors = 15, + n_components = 3, + metric = "euclidean", + n_epochs = NULL, + learning_rate = 1.0, + init = "spectral", + min_dist = 0.1, + spread = 1.0, + set_op_mix_ratio = 1.0, + local_connectivity = 1, + repulsion_strength = 1.0, negative_sample_rate = 5, transform_queue_size = 4.0, - a = NULL, - b = NULL, - random_state = NULL, - metric_kwds = NULL, - angular_rp_forest = FALSE, - target_n_neighbors = -1, - target_metric = "categorical", - target_metric_kwds = NULL, - target_weight = 0.5, - transform_seed = 42, - verbose = FALSE){ - if (!py_module_available("umap")){ + a = NULL, + b = NULL, + random_state = NULL, + metric_kwds = NULL, + angular_rp_forest = FALSE, + target_n_neighbors = -1, + target_metric = "categorical", + target_metric_kwds = NULL, + target_weight = 0.5, + transform_seed = 42, + verbose = FALSE + ){ + if (!reticulate::py_module_available("umap")){ stop("The umap module is unavailable. Please activate the appropriate environment or install the module.") } - umap.module <- import(module = "umap", delay_load = TRUE) - if (!is.null(n_epochs)){ + umap.module <- + reticulate::import( + module = "umap", + delay_load = TRUE + ) + if (!is.null(n_epochs)) { n_epochs <- as.integer(n_epochs) } - umap.embed <- umap.module$UMAP(n_neighbors = as.integer(n_neighbors), - min_dist = as.numeric(min_dist), - n_components = as.integer(n_components), - metric = metric, - init = init, - spread = as.numeric(spread), - random_state = random_state, - angular_rp_forest = angular_rp_forest, - set_op_mix_ratio = as.numeric(set_op_mix_ratio), - n_epochs = n_epochs, - learning_rate = as.numeric(learning_rate), - local_connectivity = as.integer(local_connectivity), - repulsion_strength = as.numeric(repulsion_strength), - negative_sample_rate = as.integer(negative_sample_rate), - transform_queue_size = as.numeric(transform_queue_size), - a = as.numeric(a), - metric_kwds = metric_kwds, - target_n_neighbors = as.integer(target_n_neighbors), - target_metric = target_metric, - target_metric_kwds = target_metric_kwds, - target_weight = as.numeric(target_weight), - transform_seed = as.integer(transform_seed), - verbose = TRUE - ) + umap.embed <- umap.module$UMAP( + n_neighbors = as.integer(n_neighbors), + min_dist = as.numeric(min_dist), + n_components = as.integer(n_components), + metric = metric, + init = init, + spread = as.numeric(spread), + random_state = random_state, + angular_rp_forest = angular_rp_forest, + set_op_mix_ratio = as.numeric(set_op_mix_ratio), + n_epochs = n_epochs, + learning_rate = as.numeric(learning_rate), + local_connectivity = as.integer(local_connectivity), + repulsion_strength = as.numeric(repulsion_strength), + negative_sample_rate = as.integer(negative_sample_rate), + transform_queue_size = as.numeric(transform_queue_size), + a = as.numeric(a), + metric_kwds = metric_kwds, + target_n_neighbors = as.integer(target_n_neighbors), + target_metric = target_metric, + target_metric_kwds = target_metric_kwds, + target_weight = as.numeric(target_weight), + transform_seed = as.integer(transform_seed), + verbose = TRUE + ) - umap.df <- umap.embed$fit_transform(rdf) - return(umap.df) + umap.embed$fit_transform(rdf) } diff --git a/README.md b/README.md index ac86269..0c58eb1 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ R wrappers around dimensionality reduction methods found in Python modules. Uses the [reticulate](https://github.com/rstudio/reticulate) package to expose functionality. Additionally provides bridging functions that let these work as drop-in replacements when working with Seurat (verions 3) and SingleCellExperiment objects. Currently wraps: * [ForceAtlas2](http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0098679), using the Python implementation found [here](https://github.com/bhargavchippada/forceatlas2). Currently works for Seurat objects only (and will remain so until I can find a fast algorithm for computing simultaneous nearest neighbors for SingleCellExperiment objects). - * [opt-SNE](https://github.com/omiq-ai/Multicore-opt-SNE) * [openTSNE](https://github.com/pavlin-policar/openTSNE) * [UMAP (Uniform Manifold Approximation and Projection)](https://github.com/lmcinnes/umap) * [PaCMAP (Pairwise Controlled Manifold Approximation)](https://github.com/YingfanWang/PaCMAP) diff --git a/man/DooptSNE.Rd b/man/DooptSNE.Rd index c5e1fd7..c6d1e52 100644 --- a/man/DooptSNE.Rd +++ b/man/DooptSNE.Rd @@ -4,14 +4,6 @@ \alias{DooptSNE} \title{DooptSNE} \usage{ -DooptSNE( - object, - reduction_use = "pca", - reduction_save = "optsne", - dims_use = NULL, - ... -) - DooptSNE( object, reduction_use = "pca", @@ -34,9 +26,6 @@ etc...). Default: tsne} \item{...}{Extra parameters to pass to the multicoreTSNE function.} } \description{ -Perform tSNE projection on a Seurat object using the -Multicore-opt-SNE function - Perform tSNE projection on a Seurat object using the Multicore-opt-SNE function } diff --git a/man/fa2.Rd b/man/fa2.Rd index 8a7a5bf..329f87f 100644 --- a/man/fa2.Rd +++ b/man/fa2.Rd @@ -2,7 +2,12 @@ % Please edit documentation in R/forceatlas2.R \name{fa2} \alias{fa2} -\title{ForceAtlas2} +\title{ForceAtlas2 + +An R wrapper around the Python implementation of ForceAtlas2 found at +https://github.com/bhargavchippada/forceatlas2 + +Currently a very restricted version} \usage{ fa2(init_pos, adjacencies, iterations = 500, ...) } @@ -16,9 +21,10 @@ fa2(init_pos, adjacencies, iterations = 500, ...) \item{...}{Additional arguments to pass to the forceatlas2 object instantiation} } \description{ +ForceAtlas2 + An R wrapper around the Python implementation of ForceAtlas2 found at https://github.com/bhargavchippada/forceatlas2 -} -\details{ + Currently a very restricted version } diff --git a/man/openTSNE.Rd b/man/openTSNE.Rd index c68ee95..eb749d9 100644 --- a/man/openTSNE.Rd +++ b/man/openTSNE.Rd @@ -2,7 +2,10 @@ % Please edit documentation in R/opentsne.R \name{openTSNE} \alias{openTSNE} -\title{openTSNE} +\title{openTSNE + +An R wrapper for the openTSNE Python module found at +https://github.com/pavlin-policar/openTSNE/} \usage{ openTSNE( rdf, @@ -148,6 +151,8 @@ number generator is the RandomState instance used by "np.random". Default: NULL} data.frame with tSNE coordinates } \description{ +openTSNE + An R wrapper for the openTSNE Python module found at https://github.com/pavlin-policar/openTSNE/ } diff --git a/man/optSNE.Rd b/man/optSNE.Rd deleted file mode 100644 index c0d3bcf..0000000 --- a/man/optSNE.Rd +++ /dev/null @@ -1,121 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/optSNE.R -\name{optSNE} -\alias{optSNE} -\title{opt-SNE} -\usage{ -optSNE( - rdf, - n_components = 3, - perplexity = 30, - early_exaggeration = 12, - learning_rate = 200, - n_iter = 1000, - n_iter_without_progress = 300, - min_grad_norm = 1e-07, - metric = "euclidean", - init = "random", - verbose = 1, - random_state = NULL, - method = "barnes_hut", - angle = 0.5, - auto_iter = TRUE, - auto_iter_end = 5000, - n_jobs = NULL -) -} -\arguments{ -\item{rdf}{A variable by observation data frame} - -\item{n_components}{integer Dimensions of the embedded space. Default: 3} - -\item{perplexity}{numeric The perplexity is related to the -number of nearest neighbors that is used in other manifold learning -algorithms. Larger datasets usually require a larger perplexity. Consider -selecting a value between 5 and 50. The choice is not extremely critical -since t-SNE is quite insensitive to this parameter. Default: 30} - -\item{early_exaggeration}{numeric Controls how tight natural -clusters in the original space are in the embedded space and how much space -will be between them. For larger values, the space between natural clusters -will be larger in the embedded space. Again, the choice of this parameter -is not very critical. If the cost function increases during initial -optimization, the early exaggeration factor or the learning rate might be -too high. Default: 12.0} - -\item{learning_rate}{numeric The learning rate for t-SNE is -usually in the range [10.0, 1000.0]. If the learning rate is too high, the -data may look like a ‘ball’ with any point approximately equidistant from -its nearest neighbours. If the learning rate is too low, most points may -look compressed in a dense cloud with few outliers. If the cost function -gets stuck in a bad local minimum increasing the learning rate may help. Default: 200.0} - -\item{n_iter}{integer Maximum number of iterations for the -optimization. Should be at least 250. Default: 1000} - -\item{n_iter_without_progress}{integer Maximum number of -iterations without progress before we abort the optimization, used after -250 initial iterations with early exaggeration. Note that progress is only -checked every 50 iterations so this value is rounded to the next multiple -of 50. Default: 300} - -\item{min_grad_norm}{numeric If the gradient norm is below -this threshold, the optimization will be stopped. Default: 1e-7} - -\item{metric}{character or callable The metric to use when calculating distance -between instances in a feature array. If metric is a character, it must be one -of the options allowed by scipy.spatial.distance.pdist for its metric -parameter, or a metric listed in pairwise.PAIRWISE.DISTANCE.FUNCTIONS. If -metric is “precomputed”, X is assumed to be a distance matrix. -Alternatively, if metric is a callable function, it is called on each pair -of instances (rows) and the resulting value recorded. The callable should -take two arrays from X as input and return a value indicating the distance -between them. The default is “euclidean” which is interpreted as squared -euclidean distance.} - -\item{init}{character or numpy array Initialization of -embedding. Possible options are ‘random’, ‘pca’, and a numpy array of shape -(n.samples, n.components). PCA initialization cannot be used with -precomputed distances and is usually more globally stable than random -initialization. Default: “random”} - -\item{verbose}{integer Verbosity level. Default: 0} - -\item{random_state}{int, RandomState instance or NULL If int, -random.state is the seed used by the random number generator; If -RandomState instance, random.state is the random number generator; If NULL, -the random number generator is the RandomState instance used by np.random. -Note that different initializations might result in different local minima -of the cost function. Default: NULL} - -\item{method}{character By default the gradient -calculation algorithm uses Barnes-Hut approximation running in \eqn{O(N log N)} -time. method=’exact’ will run on the slower, but exact, algorithm in \eqn{O(N^2)} -time. The exact algorithm should be used when nearest-neighbor errors need -to be better than 3%. However, the exact method cannot scale to millions of -examples. Default: ‘barnes.hut’} - -\item{angle}{numeric Only used if method=’barnes.hut’ This is -the trade-off between speed and accuracy for Barnes-Hut T-SNE. ‘angle’ is -the angular size (also referred to as theta) of a distant node as -measured from a point. If this size is below ‘angle’ then it is used as a -summary node of all points contained within it. This method is not very -sensitive to changes in this parameter in the range of 0.2 - 0.8. Angle -less than 0.2 has quickly increasing computation time and angle greater 0.8 -has quickly increasing error.#' Default: 0.5} - -\item{auto_iter}{boolean Should optimal parameters be determined? -If false, behaves like stock MulticoreTSNE Default: TRUE} - -\item{auto_iter_end}{intNumber of iterations for parameter -optimization. Default: 5000} - -\item{n_jobs}{Number of processors to use. Default: all.} -} -\value{ -data.frame with tSNE coordinates -} -\description{ -An R wrapper for the opt-SNE Python module found at -https://github.com/omiq-ai/Multicore-opt-SNE -} diff --git a/man/phate.Rd b/man/phate.Rd index 87dcabb..79f614f 100644 --- a/man/phate.Rd +++ b/man/phate.Rd @@ -2,7 +2,14 @@ % Please edit documentation in R/phate.R \name{phate} \alias{phate} -\title{phate} +\title{phate + +An R wrapper around the PHATE Python module found at +https://github.com/KrishnaswamyLab/PHATE + +Potential of Heat-diffusion for Affinity-based Trajectory Embedding (PHATE) +embeds high dimensional single-cell data into two or three dimensions for +visualization of biological progressions as described in Moon et al, 2017} \usage{ phate( ce, @@ -85,10 +92,11 @@ status messages} data.frame with PHATE coordinates } \description{ +phate + An R wrapper around the PHATE Python module found at https://github.com/KrishnaswamyLab/PHATE -} -\details{ + Potential of Heat-diffusion for Affinity-based Trajectory Embedding (PHATE) embeds high dimensional single-cell data into two or three dimensions for visualization of biological progressions as described in Moon et al, 2017 diff --git a/man/phenograph.Rd b/man/phenograph.Rd index 057d623..c1b7cfe 100644 --- a/man/phenograph.Rd +++ b/man/phenograph.Rd @@ -2,7 +2,10 @@ % Please edit documentation in R/phenograph.R \name{phenograph} \alias{phenograph} -\title{Phenograph} +\title{Phenograph + +Used to cluster high dimensional data. An R wrapper around the Python +Phenograph module found at https://github.com/jacoblevine/PhenoGraph} \usage{ phenograph( rdf, @@ -62,6 +65,8 @@ parallel computation) performs faster than kdtree.} data.frame with community membership infomation } \description{ +Phenograph + Used to cluster high dimensional data. An R wrapper around the Python Phenograph module found at https://github.com/jacoblevine/PhenoGraph } diff --git a/man/umap.Rd b/man/umap.Rd index 8e72de4..2b3902a 100644 --- a/man/umap.Rd +++ b/man/umap.Rd @@ -2,7 +2,15 @@ % Please edit documentation in R/umap.R \name{umap} \alias{umap} -\title{umap} +\title{umap + +An R wrapper around the UMAP Python module found at +https://github.com/lmcinnes/umap + +Uniform Manifold Approximation and Projection + +Finds a low dimensional embedding of the data that approximates an underlying +manifold.} \usage{ umap( rdf, @@ -200,10 +208,11 @@ Controls verbosity of logging.} data.frame with UMAP coordinates } \description{ +umap + An R wrapper around the UMAP Python module found at https://github.com/lmcinnes/umap -} -\details{ + Uniform Manifold Approximation and Projection Finds a low dimensional embedding of the data that approximates an underlying diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..ee7719f --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1101 @@ +[[package]] +name = "anndata" +version = "0.7.6" +description = "Annotated multivariate observation data." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +h5py = "*" +natsort = "*" +numpy = ">=1.16.5" +packaging = ">=20" +pandas = ">=1.1.1" +scipy = ">1.4" +xlrd = "<2.0" + +[package.extras] +dev = ["setuptools-scm", "pytoml", "black (>=20.8b1)", "docutils"] +doc = ["sphinx (>=2.0.1)", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.11.0)", "sphinx-issues", "scanpydoc (>=0.5)", "typing-extensions"] +test = ["loompy (>=3.0.5)", "pytest (>=6.0)", "pytest-cov (>=2.10)", "zarr", "matplotlib", "sklearn", "xlrd", "joblib", "boltons", "scanpy"] + +[[package]] +name = "annoy" +version = "1.17.0" +description = "Approximate Nearest Neighbors in C++/Python optimized for memory usage and loading/saving to disk." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "cycler" +version = "0.10.0" +description = "Composable style cycles" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + +[[package]] +name = "forceatlas2" +version = "1.0" +description = "The ForceAtlas2 algorithm for Python (and NetworkX)" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "h5py" +version = "3.3.0" +description = "Read and write HDF5 files from Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +numpy = [ + {version = ">=1.17.5", markers = "python_version == \"3.8\""}, + {version = ">=1.19.3", markers = "python_version >= \"3.9\""}, +] + +[[package]] +name = "joblib" +version = "1.0.1" +description = "Lightweight pipelining with Python functions" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "kiwisolver" +version = "1.3.1" +description = "A fast implementation of the Cassowary constraint solver" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "leidenalg" +version = "0.8.7" +description = "Leiden is a general algorithm for methods of community detection in large networks." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +python-igraph = ">=0.9.0" + +[[package]] +name = "llvmlite" +version = "0.36.0" +description = "lightweight wrapper around basic LLVM functionality" +category = "main" +optional = false +python-versions = ">=3.6,<3.10" + +[[package]] +name = "matplotlib" +version = "3.4.2" +description = "Python plotting package" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cycler = ">=0.10" +kiwisolver = ">=1.0.1" +numpy = ">=1.16" +pillow = ">=6.2.0" +pyparsing = ">=2.2.1" +python-dateutil = ">=2.7" + +[[package]] +name = "natsort" +version = "7.1.1" +description = "Simple yet flexible natural sorting in Python." +category = "main" +optional = false +python-versions = ">=3.4" + +[package.extras] +fast = ["fastnumbers (>=2.0.0)"] +icu = ["PyICU (>=1.0.0)"] + +[[package]] +name = "networkx" +version = "2.6.2" +description = "Python package for creating and manipulating graphs and networks" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] +developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] +doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] +extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"] +test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"] + +[[package]] +name = "numba" +version = "0.53.1" +description = "compiling Python code using LLVM" +category = "main" +optional = false +python-versions = ">=3.6,<3.10" + +[package.dependencies] +llvmlite = ">=0.36.0rc1,<0.37" +numpy = ">=1.15" + +[[package]] +name = "numexpr" +version = "2.7.3" +description = "Fast numerical expression evaluator for NumPy" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +numpy = ">=1.7" + +[[package]] +name = "numpy" +version = "1.21.1" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "openTSNE" +version = "0.6.0" +description = "Extensible, parallel implementations of t-SNE" +category = "main" +optional = false +python-versions = ">=3.6" +develop = false + +[package.dependencies] +numpy = ">=1.16.6" +scikit-learn = ">=0.20" +scipy = "*" + +[package.extras] +hnsw = ["hnswlib (>=0.4.0,<0.5.0)"] +pynndescent = ["pynndescent (>=0.5.0,<0.6.0)"] + +[package.source] +type = "git" +url = "https://github.com/pavlin-policar/openTSNE" +reference = "master" +resolved_reference = "397415c11ffa65bf2b8a9a0a33981ccfb8e3bf9e" + +[[package]] +name = "packaging" +version = "21.0" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2" + +[[package]] +name = "pacmap" +version = "0.5.0" +description = "The official implementation for PaCMAP: Pairwise ControlledManifold Approximation Projection" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +annoy = ">=1.11" +numba = ">=0.50" +numpy = ">=1.20" +scikit-learn = ">=0.20" + +[[package]] +name = "pandas" +version = "1.3.1" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.7.1" + +[package.dependencies] +numpy = ">=1.17.3" +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "patsy" +version = "0.5.1" +description = "A Python package for describing statistical models and for building design matrices." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +numpy = ">=1.4" +six = "*" + +[[package]] +name = "phenograph" +version = "1.5.7" +description = "Graph-based clustering for high-dimensional single-cell data" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +leidenalg = ">=0.8.2" +numpy = ">=1.12" +psutil = ">4" +scikit-learn = ">=0.17" +scipy = ">=1.5.1" + +[[package]] +name = "pillow" +version = "8.3.1" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "psutil" +version = "5.8.0" +description = "Cross-platform lib for process and system monitoring in Python." +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] + +[[package]] +name = "pynndescent" +version = "0.5.4" +description = "Nearest Neighbor Descent" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +joblib = ">=0.11" +llvmlite = ">=0.30" +numba = ">=0.51.2" +scikit-learn = ">=0.18" +scipy = ">=1.0" + +[[package]] +name = "pyparsing" +version = "2.4.7" +description = "Python parsing module" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-igraph" +version = "0.9.6" +description = "High performance graph data structures and algorithms" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +texttable = ">=1.6.2" + +[package.extras] +plotting = ["pycairo (>=1.18.0)"] + +[[package]] +name = "pytz" +version = "2021.1" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "scanpy" +version = "1.8.1" +description = "Single-Cell Analysis in Python." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +anndata = ">=0.7.4" +h5py = ">=2.10.0" +joblib = "*" +matplotlib = ">=3.1.2" +natsort = "*" +networkx = ">=2.3" +numba = ">=0.41.0" +numpy = ">=1.17.0" +packaging = "*" +pandas = ">=0.21" +patsy = "*" +scikit-learn = ">=0.22" +scipy = ">=1.4" +seaborn = "*" +sinfo = "*" +statsmodels = ">=0.10.0rc2" +tables = "*" +tqdm = "*" +umap-learn = ">=0.3.10" + +[package.extras] +bbknn = ["bbknn"] +dev = ["setuptools-scm", "pytoml", "black (>=20.8b1)", "docutils"] +doc = ["sphinx (>=3.2)", "sphinx-rtd-theme (>=0.3.1)", "sphinx-autodoc-typehints", "scanpydoc (==0.7.2)", "typing-extensions", "python-igraph"] +harmony = ["harmonypy"] +leiden = ["python-igraph", "leidenalg"] +louvain = ["python-igraph", "louvain (>=0.6,!=0.6.2)"] +magic = ["magic-impute (>=2.0)"] +rapids = ["cudf (>=0.9)", "cuml (>=0.9)", "cugraph (>=0.9)"] +scanorama = ["scanorama"] +scrublet = ["scrublet"] +skmisc = ["scikit-misc (>=0.1.3)"] +test = ["pytest (>=4.4)", "pytest-nunit", "dask[array] (!=2.17.0)", "fsspec", "zappy", "zarr", "profimp", "flit-core"] + +[[package]] +name = "scikit-learn" +version = "0.24.2" +description = "A set of python modules for machine learning and data mining" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +joblib = ">=0.11" +numpy = ">=1.13.3" +scipy = ">=0.19.1" +threadpoolctl = ">=2.0.0" + +[package.extras] +benchmark = ["matplotlib (>=2.1.1)", "pandas (>=0.25.0)", "memory-profiler (>=0.57.0)"] +docs = ["matplotlib (>=2.1.1)", "scikit-image (>=0.13)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)", "memory-profiler (>=0.57.0)", "sphinx (>=3.2.0)", "sphinx-gallery (>=0.7.0)", "numpydoc (>=1.0.0)", "Pillow (>=7.1.2)", "sphinx-prompt (>=1.3.0)"] +examples = ["matplotlib (>=2.1.1)", "scikit-image (>=0.13)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)"] +tests = ["matplotlib (>=2.1.1)", "scikit-image (>=0.13)", "pandas (>=0.25.0)", "pytest (>=5.0.1)", "pytest-cov (>=2.9.0)", "flake8 (>=3.8.2)", "mypy (>=0.770)", "pyamg (>=4.0.0)"] + +[[package]] +name = "scipy" +version = "1.7.1" +description = "SciPy: Scientific Library for Python" +category = "main" +optional = false +python-versions = ">=3.7,<3.10" + +[package.dependencies] +numpy = ">=1.16.5,<1.23.0" + +[[package]] +name = "seaborn" +version = "0.11.1" +description = "seaborn: statistical data visualization" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +matplotlib = ">=2.2" +numpy = ">=1.15" +pandas = ">=0.23" +scipy = ">=1.0" + +[[package]] +name = "sinfo" +version = "0.3.4" +description = "sinfo outputs version information for modules loaded in the current session, Python, and the OS." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +stdlib_list = "*" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "statsmodels" +version = "0.12.2" +description = "Statistical computations and models for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +numpy = ">=1.15" +pandas = ">=0.21" +patsy = ">=0.5" +scipy = ">=1.1" + +[package.extras] +build = ["cython (>=0.29)"] +develop = ["cython (>=0.29)"] +docs = ["sphinx", "nbconvert", "jupyter-client", "ipykernel", "matplotlib", "nbformat", "numpydoc", "pandas-datareader"] + +[[package]] +name = "stdlib-list" +version = "0.8.0" +description = "A list of Python Standard Libraries (2.6-7, 3.2-9)." +category = "main" +optional = false +python-versions = "*" + +[package.extras] +develop = ["sphinx"] + +[[package]] +name = "tables" +version = "3.6.1" +description = "Hierarchical datasets for Python" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +numexpr = ">=2.6.2" +numpy = ">=1.9.3" + +[[package]] +name = "texttable" +version = "1.6.4" +description = "module for creating simple ASCII tables" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "threadpoolctl" +version = "2.2.0" +description = "threadpoolctl" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "tqdm" +version = "4.62.0" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +telegram = ["requests"] + +[[package]] +name = "umap-learn" +version = "0.5.1" +description = "Uniform Manifold Approximation and Projection" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +numba = ">=0.49" +numpy = ">=1.17" +pynndescent = ">=0.5" +scikit-learn = ">=0.22" +scipy = ">=1.0" + +[package.extras] +parametric_umap = ["tensorflow (>=2.1)"] +plot = ["pandas", "matplotlib", "datashader", "bokeh", "holoviews", "colorcet", "seaborn", "scikit-image"] + +[[package]] +name = "xlrd" +version = "1.2.0" +description = "Library for developers to extract data from Microsoft Excel (tm) spreadsheet files" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[metadata] +lock-version = "1.1" +python-versions = "^3.8,<3.10" +content-hash = "6a9adda916412193c81fa18ff8c4a9b5e2d7185977fd30a9607ea66665cf23c0" + +[metadata.files] +anndata = [ + {file = "anndata-0.7.6-py3-none-any.whl", hash = "sha256:d6147f227c0cc94fe36fd1b1617f8ac3eaaedc656bacb6e85491e45b7eb9adab"}, + {file = "anndata-0.7.6.tar.gz", hash = "sha256:a3cc67bba9a4cd4b5984aec64c4f577c2d5a4695f4064027f8e6a9dac1f508b2"}, +] +annoy = [ + {file = "annoy-1.17.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:78df35a7c2c74b74d94b4bdc74ab4faa9a5ff67cb83d12902673d0d9bd02219d"}, + {file = "annoy-1.17.0.tar.gz", hash = "sha256:9891e264041d1dcf3af42f67fbb16cb273c5404bc8c869d0915a3087f71d58dd"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +cycler = [ + {file = "cycler-0.10.0-py2.py3-none-any.whl", hash = "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d"}, + {file = "cycler-0.10.0.tar.gz", hash = "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"}, +] +forceatlas2 = [ + {file = "ForceAtlas2-1.0.tar.gz", hash = "sha256:fdc3d3ea7f85b6535598c30ced3b5ccc7b1ac2e49dc486f4a19c6b9fa998a81d"}, +] +h5py = [ + {file = "h5py-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f3bba8ffddd1fd2bf06127c5ff7b73f022cc1c8b7164355ddc760dc3f8570136"}, + {file = "h5py-3.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baef1a2cdef287a83e7f95ce9e0f4d762a9852fe7117b471063442c78b973695"}, + {file = "h5py-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8e09b682e4059c8cd259ddcc34bee35d639b9170105efeeae6ad195e7c1cea7a"}, + {file = "h5py-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:89d7e10409b62fed81c571e35798763cb8375442b98f8ebfc52ba41ac019e081"}, + {file = "h5py-3.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7ca7d23ebbdd59a4be9b4820de52fe67adc74e6a44d5084881305461765aac47"}, + {file = "h5py-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e0ea3330bf136f8213e43db67448994046ce501585dddc7ea4e8ceef0ef1600c"}, + {file = "h5py-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:13355234c004ff8bd819f7d3420188aa1936b17d7f8470d622974a373421b7a5"}, + {file = "h5py-3.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:09e78cefdef0b7566ab66366c5c7d9984c7b23142245bd51b82b744ad1eebf65"}, + {file = "h5py-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:5e2f22e66a3fb1815405cfe5711670450c973b8552507c535a546a23a468af3d"}, + {file = "h5py-3.3.0.tar.gz", hash = "sha256:e0dac887d779929778b3cfd13309a939359cc9e74756fc09af7c527a82797186"}, +] +joblib = [ + {file = "joblib-1.0.1-py3-none-any.whl", hash = "sha256:feeb1ec69c4d45129954f1b7034954241eedfd6ba39b5e9e4b6883be3332d5e5"}, + {file = "joblib-1.0.1.tar.gz", hash = "sha256:9c17567692206d2f3fb9ecf5e991084254fe631665c450b443761c4186a613f7"}, +] +kiwisolver = [ + {file = "kiwisolver-1.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd34fbbfbc40628200730bc1febe30631347103fc8d3d4fa012c21ab9c11eca9"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d3155d828dec1d43283bd24d3d3e0d9c7c350cdfcc0bd06c0ad1209c1bbc36d0"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5a7a7dbff17e66fac9142ae2ecafb719393aaee6a3768c9de2fd425c63b53e21"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f8d6f8db88049a699817fd9178782867bf22283e3813064302ac59f61d95be05"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:5f6ccd3dd0b9739edcf407514016108e2280769c73a85b9e59aa390046dbf08b"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-win32.whl", hash = "sha256:225e2e18f271e0ed8157d7f4518ffbf99b9450fca398d561eb5c4a87d0986dd9"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cf8b574c7b9aa060c62116d4181f3a1a4e821b2ec5cbfe3775809474113748d4"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:232c9e11fd7ac3a470d65cd67e4359eee155ec57e822e5220322d7b2ac84fbf0"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b38694dcdac990a743aa654037ff1188c7a9801ac3ccc548d3341014bc5ca278"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ca3820eb7f7faf7f0aa88de0e54681bddcb46e485beb844fcecbcd1c8bd01689"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c8fd0f1ae9d92b42854b2979024d7597685ce4ada367172ed7c09edf2cef9cb8"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:1e1bc12fb773a7b2ffdeb8380609f4f8064777877b2225dec3da711b421fda31"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:72c99e39d005b793fb7d3d4e660aed6b6281b502e8c1eaf8ee8346023c8e03bc"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:8be8d84b7d4f2ba4ffff3665bcd0211318aa632395a1a41553250484a871d454"}, + {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31dfd2ac56edc0ff9ac295193eeaea1c0c923c0355bf948fbd99ed6018010b72"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:563c649cfdef27d081c84e72a03b48ea9408c16657500c312575ae9d9f7bc1c3"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:78751b33595f7f9511952e7e60ce858c6d64db2e062afb325985ddbd34b5c131"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a357fd4f15ee49b4a98b44ec23a34a95f1e00292a139d6015c11f55774ef10de"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:5989db3b3b34b76c09253deeaf7fbc2707616f130e166996606c284395da3f18"}, + {file = "kiwisolver-1.3.1-cp38-cp38-win32.whl", hash = "sha256:c08e95114951dc2090c4a630c2385bef681cacf12636fb0241accdc6b303fd81"}, + {file = "kiwisolver-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:44a62e24d9b01ba94ae7a4a6c3fb215dc4af1dde817e7498d901e229aaf50e4e"}, + {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50af681a36b2a1dee1d3c169ade9fdc59207d3c31e522519181e12f1b3ba7000"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a53d27d0c2a0ebd07e395e56a1fbdf75ffedc4a05943daf472af163413ce9598"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:834ee27348c4aefc20b479335fd422a2c69db55f7d9ab61721ac8cd83eb78882"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5c3e6455341008a054cccee8c5d24481bcfe1acdbc9add30aa95798e95c65621"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:acef3d59d47dd85ecf909c359d0fd2c81ed33bdff70216d3956b463e12c38a54"}, + {file = "kiwisolver-1.3.1-cp39-cp39-win32.whl", hash = "sha256:c5518d51a0735b1e6cee1fdce66359f8d2b59c3ca85dc2b0813a8aa86818a030"}, + {file = "kiwisolver-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b9edd0110a77fc321ab090aaa1cfcaba1d8499850a12848b81be2222eab648f6"}, + {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0cd53f403202159b44528498de18f9285b04482bab2a6fc3f5dd8dbb9352e30d"}, + {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:33449715e0101e4d34f64990352bce4095c8bf13bed1b390773fc0a7295967b3"}, + {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:401a2e9afa8588589775fe34fc22d918ae839aaaf0c0e96441c0fdbce6d8ebe6"}, + {file = "kiwisolver-1.3.1.tar.gz", hash = "sha256:950a199911a8d94683a6b10321f9345d5a3a8433ec58b217ace979e18f16e248"}, +] +leidenalg = [ + {file = "leidenalg-0.8.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b8f7cb474cfa1c558111b627c321d0b4521263ed62f6167f62a206011abec62"}, + {file = "leidenalg-0.8.7-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f8e7bf8f74379deaf8b262c857d8a4889a1bf97ef391cd396b5e1785739ae6e3"}, + {file = "leidenalg-0.8.7-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3b424c02ccbe027cae4977cebf56877b24556c9d31cbb143a22fe459ffd153e0"}, + {file = "leidenalg-0.8.7-cp36-cp36m-win32.whl", hash = "sha256:fd75a335014dd38f783c034bf37a7783117723ea04bdf20f45ab931672a6d05b"}, + {file = "leidenalg-0.8.7-cp36-cp36m-win_amd64.whl", hash = "sha256:338466dc1e960195cd32c3d0f6e47e43ab3d3affb90390e158aba346146ca79a"}, + {file = "leidenalg-0.8.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:963802d9389ab2339a6b9ef9f6fbb3cae964bc7e7ec4fe6065a6d6e629726f6e"}, + {file = "leidenalg-0.8.7-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:bae2b686e0bbacfe8519cdcfbaee18e0912b7277af3feeee91951fbbf81a2d82"}, + {file = "leidenalg-0.8.7-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6446b0fef66bd14dc8e2e21a2c0dc5a4b50bd8d9841014929f19a670c13f5912"}, + {file = "leidenalg-0.8.7-cp37-cp37m-win32.whl", hash = "sha256:85bb7ed059d55d46fbc978942bf9ebe7ed2d79e5496837708a182b2b719e2e30"}, + {file = "leidenalg-0.8.7-cp37-cp37m-win_amd64.whl", hash = "sha256:8e8721193ef10e8b2ce54b31f9cbb9b1004ca9dad41e8e499b85e306e32e80d2"}, + {file = "leidenalg-0.8.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7cafab2836de1cff073ee99bc7ba4d05d5bb02d54aadd9c9e4c3ed67ed3b0c4e"}, + {file = "leidenalg-0.8.7-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:981ecf5ddc587f53d634d38c574c3fefcbba51f19fbe31a93942cce63d0548bb"}, + {file = "leidenalg-0.8.7-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:91acd8de6511b545ce6317263595b1f0261319d9a7727fa511267bacc839af2d"}, + {file = "leidenalg-0.8.7-cp38-cp38-win32.whl", hash = "sha256:a4333d33a101a1fc0547538e26de15cf64301e6588241344ead1a56a06c60018"}, + {file = "leidenalg-0.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:c3ac236d8a1fe50b9c12bfcc29b31858da00c2134780523b5f96c927bb487841"}, + {file = "leidenalg-0.8.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e0e1b22400a6a3fdf19ea8ebc44e3b36b356712f0c37d9408af0fe46008cb3d"}, + {file = "leidenalg-0.8.7-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:9a7575d86007ebefc1ccc19457caa6d66780311da2a896db9297dcbffbd3b7fe"}, + {file = "leidenalg-0.8.7-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:969f4b4e230f94ffe35a63cdc34e509557135b86ad9c9f417a0079629cdac06c"}, + {file = "leidenalg-0.8.7-cp39-cp39-win32.whl", hash = "sha256:c4359a88f707bb0f0f69d195a7a3fa317a51596c389136af2626af37dc1a8909"}, + {file = "leidenalg-0.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:e66dce0d51e13bdeeeb7e221db7c0c1a4a31fa20012d3f7bba07cfb474c365e0"}, + {file = "leidenalg-0.8.7-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e90829478e30f583fcac80af98ebf13f977db606f1199e02e9d69bc09fb51cda"}, + {file = "leidenalg-0.8.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:cc54b2254e905f979b2a235cae88c21a9d6649a861b260192a029a4151b8d857"}, + {file = "leidenalg-0.8.7-pp36-pypy36_pp73-win32.whl", hash = "sha256:78529de7cd096faa9a3c535aab18356c57d3188ac0050967295ef64b65649728"}, + {file = "leidenalg-0.8.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7fcb17c9847d4d2cc78a4c96a2087e5710aaf904c93618c494d10a980f36a40a"}, + {file = "leidenalg-0.8.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:3755ad32d367a000985d0fd9e2588b3e72ab17aa03e185f01ce2ceedbcf32f95"}, + {file = "leidenalg-0.8.7-pp37-pypy37_pp73-win32.whl", hash = "sha256:38a2c29f22ca5910965fe2f46fe7f948a866fd1b58de596933c702c2f6b6d797"}, + {file = "leidenalg-0.8.7.tar.gz", hash = "sha256:4cde1c51bc110e567b63a5f17f4321ff4073d79c67e8c3c7d956f07dc90ff7be"}, +] +llvmlite = [ + {file = "llvmlite-0.36.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc0f9b9644b4ab0e4a5edb17f1531d791630c88858220d3cc688d6edf10da100"}, + {file = "llvmlite-0.36.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f7918dbac02b1ebbfd7302ad8e8307d7877ab57d782d5f04b70ff9696b53c21b"}, + {file = "llvmlite-0.36.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7768658646c418b9b3beccb7044277a608bc8c62b82a85e73c7e5c065e4157c2"}, + {file = "llvmlite-0.36.0-cp36-cp36m-win32.whl", hash = "sha256:05f807209a360d39526d98141b6f281b9c7c771c77a4d1fc22002440642c8de2"}, + {file = "llvmlite-0.36.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d1fdd63c371626c25ad834e1c6297eb76cf2f093a40dbb401a87b6476ab4e34e"}, + {file = "llvmlite-0.36.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7c4e7066447305d5095d0b0a9cae7b835d2f0fde143456b3124110eab0856426"}, + {file = "llvmlite-0.36.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9dad7e4bb042492914292aea3f4172eca84db731f9478250240955aedba95e08"}, + {file = "llvmlite-0.36.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:1ce5bc0a638d874a08d4222be0a7e48e5df305d094c2ff8dec525ef32b581551"}, + {file = "llvmlite-0.36.0-cp37-cp37m-win32.whl", hash = "sha256:dbedff0f6d417b374253a6bab39aa4b5364f1caab30c06ba8726904776fcf1cb"}, + {file = "llvmlite-0.36.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3b17fc4b0dd17bd29d7297d054e2915fad535889907c3f65232ee21f483447c5"}, + {file = "llvmlite-0.36.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b3a77e46e6053e2a86e607e87b97651dda81e619febb914824a927bff4e88737"}, + {file = "llvmlite-0.36.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:048a7c117641c9be87b90005684e64a6f33ea0897ebab1df8a01214a10d6e79a"}, + {file = "llvmlite-0.36.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:7db4b0eef93125af1c4092c64a3c73c7dc904101117ef53f8d78a1a499b8d5f4"}, + {file = "llvmlite-0.36.0-cp38-cp38-win32.whl", hash = "sha256:50b1828bde514b31431b2bba1aa20b387f5625b81ad6e12fede430a04645e47a"}, + {file = "llvmlite-0.36.0-cp38-cp38-win_amd64.whl", hash = "sha256:f608bae781b2d343e15e080c546468c5a6f35f57f0446923ea198dd21f23757e"}, + {file = "llvmlite-0.36.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a3abc8a8889aeb06bf9c4a7e5df5bc7bb1aa0aedd91a599813809abeec80b5a"}, + {file = "llvmlite-0.36.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:705f0323d931684428bb3451549603299bb5e17dd60fb979d67c3807de0debc1"}, + {file = "llvmlite-0.36.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:5a6548b4899facb182145147185e9166c69826fb424895f227e6b7cf924a8da1"}, + {file = "llvmlite-0.36.0-cp39-cp39-win32.whl", hash = "sha256:ff52fb9c2be66b95b0e67d56fce11038397e5be1ea410ee53f5f1175fdbb107a"}, + {file = "llvmlite-0.36.0-cp39-cp39-win_amd64.whl", hash = "sha256:1dee416ea49fd338c74ec15c0c013e5273b0961528169af06ff90772614f7f6c"}, + {file = "llvmlite-0.36.0.tar.gz", hash = "sha256:765128fdf5f149ed0b889ffbe2b05eb1717f8e20a5c87fa2b4018fbcce0fcfc9"}, +] +matplotlib = [ + {file = "matplotlib-3.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c541ee5a3287efe066bbe358320853cf4916bc14c00c38f8f3d8d75275a405a9"}, + {file = "matplotlib-3.4.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:3a5c18dbd2c7c366da26a4ad1462fe3e03a577b39e3b503bbcf482b9cdac093c"}, + {file = "matplotlib-3.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a9d8cb5329df13e0cdaa14b3b43f47b5e593ec637f13f14db75bb16e46178b05"}, + {file = "matplotlib-3.4.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:7ad19f3fb6145b9eb41c08e7cbb9f8e10b91291396bee21e9ce761bb78df63ec"}, + {file = "matplotlib-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:7a58f3d8fe8fac3be522c79d921c9b86e090a59637cb88e3bc51298d7a2c862a"}, + {file = "matplotlib-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6382bc6e2d7e481bcd977eb131c31dee96e0fb4f9177d15ec6fb976d3b9ace1a"}, + {file = "matplotlib-3.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a6a44f27aabe720ec4fd485061e8a35784c2b9ffa6363ad546316dfc9cea04e"}, + {file = "matplotlib-3.4.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1c1779f7ab7d8bdb7d4c605e6ffaa0614b3e80f1e3c8ccf7b9269a22dbc5986b"}, + {file = "matplotlib-3.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5826f56055b9b1c80fef82e326097e34dc4af8c7249226b7dd63095a686177d1"}, + {file = "matplotlib-3.4.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0bea5ec5c28d49020e5d7923c2725b837e60bc8be99d3164af410eb4b4c827da"}, + {file = "matplotlib-3.4.2-cp38-cp38-win32.whl", hash = "sha256:6475d0209024a77f869163ec3657c47fed35d9b6ed8bccba8aa0f0099fbbdaa8"}, + {file = "matplotlib-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:21b31057bbc5e75b08e70a43cefc4c0b2c2f1b1a850f4a0f7af044eb4163086c"}, + {file = "matplotlib-3.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b26535b9de85326e6958cdef720ecd10bcf74a3f4371bf9a7e5b2e659c17e153"}, + {file = "matplotlib-3.4.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:32fa638cc10886885d1ca3d409d4473d6a22f7ceecd11322150961a70fab66dd"}, + {file = "matplotlib-3.4.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:956c8849b134b4a343598305a3ca1bdd3094f01f5efc8afccdebeffe6b315247"}, + {file = "matplotlib-3.4.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:85f191bb03cb1a7b04b5c2cca4792bef94df06ef473bc49e2818105671766fee"}, + {file = "matplotlib-3.4.2-cp39-cp39-win32.whl", hash = "sha256:b1d5a2cedf5de05567c441b3a8c2651fbde56df08b82640e7f06c8cd91e201f6"}, + {file = "matplotlib-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:df815378a754a7edd4559f8c51fc7064f779a74013644a7f5ac7a0c31f875866"}, + {file = "matplotlib-3.4.2.tar.gz", hash = "sha256:d8d994cefdff9aaba45166eb3de4f5211adb4accac85cbf97137e98f26ea0219"}, +] +natsort = [ + {file = "natsort-7.1.1-py3-none-any.whl", hash = "sha256:d0f4fc06ca163fa4a5ef638d9bf111c67f65eedcc7920f98dec08e489045b67e"}, + {file = "natsort-7.1.1.tar.gz", hash = "sha256:00c603a42365830c4722a2eb7663a25919551217ec09a243d3399fa8dd4ac403"}, +] +networkx = [ + {file = "networkx-2.6.2-py3-none-any.whl", hash = "sha256:5fcb7004be69e8fbdf07dcb502efa5c77cadcaad6982164134eeb9721f826c2e"}, + {file = "networkx-2.6.2.tar.gz", hash = "sha256:2306f1950ce772c5a59a57f5486d59bb9cab98497c45fc49cbc45ac0dec119bb"}, +] +numba = [ + {file = "numba-0.53.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b23de6b6837c132087d06b8b92d343edb54b885873b824a037967fbd5272ebb7"}, + {file = "numba-0.53.1-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:6545b9e9b0c112b81de7f88a3c787469a357eeff8211e90b8f45ee243d521cc2"}, + {file = "numba-0.53.1-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:8fa5c963a43855050a868106a87cd614f3c3f459951c8fc468aec263ef80d063"}, + {file = "numba-0.53.1-cp36-cp36m-win32.whl", hash = "sha256:aaa6ebf56afb0b6752607b9f3bf39e99b0efe3c1fa6849698373925ee6838fd7"}, + {file = "numba-0.53.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b08b3df38aab769df79ed948d70f0a54a3cdda49d58af65369235c204ec5d0f3"}, + {file = "numba-0.53.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:bf5c463b62d013e3f709cc8277adf2f4f4d8cc6757293e29c6db121b77e6b760"}, + {file = "numba-0.53.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:74df02e73155f669e60dcff07c4eef4a03dbf5b388594db74142ab40914fe4f5"}, + {file = "numba-0.53.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5165709bf62f28667e10b9afe6df0ce1037722adab92d620f59cb8bbb8104641"}, + {file = "numba-0.53.1-cp37-cp37m-win32.whl", hash = "sha256:2e96958ed2ca7e6d967b2ce29c8da0ca47117e1de28e7c30b2c8c57386506fa5"}, + {file = "numba-0.53.1-cp37-cp37m-win_amd64.whl", hash = "sha256:276f9d1674fe08d95872d81b97267c6b39dd830f05eb992608cbede50fcf48a9"}, + {file = "numba-0.53.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:4c4c8d102512ae472af52c76ad9522da718c392cb59f4cd6785d711fa5051a2a"}, + {file = "numba-0.53.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:691adbeac17dbdf6ed7c759e9e33a522351f07d2065fe926b264b6b2c15fd89b"}, + {file = "numba-0.53.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:94aab3e0e9e8754116325ce026e1b29ae72443c706a3104cf7f3368dc3012912"}, + {file = "numba-0.53.1-cp38-cp38-win32.whl", hash = "sha256:aabeec89bb3e3162136eea492cea7ee8882ddcda2201f05caecdece192c40896"}, + {file = "numba-0.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:1895ebd256819ff22256cd6fe24aa8f7470b18acc73e7917e8e93c9ac7f565dc"}, + {file = "numba-0.53.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:224d197a46a9e602a16780d87636e199e2cdef528caef084a4d8fd8909c2455c"}, + {file = "numba-0.53.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:aba7acb247a09d7f12bd17a8e28bbb04e8adef9fc20ca29835d03b7894e1b49f"}, + {file = "numba-0.53.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:bd126f1f49da6fc4b3169cf1d96f1c3b3f84a7badd11fe22da344b923a00e744"}, + {file = "numba-0.53.1-cp39-cp39-win32.whl", hash = "sha256:0ef9d1f347b251282ae46e5a5033600aa2d0dfa1ee8c16cb8137b8cd6f79e221"}, + {file = "numba-0.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:17146885cbe4e89c9d4abd4fcb8886dee06d4591943dc4343500c36ce2fcfa69"}, + {file = "numba-0.53.1.tar.gz", hash = "sha256:9cd4e5216acdc66c4e9dab2dfd22ddb5bef151185c070d4a3cd8e78638aff5b0"}, +] +numexpr = [ + {file = "numexpr-2.7.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:74df157ab4577bfc83c14f4e39d14781b06ade5406d3efef049f90c88d8c28ea"}, + {file = "numexpr-2.7.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99472731bc1111f5d73285dd2a4c228b5bfb176f785a567872e0fbfec6584f2b"}, + {file = "numexpr-2.7.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:24cdb8c0e93f31387a4c2ddd09a687874c006e6139fd68bcf77b96e51d17cb01"}, + {file = "numexpr-2.7.3-cp27-cp27m-win32.whl", hash = "sha256:c9218aeb76717768f617362b72a87e9219da95ba7cdec0732ccecc4a4719124c"}, + {file = "numexpr-2.7.3-cp27-cp27m-win_amd64.whl", hash = "sha256:97753d17d1ea39e082b1907b99b6cb63cac7d1dfa512d2ff5079eb7bfab1ea88"}, + {file = "numexpr-2.7.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0732c9989bff8568ee78fa461f3698166d4ac79363860be22ff49eae1dcd15e7"}, + {file = "numexpr-2.7.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:c978c49bd9dded6a4ba6b3501e3a34e3aba9312cbb7d800bed7ac6fcd2d5949d"}, + {file = "numexpr-2.7.3-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:602df9b5c500d0a887dc96b4cfd16fb60ae7ef39ccd6f013f4df2ee11ae70553"}, + {file = "numexpr-2.7.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f9df0a74d39616fd011071c5850418f244bac414f24ed55c00dcf3c5385e8374"}, + {file = "numexpr-2.7.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:eeeb6325df6cf3f3ab7d9dbabf3bc03ac88b7e2f2aed21419c31e23c3048dce1"}, + {file = "numexpr-2.7.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:5223a519f48754dd350723d9fbcadbcd0476881bc954a281a09a6538ecabfc27"}, + {file = "numexpr-2.7.3-cp35-cp35m-win32.whl", hash = "sha256:785065819ce98e3d3dd853794244e0de190d7ba36ab42c8fd79e0e9cd40de7af"}, + {file = "numexpr-2.7.3-cp35-cp35m-win_amd64.whl", hash = "sha256:23718ac5f2ebae995f5899509624781b375da568f2b645b5d1fd6dbb17f41a56"}, + {file = "numexpr-2.7.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3daa55515ee3cb40bf5ab8263c0c13fff8d484d64d107a9c414e8ca151dc08a6"}, + {file = "numexpr-2.7.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:a3f1cec8657bd3920869a2ea27f98d68ac3000334f366d844a9670ae671fe4bd"}, + {file = "numexpr-2.7.3-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:d423441593a952ac56d1f774068b81fb22f514fb68873c066578345a6af74c0d"}, + {file = "numexpr-2.7.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:90ea6d5813e1906bb203ef220a600b30d83e75aea2607a7e7037cceae9e93346"}, + {file = "numexpr-2.7.3-cp36-cp36m-win32.whl", hash = "sha256:8b76bcca930cbf0db0fe98b6a51d6286dff77d525dad670cb7750e29a138d434"}, + {file = "numexpr-2.7.3-cp36-cp36m-win_amd64.whl", hash = "sha256:833a363c86266424349467b53f4060f77aaa7ec03c1e6f38c54e69c65ceebf30"}, + {file = "numexpr-2.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:618259287b8b81a352a7d088ad03fe3b393a842ccb45f0b3cfc6a712d41b7595"}, + {file = "numexpr-2.7.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:51277a530a353e0f94665b44615249d7e7075f0c73f78d4743da632fc44bc648"}, + {file = "numexpr-2.7.3-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5f4122bd58aa4e4891814c2f72bd47b1cdb202c9d863ea96c5394dffb72a16e2"}, + {file = "numexpr-2.7.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b0a9124a66a61b05ea84b832358d6aa5561c30e69b4dcaea819b296f4f025f89"}, + {file = "numexpr-2.7.3-cp37-cp37m-win32.whl", hash = "sha256:e985026e64350dd59fd91a09bc364edf706d58b12e01362ddfa63829878bd434"}, + {file = "numexpr-2.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:e000570a6a704c594832ff4fc45f18864b721b7b444a185b365dbb03d3fe3abb"}, + {file = "numexpr-2.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4527a0a7b04f858a73c348c9c4ce8441b7a54965db74a32ba808c51d9d53b7cd"}, + {file = "numexpr-2.7.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:dc707486b1f3dda18a39bc4d06a0a09d3c0ea47bd6b99fdb98adb26d1277253f"}, + {file = "numexpr-2.7.3-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5d6dbf050a9b8ebff0b7706ebeaf1cd57d64ef4dfe61aef3790851b481daf6b5"}, + {file = "numexpr-2.7.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:aae4ce158da53ebc47df053de90fed9d0d51fa0df8cc481abc8a901ea4f0cec7"}, + {file = "numexpr-2.7.3-cp38-cp38-win32.whl", hash = "sha256:dfdca3d1f4c83fa8fd3ee7573110efd13e838543896641b89367622ec6a67eb4"}, + {file = "numexpr-2.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:d14ae09318ad86579e35aacf1596c83d5db1139cd68615967ee23605e11f5d82"}, + {file = "numexpr-2.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a8e0e48d72391543b68d0471fac2e31c614efdce4036e2a0a8a182fde1edb0e0"}, + {file = "numexpr-2.7.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:05b97b19e864a5d1a0b106933b1637233a2444fd375685bead264a818f847ef2"}, + {file = "numexpr-2.7.3-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7ab40e2b438f4ea2ea8234c63639cdf5072cdb29d0ac521307854efe0281a567"}, + {file = "numexpr-2.7.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8fc23a49f4266c24a23310c0cb92ff54c4b4f535635f90372b3a2d5cb1f83329"}, + {file = "numexpr-2.7.3-cp39-cp39-win32.whl", hash = "sha256:2e14b44a79030fbe25f16393162a4d21ced14056fac49ff73856f661a78db731"}, + {file = "numexpr-2.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:c2605e5665b0d7362e0d2b92683387c12e15c7440daf702a7637f7502a967810"}, + {file = "numexpr-2.7.3.tar.gz", hash = "sha256:43616529f9b7d1afc83386f943dc66c4da5e052f00217ba7e3ad8dd1b5f3a825"}, +] +numpy = [ + {file = "numpy-1.21.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38e8648f9449a549a7dfe8d8755a5979b45b3538520d1e735637ef28e8c2dc50"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd7d7409fa643a91d0a05c7554dd68aa9c9bb16e186f6ccfe40d6e003156e33a"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a75b4498b1e93d8b700282dc8e655b8bd559c0904b3910b144646dbbbc03e062"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1412aa0aec3e00bc23fbb8664d76552b4efde98fb71f60737c83efbac24112f1"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e46ceaff65609b5399163de5893d8f2a82d3c77d5e56d976c8b5fb01faa6b671"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c6a2324085dd52f96498419ba95b5777e40b6bcbc20088fddb9e8cbb58885e8e"}, + {file = "numpy-1.21.1-cp37-cp37m-win32.whl", hash = "sha256:73101b2a1fef16602696d133db402a7e7586654682244344b8329cdcbbb82172"}, + {file = "numpy-1.21.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7a708a79c9a9d26904d1cca8d383bf869edf6f8e7650d85dbc77b041e8c5a0f8"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95b995d0c413f5d0428b3f880e8fe1660ff9396dcd1f9eedbc311f37b5652e16"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:635e6bd31c9fb3d475c8f44a089569070d10a9ef18ed13738b03049280281267"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a3d5fb89bfe21be2ef47c0614b9c9c707b7362386c9a3ff1feae63e0267ccb6"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a326af80e86d0e9ce92bcc1e65c8ff88297de4fa14ee936cb2293d414c9ec63"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:791492091744b0fe390a6ce85cc1bf5149968ac7d5f0477288f78c89b385d9af"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0318c465786c1f63ac05d7c4dbcecd4d2d7e13f0959b01b534ea1e92202235c5"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a513bd9c1551894ee3d31369f9b07460ef223694098cf27d399513415855b68"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91c6f5fc58df1e0a3cc0c3a717bb3308ff850abdaa6d2d802573ee2b11f674a8"}, + {file = "numpy-1.21.1-cp38-cp38-win32.whl", hash = "sha256:978010b68e17150db8765355d1ccdd450f9fc916824e8c4e35ee620590e234cd"}, + {file = "numpy-1.21.1-cp38-cp38-win_amd64.whl", hash = "sha256:9749a40a5b22333467f02fe11edc98f022133ee1bfa8ab99bda5e5437b831214"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d7a4aeac3b94af92a9373d6e77b37691b86411f9745190d2c351f410ab3a791f"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9e7912a56108aba9b31df688a4c4f5cb0d9d3787386b87d504762b6754fbb1b"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25b40b98ebdd272bc3020935427a4530b7d60dfbe1ab9381a39147834e985eac"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a92c5aea763d14ba9d6475803fc7904bda7decc2a0a68153f587ad82941fec1"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05a0f648eb28bae4bcb204e6fd14603de2908de982e761a2fc78efe0f19e96e1"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f01f28075a92eede918b965e86e8f0ba7b7797a95aa8d35e1cc8821f5fc3ad6a"}, + {file = "numpy-1.21.1-cp39-cp39-win32.whl", hash = "sha256:88c0b89ad1cc24a5efbb99ff9ab5db0f9a86e9cc50240177a571fbe9c2860ac2"}, + {file = "numpy-1.21.1-cp39-cp39-win_amd64.whl", hash = "sha256:01721eefe70544d548425a07c80be8377096a54118070b8a62476866d5208e33"}, + {file = "numpy-1.21.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d4d1de6e6fb3d28781c73fbde702ac97f03d79e4ffd6598b880b2d95d62ead4"}, + {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, +] +openTSNE = [] +packaging = [ + {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, + {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, +] +pacmap = [ + {file = "pacmap-0.5.0-py3-none-any.whl", hash = "sha256:2e5bd7ce0ff1e12ddbb2c5c9382ccf09e41ee47ef37dbce85439e3a9e9fa7bf4"}, + {file = "pacmap-0.5.0.tar.gz", hash = "sha256:c365ed4e461f0026ec974a4c86525e26f084823ef541f4b064b3f5d961044a1e"}, +] +pandas = [ + {file = "pandas-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ee8418d0f936ff2216513aa03e199657eceb67690995d427a4a7ecd2e68f442"}, + {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d9acfca191140a518779d1095036d842d5e5bc8e8ad8b5eaad1aff90fe1870d"}, + {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e323028ab192fcfe1e8999c012a0fa96d066453bb354c7e7a4a267b25e73d3c8"}, + {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d06661c6eb741ae633ee1c57e8c432bb4203024e263fe1a077fa3fda7817fdb"}, + {file = "pandas-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:23c7452771501254d2ae23e9e9dac88417de7e6eff3ce64ee494bb94dc88c300"}, + {file = "pandas-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7150039e78a81eddd9f5a05363a11cadf90a4968aac6f086fd83e66cf1c8d1d6"}, + {file = "pandas-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5c09a2538f0fddf3895070579082089ff4ae52b6cb176d8ec7a4dacf7e3676c1"}, + {file = "pandas-1.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:905fc3e0fcd86b0a9f1f97abee7d36894698d2592b22b859f08ea5a8fe3d3aab"}, + {file = "pandas-1.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ee927c70794e875a59796fab8047098aa59787b1be680717c141cd7873818ae"}, + {file = "pandas-1.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c976e023ed580e60a82ccebdca8e1cc24d8b1fbb28175eb6521025c127dab66"}, + {file = "pandas-1.3.1-cp38-cp38-win32.whl", hash = "sha256:22f3fcc129fb482ef44e7df2a594f0bd514ac45aabe50da1a10709de1b0f9d84"}, + {file = "pandas-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45656cd59ae9745a1a21271a62001df58342b59c66d50754390066db500a8362"}, + {file = "pandas-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:114c6789d15862508900a25cb4cb51820bfdd8595ea306bab3b53cd19f990b65"}, + {file = "pandas-1.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:527c43311894aff131dea99cf418cd723bfd4f0bcf3c3da460f3b57e52a64da5"}, + {file = "pandas-1.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb3b33dde260b1766ea4d3c6b8fbf6799cee18d50a2a8bc534cf3550b7c819a"}, + {file = "pandas-1.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c28760932283d2c9f6fa5e53d2f77a514163b9e67fd0ee0879081be612567195"}, + {file = "pandas-1.3.1-cp39-cp39-win32.whl", hash = "sha256:be12d77f7e03c40a2466ed00ccd1a5f20a574d3c622fe1516037faa31aa448aa"}, + {file = "pandas-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9e1fe6722cbe27eb5891c1977bca62d456c19935352eea64d33956db46139364"}, + {file = "pandas-1.3.1.tar.gz", hash = "sha256:341935a594db24f3ff07d1b34d1d231786aa9adfa84b76eab10bf42907c8aed3"}, +] +patsy = [ + {file = "patsy-0.5.1-py2.py3-none-any.whl", hash = "sha256:5465be1c0e670c3a965355ec09e9a502bf2c4cbe4875e8528b0221190a8a5d40"}, + {file = "patsy-0.5.1.tar.gz", hash = "sha256:f115cec4201e1465cd58b9866b0b0e7b941caafec129869057405bfe5b5e3991"}, +] +phenograph = [ + {file = "PhenoGraph-1.5.7-py3-none-any.whl", hash = "sha256:62a0fb88e13e4409875da0d382f0783a63faa4913b79f61b99528eb79c93c2e2"}, + {file = "PhenoGraph-1.5.7.tar.gz", hash = "sha256:46b28f9e043a00deba53bb5f35dd84793669ab2bd4ce78900bf7f15f1321515a"}, +] +pillow = [ + {file = "Pillow-8.3.1-1-cp36-cp36m-win_amd64.whl", hash = "sha256:fd7eef578f5b2200d066db1b50c4aa66410786201669fb76d5238b007918fb24"}, + {file = "Pillow-8.3.1-1-cp37-cp37m-win_amd64.whl", hash = "sha256:75e09042a3b39e0ea61ce37e941221313d51a9c26b8e54e12b3ececccb71718a"}, + {file = "Pillow-8.3.1-1-cp38-cp38-win_amd64.whl", hash = "sha256:c0e0550a404c69aab1e04ae89cca3e2a042b56ab043f7f729d984bf73ed2a093"}, + {file = "Pillow-8.3.1-1-cp39-cp39-win_amd64.whl", hash = "sha256:479ab11cbd69612acefa8286481f65c5dece2002ffaa4f9db62682379ca3bb77"}, + {file = "Pillow-8.3.1-1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f156d6ecfc747ee111c167f8faf5f4953761b5e66e91a4e6767e548d0f80129c"}, + {file = "Pillow-8.3.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:196560dba4da7a72c5e7085fccc5938ab4075fd37fe8b5468869724109812edd"}, + {file = "Pillow-8.3.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c9569049d04aaacd690573a0398dbd8e0bf0255684fee512b413c2142ab723"}, + {file = "Pillow-8.3.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c088a000dfdd88c184cc7271bfac8c5b82d9efa8637cd2b68183771e3cf56f04"}, + {file = "Pillow-8.3.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fc214a6b75d2e0ea7745488da7da3c381f41790812988c7a92345978414fad37"}, + {file = "Pillow-8.3.1-cp36-cp36m-win32.whl", hash = "sha256:a17ca41f45cf78c2216ebfab03add7cc350c305c38ff34ef4eef66b7d76c5229"}, + {file = "Pillow-8.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:67b3666b544b953a2777cb3f5a922e991be73ab32635666ee72e05876b8a92de"}, + {file = "Pillow-8.3.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:ff04c373477723430dce2e9d024c708a047d44cf17166bf16e604b379bf0ca14"}, + {file = "Pillow-8.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9364c81b252d8348e9cc0cb63e856b8f7c1b340caba6ee7a7a65c968312f7dab"}, + {file = "Pillow-8.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a2f381932dca2cf775811a008aa3027671ace723b7a38838045b1aee8669fdcf"}, + {file = "Pillow-8.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d0da39795049a9afcaadec532e7b669b5ebbb2a9134576ebcc15dd5bdae33cc0"}, + {file = "Pillow-8.3.1-cp37-cp37m-win32.whl", hash = "sha256:2b6dfa068a8b6137da34a4936f5a816aba0ecc967af2feeb32c4393ddd671cba"}, + {file = "Pillow-8.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a4eef1ff2d62676deabf076f963eda4da34b51bc0517c70239fafed1d5b51500"}, + {file = "Pillow-8.3.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:660a87085925c61a0dcc80efb967512ac34dbb256ff7dd2b9b4ee8dbdab58cf4"}, + {file = "Pillow-8.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:15a2808e269a1cf2131930183dcc0419bc77bb73eb54285dde2706ac9939fa8e"}, + {file = "Pillow-8.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:969cc558cca859cadf24f890fc009e1bce7d7d0386ba7c0478641a60199adf79"}, + {file = "Pillow-8.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ee77c14a0299d0541d26f3d8500bb57e081233e3fa915fa35abd02c51fa7fae"}, + {file = "Pillow-8.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c11003197f908878164f0e6da15fce22373ac3fc320cda8c9d16e6bba105b844"}, + {file = "Pillow-8.3.1-cp38-cp38-win32.whl", hash = "sha256:3f08bd8d785204149b5b33e3b5f0ebbfe2190ea58d1a051c578e29e39bfd2367"}, + {file = "Pillow-8.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:70af7d222df0ff81a2da601fab42decb009dc721545ed78549cb96e3a1c5f0c8"}, + {file = "Pillow-8.3.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:37730f6e68bdc6a3f02d2079c34c532330d206429f3cee651aab6b66839a9f0e"}, + {file = "Pillow-8.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bc3c7ef940eeb200ca65bd83005eb3aae8083d47e8fcbf5f0943baa50726856"}, + {file = "Pillow-8.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c35d09db702f4185ba22bb33ef1751ad49c266534339a5cebeb5159d364f6f82"}, + {file = "Pillow-8.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b2efa07f69dc395d95bb9ef3299f4ca29bcb2157dc615bae0b42c3c20668ffc"}, + {file = "Pillow-8.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cc866706d56bd3a7dbf8bac8660c6f6462f2f2b8a49add2ba617bc0c54473d83"}, + {file = "Pillow-8.3.1-cp39-cp39-win32.whl", hash = "sha256:9a211b663cf2314edbdb4cf897beeb5c9ee3810d1d53f0e423f06d6ebbf9cd5d"}, + {file = "Pillow-8.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:c2a5ff58751670292b406b9f06e07ed1446a4b13ffced6b6cab75b857485cbc8"}, + {file = "Pillow-8.3.1-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c379425c2707078dfb6bfad2430728831d399dc95a7deeb92015eb4c92345eaf"}, + {file = "Pillow-8.3.1-pp36-pypy36_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:114f816e4f73f9ec06997b2fde81a92cbf0777c9e8f462005550eed6bae57e63"}, + {file = "Pillow-8.3.1-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8960a8a9f4598974e4c2aeb1bff9bdd5db03ee65fd1fce8adf3223721aa2a636"}, + {file = "Pillow-8.3.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:147bd9e71fb9dcf08357b4d530b5167941e222a6fd21f869c7911bac40b9994d"}, + {file = "Pillow-8.3.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1fd5066cd343b5db88c048d971994e56b296868766e461b82fa4e22498f34d77"}, + {file = "Pillow-8.3.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4ebde71785f8bceb39dcd1e7f06bcc5d5c3cf48b9f69ab52636309387b097c8"}, + {file = "Pillow-8.3.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c03e24be975e2afe70dfc5da6f187eea0b49a68bb2b69db0f30a61b7031cee4"}, + {file = "Pillow-8.3.1.tar.gz", hash = "sha256:2cac53839bfc5cece8fdbe7f084d5e3ee61e1303cccc86511d351adcb9e2c792"}, +] +psutil = [ + {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"}, + {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ae6f386d8d297177fd288be6e8d1afc05966878704dad9847719650e44fc49c"}, + {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:12d844996d6c2b1d3881cfa6fa201fd635971869a9da945cf6756105af73d2df"}, + {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:02b8292609b1f7fcb34173b25e48d0da8667bc85f81d7476584d889c6e0f2131"}, + {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ffe81843131ee0ffa02c317186ed1e759a145267d54fdef1bc4ea5f5931ab60"}, + {file = "psutil-5.8.0-cp27-none-win32.whl", hash = "sha256:ea313bb02e5e25224e518e4352af4bf5e062755160f77e4b1767dd5ccb65f876"}, + {file = "psutil-5.8.0-cp27-none-win_amd64.whl", hash = "sha256:5da29e394bdedd9144c7331192e20c1f79283fb03b06e6abd3a8ae45ffecee65"}, + {file = "psutil-5.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:74fb2557d1430fff18ff0d72613c5ca30c45cdbfcddd6a5773e9fc1fe9364be8"}, + {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:74f2d0be88db96ada78756cb3a3e1b107ce8ab79f65aa885f76d7664e56928f6"}, + {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99de3e8739258b3c3e8669cb9757c9a861b2a25ad0955f8e53ac662d66de61ac"}, + {file = "psutil-5.8.0-cp36-cp36m-win32.whl", hash = "sha256:36b3b6c9e2a34b7d7fbae330a85bf72c30b1c827a4366a07443fc4b6270449e2"}, + {file = "psutil-5.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52de075468cd394ac98c66f9ca33b2f54ae1d9bff1ef6b67a212ee8f639ec06d"}, + {file = "psutil-5.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c6a5fd10ce6b6344e616cf01cc5b849fa8103fbb5ba507b6b2dee4c11e84c935"}, + {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:61f05864b42fedc0771d6d8e49c35f07efd209ade09a5afe6a5059e7bb7bf83d"}, + {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0dd4465a039d343925cdc29023bb6960ccf4e74a65ad53e768403746a9207023"}, + {file = "psutil-5.8.0-cp37-cp37m-win32.whl", hash = "sha256:1bff0d07e76114ec24ee32e7f7f8d0c4b0514b3fae93e3d2aaafd65d22502394"}, + {file = "psutil-5.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fcc01e900c1d7bee2a37e5d6e4f9194760a93597c97fee89c4ae51701de03563"}, + {file = "psutil-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6223d07a1ae93f86451d0198a0c361032c4c93ebd4bf6d25e2fb3edfad9571ef"}, + {file = "psutil-5.8.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d225cd8319aa1d3c85bf195c4e07d17d3cd68636b8fc97e6cf198f782f99af28"}, + {file = "psutil-5.8.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:28ff7c95293ae74bf1ca1a79e8805fcde005c18a122ca983abf676ea3466362b"}, + {file = "psutil-5.8.0-cp38-cp38-win32.whl", hash = "sha256:ce8b867423291cb65cfc6d9c4955ee9bfc1e21fe03bb50e177f2b957f1c2469d"}, + {file = "psutil-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:90f31c34d25b1b3ed6c40cdd34ff122b1887a825297c017e4cbd6796dd8b672d"}, + {file = "psutil-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6323d5d845c2785efb20aded4726636546b26d3b577aded22492908f7c1bdda7"}, + {file = "psutil-5.8.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:245b5509968ac0bd179287d91210cd3f37add77dad385ef238b275bad35fa1c4"}, + {file = "psutil-5.8.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:90d4091c2d30ddd0a03e0b97e6a33a48628469b99585e2ad6bf21f17423b112b"}, + {file = "psutil-5.8.0-cp39-cp39-win32.whl", hash = "sha256:ea372bcc129394485824ae3e3ddabe67dc0b118d262c568b4d2602a7070afdb0"}, + {file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"}, + {file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"}, +] +pynndescent = [ + {file = "pynndescent-0.5.4.tar.gz", hash = "sha256:221124cbad8e3cf3ed421a4089d80ac5a29d3215e76cb49effc1df887533d2a8"}, +] +pyparsing = [ + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +python-igraph = [ + {file = "python-igraph-0.9.6.tar.gz", hash = "sha256:1824ca0489068100534d717056395d580b2d19bf4fefb378465e6a37a20bf316"}, + {file = "python_igraph-0.9.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9280d0298d9f6dddb158ad871ffb939762e2d4a9074b3739365e6762a3ed0e4"}, + {file = "python_igraph-0.9.6-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:215ec3b4b5affeb92fb80f5f5a6514a92014bfa0040e3b3ff01f6d7d2664d0bc"}, + {file = "python_igraph-0.9.6-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7b2408ad5cfbc6c1dbedf8a02c91d4262bd181fe1c656ab29288cc52ea4dabca"}, + {file = "python_igraph-0.9.6-cp36-cp36m-win32.whl", hash = "sha256:fa565a23ae20c5f3d4553329fcceee4afb40419f431073cd9ca40fe595616b24"}, + {file = "python_igraph-0.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:48faa9c442db71a0c8b59d3c42e0ce56eaab59d4af70bb8e27dfa7ad1b980485"}, + {file = "python_igraph-0.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:530e5934fd968a009c321e9c550bc722aee299edacccdf6e8d8eda9f39cf7f5e"}, + {file = "python_igraph-0.9.6-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b7d2e133cc1ece35ed6f53042b85cee7fdafb69bc31d12dc4cf78f9a69e9a61a"}, + {file = "python_igraph-0.9.6-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:36c983966c19986ee7efe7bb18780f391d7a78d2e688b12a06cef2ea1976742d"}, + {file = "python_igraph-0.9.6-cp37-cp37m-win32.whl", hash = "sha256:a5f06934006f4a6337a08816e63668281bab4599d205969a69d70e0ec4bee275"}, + {file = "python_igraph-0.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:a117abeda4adcdf8cfdb359bc554c97170971032a431e02ed16129d5b2cf69a7"}, + {file = "python_igraph-0.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e5e27a4d8779ccaeba71202130875182da1f56d7e920222aa5a4377e02019aab"}, + {file = "python_igraph-0.9.6-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:691a44db6747743faef28fff18a7c8018f25805a09bd1fa783b32f459bed5ebd"}, + {file = "python_igraph-0.9.6-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5aa9ff3ebfc85f55950738949c1ec5fedafc5a60d6c425cdb439e37cae6f908b"}, + {file = "python_igraph-0.9.6-cp38-cp38-win32.whl", hash = "sha256:879d4e8508b59499a56c37475d1a53f8fb95870b69a3f36dd13ac6ebe7332949"}, + {file = "python_igraph-0.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:548f008ea36f135fd27df27d98fa440ec948f063c4713e0dca10edad3ba29dce"}, + {file = "python_igraph-0.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a04c81d4d4575bf2b7467ee4722c04c9fee03df09f837275613f2b2931732351"}, + {file = "python_igraph-0.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5fae16483d011a6b754c0f59c845517cf18835370a42bd081de603104b52e76c"}, + {file = "python_igraph-0.9.6-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:36bc4e42591404eecda467dafa491fd59ee1fd3b5e8901bf473f226dbd4dd43c"}, + {file = "python_igraph-0.9.6-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:5e5ca1331ebc8c2878e94d45a4423ee83327ffbd2668d322b8d1409ec246e84c"}, + {file = "python_igraph-0.9.6-cp39-cp39-win32.whl", hash = "sha256:03522ae5cc2173507b34315d8af86f2ca91fd818372a03f66385eafbed11ea35"}, + {file = "python_igraph-0.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:3150d439009e7a4562506bcac008f39f6ee6b13074cde6fdc71cd05b74e05c7b"}, + {file = "python_igraph-0.9.6-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5824dd8298dd6f677a3c41506f090bb470e367a0774a381aeb34d270e409d7da"}, + {file = "python_igraph-0.9.6-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:6a00a46998800827cc4124d04bf6a74f5f7366e1b49d3cc727f197a1a2bcf846"}, + {file = "python_igraph-0.9.6-pp36-pypy36_pp73-win32.whl", hash = "sha256:3888266550423495d5928630ec1d25b5db8a5917f0d6be7264dff4901630d894"}, + {file = "python_igraph-0.9.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:27bf66bf5615ebbfc8b0f17fd74096bd7bb088c0f3fab33350fa2ef3f1077c7b"}, + {file = "python_igraph-0.9.6-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:cd32fa9d94a4fcbca8349c3aebcc39f948ec2091471f722540feba4bdd038192"}, + {file = "python_igraph-0.9.6-pp37-pypy37_pp73-win32.whl", hash = "sha256:3bc5bb817bd84c2ec13fd0820845e043d71c181d3275c0c24832ff7230538a86"}, +] +pytz = [ + {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, + {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, +] +scanpy = [ + {file = "scanpy-1.8.1-py3-none-any.whl", hash = "sha256:b1f221158f934197977772a2d2ff25a11152f75a8efd461b141684973a113bff"}, + {file = "scanpy-1.8.1.tar.gz", hash = "sha256:1b8603a868d783bd6c18c8db763a450153feefc8daed862c440749790d47c654"}, +] +scikit-learn = [ + {file = "scikit-learn-0.24.2.tar.gz", hash = "sha256:d14701a12417930392cd3898e9646cf5670c190b933625ebe7511b1f7d7b8736"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:d5bf9c863ba4717b3917b5227463ee06860fc43931dc9026747de416c0a10fee"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5beaeb091071625e83f5905192d8aecde65ba2f26f8b6719845bbf586f7a04a1"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:06ffdcaaf81e2a3b1b50c3ac6842cfb13df2d8b737d61f64643ed61da7389cde"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:fec42690a2eb646b384eafb021c425fab48991587edb412d4db77acc358b27ce"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:5ff3e4e4cf7592d36541edec434e09fb8ab9ba6b47608c4ffe30c9038d301897"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:3cbd734e1aefc7c5080e6b6973fe062f97c26a1cdf1a991037ca196ce1c8f427"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-win32.whl", hash = "sha256:f74429a07fedb36a03c159332b914e6de757176064f9fed94b5f79ebac07d913"}, + {file = "scikit_learn-0.24.2-cp36-cp36m-win_amd64.whl", hash = "sha256:dd968a174aa82f3341a615a033fa6a8169e9320cbb46130686562db132d7f1f0"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:49ec0b1361da328da9bb7f1a162836028e72556356adeb53342f8fae6b450d47"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f18c3ed484eeeaa43a0d45dc2efb4d00fc6542ccdcfa2c45d7b635096a2ae534"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cdf24c1b9bbeb4936456b42ac5bd32c60bb194a344951acb6bfb0cddee5439a4"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d177fe1ff47cc235942d628d41ee5b1c6930d8f009f1a451c39b5411e8d0d4cf"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f3ec00f023d84526381ad0c0f2cff982852d035c921bbf8ceb994f4886c00c64"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:ae19ac105cf7ce8c205a46166992fdec88081d6e783ab6e38ecfbe45729f3c39"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-win32.whl", hash = "sha256:f0ed4483c258fb23150e31b91ea7d25ff8495dba108aea0b0d4206a777705350"}, + {file = "scikit_learn-0.24.2-cp37-cp37m-win_amd64.whl", hash = "sha256:39b7e3b71bcb1fe46397185d6c1a5db1c441e71c23c91a31e7ad8cc3f7305f9a"}, + {file = "scikit_learn-0.24.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:90a297330f608adeb4d2e9786c6fda395d3150739deb3d42a86d9a4c2d15bc1d"}, + {file = "scikit_learn-0.24.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:f1d2108e770907540b5248977e4cff9ffaf0f73d0d13445ee938df06ca7579c6"}, + {file = "scikit_learn-0.24.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1eec963fe9ffc827442c2e9333227c4d49749a44e592f305398c1db5c1563393"}, + {file = "scikit_learn-0.24.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:2db429090b98045d71218a9ba913cc9b3fe78e0ba0b6b647d8748bc6d5a44080"}, + {file = "scikit_learn-0.24.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:62214d2954377fcf3f31ec867dd4e436df80121e7a32947a0b3244f58f45e455"}, + {file = "scikit_learn-0.24.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8fac72b9688176922f9f54fda1ba5f7ffd28cbeb9aad282760186e8ceba9139a"}, + {file = "scikit_learn-0.24.2-cp38-cp38-win32.whl", hash = "sha256:ae426e3a52842c6b6d77d00f906b6031c8c2cfdfabd6af7511bb4bc9a68d720e"}, + {file = "scikit_learn-0.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:038f4e9d6ef10e1f3fe82addc3a14735c299866eb10f2c77c090410904828312"}, + {file = "scikit_learn-0.24.2-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:48f273836e19901ba2beecd919f7b352f09310ce67c762f6e53bc6b81cacf1f0"}, + {file = "scikit_learn-0.24.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a2a47449093dcf70babc930beba2ca0423cb7df2fa5fd76be5260703d67fa574"}, + {file = "scikit_learn-0.24.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:0e71ce9c7cbc20f6f8b860107ce15114da26e8675238b4b82b7e7cd37ca0c087"}, + {file = "scikit_learn-0.24.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2754c85b2287333f9719db7f23fb7e357f436deed512db3417a02bf6f2830aa5"}, + {file = "scikit_learn-0.24.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7be1b88c23cfac46e06404582215a917017cd2edaa2e4d40abe6aaff5458f24b"}, + {file = "scikit_learn-0.24.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:4e6198675a6f9d333774671bd536668680eea78e2e81c0b19e57224f58d17f37"}, + {file = "scikit_learn-0.24.2-cp39-cp39-win32.whl", hash = "sha256:cbdb0b3db99dd1d5f69d31b4234367d55475add31df4d84a3bd690ef017b55e2"}, + {file = "scikit_learn-0.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:40556bea1ef26ef54bc678d00cf138a63069144a0b5f3a436eecd8f3468b903e"}, +] +scipy = [ + {file = "scipy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2a0eeaab01258e0870c4022a6cd329aef3b7c6c2b606bd7cf7bb2ba9820ae561"}, + {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f52470e0548cdb74fb8ddf06773ffdcca7c97550f903b1c51312ec19243a7f7"}, + {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:787749110a23502031fb1643c55a2236c99c6b989cca703ea2114d65e21728ef"}, + {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3304bd5bc32e00954ac4b3f4cc382ca8824719bf348aacbec6347337d6b125fe"}, + {file = "scipy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:d1388fbac9dd591ea630da75c455f4cc637a7ca5ecb31a6b6cef430914749cde"}, + {file = "scipy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d648aa85dd5074b1ed83008ae987c3fbb53d68af619fce1dee231f4d8bd40e2f"}, + {file = "scipy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc61e3e5ff92d2f32bb263621d54a9cff5e3f7c420af3d1fa122ce2529de2bd9"}, + {file = "scipy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a496b42dbcd04ea9924f5e92be63af3d8e0f43a274b769bfaca0a297327d54ee"}, + {file = "scipy-1.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d13f31457f2216e5705304d9f28e2826edf75487410a57aa99263fa4ffd792c2"}, + {file = "scipy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:90c07ba5f34f33299a428b0d4fa24c30d2ceba44d63f8385b2b05be460819fcb"}, + {file = "scipy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:efdd3825d54c58df2cc394366ca4b9166cf940a0ebddeb87b6c10053deb625ea"}, + {file = "scipy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:71cfc96297617eab911e22216e8a8597703202e95636d9406df9af5c2ac99a2b"}, + {file = "scipy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ee952f39a4a4c7ba775a32b664b1f4b74818548b65f765987adc14bb78f5802"}, + {file = "scipy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:611f9cb459d0707dd8e4de0c96f86e93f61aac7475fcb225e9ec71fecdc5cebf"}, + {file = "scipy-1.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e101bceeb9e65a90dadbc5ca31283403a2d4667b9c178db29109750568e8d112"}, + {file = "scipy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4729b41a4cdaf4cd011aeac816b532f990bdf97710cef59149d3e293115cf467"}, + {file = "scipy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:c9951e3746b68974125e5e3445008a4163dd6d20ae0bbdae22b38cb8951dc11b"}, + {file = "scipy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:da9c6b336e540def0b7fd65603da8abeb306c5fc9a5f4238665cbbb5ff95cf58"}, + {file = "scipy-1.7.1.tar.gz", hash = "sha256:6b47d5fa7ea651054362561a28b1ccc8da9368a39514c1bbf6c0977a1c376764"}, +] +seaborn = [ + {file = "seaborn-0.11.1-py3-none-any.whl", hash = "sha256:4e1cce9489449a1c6ff3c567f2113cdb41122f727e27a984950d004a88ef3c5c"}, + {file = "seaborn-0.11.1.tar.gz", hash = "sha256:44e78eaed937c5a87fc7a892c329a7cc091060b67ebd1d0d306b446a74ba01ad"}, +] +sinfo = [ + {file = "sinfo-0.3.4.tar.gz", hash = "sha256:81ea91c69a875de178e10bada9476d7300a1f712e1823dbd7714f43a10baba4d"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +statsmodels = [ + {file = "statsmodels-0.12.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:c1d98ce2072f5e772cbf91d05475490368da5d3ee4a3150062330c7b83221ceb"}, + {file = "statsmodels-0.12.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4184487e9c281acad3d0bda19445c69db292f0dbb18f25ebf56a7966a0a28eef"}, + {file = "statsmodels-0.12.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:37e107fa11299090ed90f93c7172162b850c28fd09999937b971926813e887c5"}, + {file = "statsmodels-0.12.2-cp36-none-win32.whl", hash = "sha256:5d3e7333e1c5b234797ed57c3d1533371374c1e1e7e7ed54d27805611f96e2d5"}, + {file = "statsmodels-0.12.2-cp36-none-win_amd64.whl", hash = "sha256:aaf3c75fd22cb9dcf9c1b28f8ae87521310870f4dd8a6a4f1010f1e46d992377"}, + {file = "statsmodels-0.12.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:c48b7cbb37a651bb1cd23614abc10f447845ad3c3a713bf74e2aad20cfc94ae7"}, + {file = "statsmodels-0.12.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a3bd3922463dda8ad33e5e5075d2080e9e012aeb2032b5cdaeea9b79c2472000"}, + {file = "statsmodels-0.12.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:43de84bc08c8b9f778502aed7a476d6e68674e6878718e533b07d569cf0927a9"}, + {file = "statsmodels-0.12.2-cp37-none-win32.whl", hash = "sha256:0197855aa1d40c42532d6a75b4ca72e30826a50d90ec3047a404f9702d8b814f"}, + {file = "statsmodels-0.12.2-cp37-none-win_amd64.whl", hash = "sha256:93273aa1c31caf59bcce9790ca4c3f54fdc45a37c61084d06f1ba4fbe56e7752"}, + {file = "statsmodels-0.12.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:3e94306d4c07e332532ea4911d1f1d1f661c79aa73f22c5bb22e6dd47b40d562"}, + {file = "statsmodels-0.12.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:f3a7622f3d0ce2fc204f43b74de4e03e42775609705bf94d656b730482ca935a"}, + {file = "statsmodels-0.12.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:587deb788e7f8f3f866d28e812cf5c082b4d4a2d3f5beea94d0e9699ea71ef22"}, + {file = "statsmodels-0.12.2-cp38-none-win32.whl", hash = "sha256:cbbdf6f708c9a1f1fad5cdea5e4342d6fdb37e42e92288c2cf906b99976ffe15"}, + {file = "statsmodels-0.12.2-cp38-none-win_amd64.whl", hash = "sha256:1fa720e895112a1b04b27002218b0ea7f10dd1d9cffd1c018c88bbfb82520f57"}, + {file = "statsmodels-0.12.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:c3782ce846a52862ac72f89d22b6b1ca13d877bc593872309228a6f05d934321"}, + {file = "statsmodels-0.12.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8f93cb3f7d87c1fc7e51b3b239371c25a17a0a8e782467fdf4788cfef600724a"}, + {file = "statsmodels-0.12.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f61f33f64760a22100b6b146217823f73cfedd251c9bdbd58453ca94e63326c7"}, + {file = "statsmodels-0.12.2-cp39-none-win32.whl", hash = "sha256:3aab85174444f1bcad1e9218a3d3db08f0f86eeb97985236ca8605a0a39ce305"}, + {file = "statsmodels-0.12.2-cp39-none-win_amd64.whl", hash = "sha256:94d3632d56c13eebebaefb52bd4b43144ad5a131337b57842f46db826fa7d2d3"}, + {file = "statsmodels-0.12.2.tar.gz", hash = "sha256:8ad7a7ae7cdd929095684118e3b05836c0ccb08b6a01fe984159475d174a1b10"}, +] +stdlib-list = [ + {file = "stdlib-list-0.8.0.tar.gz", hash = "sha256:a1e503719720d71e2ed70ed809b385c60cd3fb555ba7ec046b96360d30b16d9f"}, + {file = "stdlib_list-0.8.0-py3-none-any.whl", hash = "sha256:2ae0712a55b68f3fbbc9e58d6fa1b646a062188f49745b495f94d3310a9fdd3e"}, +] +tables = [ + {file = "tables-3.6.1-2-cp36-cp36m-win32.whl", hash = "sha256:db163df08ded7804d596dee14d88397f6c55cdf4671b3992cb885c0b3890a54d"}, + {file = "tables-3.6.1-2-cp36-cp36m-win_amd64.whl", hash = "sha256:fd63c94960f8208cb13d41033a3114c0242e7737cb578f2454c6a087c5d246ec"}, + {file = "tables-3.6.1-2-cp37-cp37m-win32.whl", hash = "sha256:9d06c5fda6657698bae4fbe841204625b501ddf2e2a77131c23f3d3ac072db82"}, + {file = "tables-3.6.1-2-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b97a7363941d9518573c217cb5bfe4b2b456748aac1e9420d3979f7d5e82d2"}, + {file = "tables-3.6.1-2-cp38-cp38-win32.whl", hash = "sha256:6055dd1d3ec03fd25c60bb93a4be396464f0640fd5845884230dae1deb7e6cc6"}, + {file = "tables-3.6.1-2-cp38-cp38-win_amd64.whl", hash = "sha256:bfdbcacffec122ce8d1b0dd6ffc3c6051bedd6081e20264fa96165d43fc78f52"}, + {file = "tables-3.6.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:d95faa1174653a738ac8183a95f050a29a3f69efac6e71f70cde8d717e31af17"}, + {file = "tables-3.6.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:f1327aeef8b6c0fec5aae9f5f5a57b2d8ec98c08495fd09471b749ea46de9eb0"}, + {file = "tables-3.6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:f9c88511483c8fd39e7841fc60bc7038c96eeb87fe776092439172e1e6330f49"}, + {file = "tables-3.6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:361da30289ecdcb39b7648c786d8185f9ab08879c0a58a3fc56dab026e122d8e"}, + {file = "tables-3.6.1-cp36-cp36m-win32.whl", hash = "sha256:ea4b41ed95953ad588bcd6e557577414e50754011430c27934daf5dbd2d52251"}, + {file = "tables-3.6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6e13a3eaf86f9eba582a04b44929ee1585a05dd539d207a10a22374b7e4552ca"}, + {file = "tables-3.6.1-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:acb3f905c63e437023071833744b3e5a83376dc457f413f0840d8d50dd5d402b"}, + {file = "tables-3.6.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:4628e762a8aacfa038cdae118d2d1df9a9ddd9b4a82d6993f4bcbfa7744a9f8a"}, + {file = "tables-3.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8c96c5d4a9ebe34b72b918b3189954e2d5b6f87cb211d4244b7c001661d8a861"}, + {file = "tables-3.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:950167d56b45ece117f79d839d5d55f0cb45bfca20290fa9dcd70255282f969e"}, + {file = "tables-3.6.1-cp37-cp37m-win32.whl", hash = "sha256:8ea87231788cfd5773ffbe33f149f778f9ef4ab681149dec00cb88e1681bd299"}, + {file = "tables-3.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:169450bd11959c0e1c43137e768cf8b60b2a4f3b2ebf9a620e21865dc0c2d059"}, + {file = "tables-3.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed1e030bb077476d585697e37f2b8e37db4157ff93b485b43f374254cff8698"}, + {file = "tables-3.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7acbf0e2fb7132a40f441ebb53b53c97cee05fb88ce743afdd97c681d1d377d7"}, + {file = "tables-3.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:94d7ccac04277089e3bb466bf5c8f7038dd53bb8f19ea9679b7fea62c5c3ae8f"}, + {file = "tables-3.6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:da9e1ee83c01ed4d1382c7b186d77b4c0ef80b340a48d11a66346e30342c5929"}, + {file = "tables-3.6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:dedb959c00ac9e84562a69e80fa858d7aa06d91f96c6cb8cccbbbaf7a879436b"}, + {file = "tables-3.6.1.tar.gz", hash = "sha256:49a972b8a7c27a8a173aeb05f67acb45fe608b64cd8e9fa667c0962a60b71b49"}, +] +texttable = [ + {file = "texttable-1.6.4-py2.py3-none-any.whl", hash = "sha256:dd2b0eaebb2a9e167d1cefedab4700e5dcbdb076114eed30b58b97ed6b37d6f2"}, + {file = "texttable-1.6.4.tar.gz", hash = "sha256:42ee7b9e15f7b225747c3fa08f43c5d6c83bc899f80ff9bae9319334824076e9"}, +] +threadpoolctl = [ + {file = "threadpoolctl-2.2.0-py3-none-any.whl", hash = "sha256:e5a995e3ffae202758fa8a90082e35783b9370699627ae2733cd1c3a73553616"}, + {file = "threadpoolctl-2.2.0.tar.gz", hash = "sha256:86d4b6801456d780e94681d155779058759eaef3c3564758b17b6c99db5f81cb"}, +] +tqdm = [ + {file = "tqdm-4.62.0-py2.py3-none-any.whl", hash = "sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340"}, + {file = "tqdm-4.62.0.tar.gz", hash = "sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6"}, +] +umap-learn = [ + {file = "umap-learn-0.5.1.tar.gz", hash = "sha256:3e3e5e526109866012a9da79f423c922edc379c6cac9bf65ea08fbb9dd93ff3a"}, +] +xlrd = [ + {file = "xlrd-1.2.0-py2.py3-none-any.whl", hash = "sha256:e551fb498759fa3a5384a94ccd4c3c02eb7c00ea424426e212ac0c57be9dfbde"}, + {file = "xlrd-1.2.0.tar.gz", hash = "sha256:546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..e9a1082 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[tool.poetry] +name = "reductionwrappers" +version = "2.5.0" +description = "companion Python installer for R package {ReductionWrappers}" +authors = ["Miles Smith "] +license = "BSD-3" + +[tool.poetry.dependencies] +python = "^3.8,<3.10" +anndata = "^0.7.6" +umap-learn = "^0.5.1" +numba = "^0.53.1" +ForceAtlas2 = "^1.0" +opentsne = {git = "https://github.com/pavlin-policar/openTSNE"} +pacmap = "^0.5.0" +PhenoGraph = "^1.5.7" +scanpy = "^1.8.1" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/src/reductionwrappers/__init__.py b/src/reductionwrappers/__init__.py new file mode 100644 index 0000000..e69de29