From 77aafeb10b56eb9a37e557fa05b5855f90538ce8 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Thu, 31 Jul 2025 21:18:35 +0000 Subject: [PATCH 01/15] add .vscode to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c67ac69..15d7889 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ docs .DS_Store dev/ +.vscode/ \ No newline at end of file From c54e85197d1cac63cd431780b8ff1407200accc8 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Thu, 31 Jul 2025 16:36:43 -0700 Subject: [PATCH 02/15] minor adjust to gitignore and man --- .gitignore | 3 ++- man/Ibex.matrix.Rd | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 15d7889..d618e1c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ docs .DS_Store dev/ -.vscode/ \ No newline at end of file +.vscode/ +.devcontainer/ \ No newline at end of file diff --git a/man/Ibex.matrix.Rd b/man/Ibex.matrix.Rd index 61b986e..33f227b 100644 --- a/man/Ibex.matrix.Rd +++ b/man/Ibex.matrix.Rd @@ -81,6 +81,6 @@ ibex_values <- Ibex.matrix(ibex_example, } \seealso{ -\code{\link[immApex:sequenceEncoder]{immApex::propertyEncoder()}}, -\code{\link[immApex:sequenceEncoder]{immApex::geometricEncoder()}} +\code{\link[immApex:propertyEncoder]{immApex::propertyEncoder()}}, +\code{\link[immApex:geometricEncoder]{immApex::geometricEncoder()}} } From 124a6b38d19f1131567c0157bea276a4d179b7c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Pag=C3=A8s?= Date: Thu, 16 Oct 2025 15:53:21 -0700 Subject: [PATCH 03/15] Ibex 0.99.34: Restore pre-0.99.33 ibex_vdj.rda --- DESCRIPTION | 2 +- data/ibex_vdj.rda | Bin 73356 -> 74204 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8db19a6..19fa816 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: Ibex Title: Methods for BCR single-cell embedding -Version: 0.99.33 +Version: 0.99.34 Authors@R: c( person(given = "Nick", family = "Borcherding", role = c("aut", "cre"), email = "ncborch@gmail.com")) Description: Implementation of the Ibex algorithm for single-cell embedding based on BCR sequences. The package includes a standalone function to encode BCR sequence information by amino acid properties or sequence order using tensorflow-based autoencoder. In addition, the package interacts with SingleCellExperiment or Seurat data objects. diff --git a/data/ibex_vdj.rda b/data/ibex_vdj.rda index 521de08082e18fb009fe328330790bfa6ca7bba6..7c05d7dbd1a30455974a0a7f9889fdfbe6af9268 100644 GIT binary patch literal 74204 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 literal 73356 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

I@@j2=1zkx; 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

vk^6KDx@{=9`p4$*kZ!MRGjFs&<)&F+ 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 O<555Z000000a;ofGf Date: Wed, 29 Oct 2025 11:38:26 -0400 Subject: [PATCH 04/15] bump x.y.z version to even y prior to creation of RELEASE_3_22 branch --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 19fa816..e7ce92e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: Ibex Title: Methods for BCR single-cell embedding -Version: 0.99.34 +Version: 1.0.0 Authors@R: c( person(given = "Nick", family = "Borcherding", role = c("aut", "cre"), email = "ncborch@gmail.com")) Description: Implementation of the Ibex algorithm for single-cell embedding based on BCR sequences. The package includes a standalone function to encode BCR sequence information by amino acid properties or sequence order using tensorflow-based autoencoder. In addition, the package interacts with SingleCellExperiment or Seurat data objects. From f238de551abcd24a27dde360a157a93a05aeb122 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:16:36 -0800 Subject: [PATCH 05/15] remove rlang import --- DESCRIPTION | 6 +++--- NAMESPACE | 1 - R/CoNGAfy.R | 1 - R/utils.R | 1 - man/Ibex-package.Rd | 7 ++++++- man/Ibex_matrix.Rd | 4 ++-- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index e7ce92e..c633b86 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,12 +2,13 @@ Package: Ibex Title: Methods for BCR single-cell embedding Version: 1.0.0 Authors@R: c( - person(given = "Nick", family = "Borcherding", role = c("aut", "cre"), email = "ncborch@gmail.com")) + person(given = "Nick", family = "Borcherding", role = c("aut", "cre", "cph"), email = "ncborch@gmail.com"), + person(given = "Qile", family = "Yang", role = "ctb", email = "qile.yang@berkeley.edu", comment = c(ORCID = "0009-0005-0148-2499"))) Description: Implementation of the Ibex algorithm for single-cell embedding based on BCR sequences. The package includes a standalone function to encode BCR sequence information by amino acid properties or sequence order using tensorflow-based autoencoder. In addition, the package interacts with SingleCellExperiment or Seurat data objects. License: MIT + file LICENSE Encoding: UTF-8 LazyData: false -RoxygenNote: 7.3.2 +RoxygenNote: 7.3.3 biocViews: Software, ImmunoOncology, SingleCell, Classification, Annotation, Sequencing Depends: R (>= 4.5.0) @@ -17,7 +18,6 @@ Imports: methods, Matrix, reticulate (>= 1.43.0), - rlang, SeuratObject, scRepertoire, SingleCellExperiment, diff --git a/NAMESPACE b/NAMESPACE index 9bf1cfd..9fe3887 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -30,7 +30,6 @@ importFrom(immApex,onehotEncoder) importFrom(immApex,propertyEncoder) importFrom(methods,is) importFrom(methods,slot) -importFrom(rlang,"%||%") importFrom(scRepertoire,combineBCR) importFrom(stats,as.formula) importFrom(stats,dist) diff --git a/R/CoNGAfy.R b/R/CoNGAfy.R index 2bee708..7b737fb 100644 --- a/R/CoNGAfy.R +++ b/R/CoNGAfy.R @@ -192,7 +192,6 @@ grabAssay <- function(input.data, assay) { } # Calculate mean across individual clones -#' @importFrom rlang %||% #' @importFrom Matrix sparse.model.matrix colSums #' @importFrom SummarizedExperiment assay #' @importFrom SeuratObject GetAssayData diff --git a/R/utils.R b/R/utils.R index f9d50e6..b1ddac7 100644 --- a/R/utils.R +++ b/R/utils.R @@ -3,7 +3,6 @@ amino.acids <- c("A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V") # Add to meta data some of the metrics calculated -#' @importFrom rlang %||% #' @importFrom SingleCellExperiment colData add.meta.data <- function(sc, meta, header) { if (inherits(x=sc, what ="Seurat")) { diff --git a/man/Ibex-package.Rd b/man/Ibex-package.Rd index 7759772..1e11fea 100644 --- a/man/Ibex-package.Rd +++ b/man/Ibex-package.Rd @@ -42,7 +42,12 @@ runtime; no manual setup is usually required. \url{https://github.com/BorchLab/Ibex/issues} } \author{ -\strong{Maintainer}: Nick Borcherding \email{ncborch@gmail.com} +\strong{Maintainer}: Nick Borcherding \email{ncborch@gmail.com} [copyright holder] + +Other contributors: +\itemize{ + \item Qile Yang \email{qile.yang@berkeley.edu} (\href{https://orcid.org/0009-0005-0148-2499}{ORCID}) [contributor] +} } \keyword{package} diff --git a/man/Ibex_matrix.Rd b/man/Ibex_matrix.Rd index aca412e..97610bb 100644 --- a/man/Ibex_matrix.Rd +++ b/man/Ibex_matrix.Rd @@ -84,6 +84,6 @@ ibex_values <- Ibex_matrix(ibex_example, } \seealso{ -\code{\link[immApex:propertyEncoder]{immApex::propertyEncoder()}}, -\code{\link[immApex:geometricEncoder]{immApex::geometricEncoder()}} +\code{\link[immApex:sequenceEncoder]{immApex::propertyEncoder()}}, +\code{\link[immApex:sequenceEncoder]{immApex::geometricEncoder()}} } From 93c492bdd42630e819efc7d3ea18bdb003fc761c Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:24:12 -0800 Subject: [PATCH 06/15] update NEWS formatting --- NEWS | 197 ++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 121 insertions(+), 76 deletions(-) diff --git a/NEWS b/NEWS index 82536fc..8fdd431 100644 --- a/NEWS +++ b/NEWS @@ -1,60 +1,105 @@ -CHANGES IN VERSION 0.99.31 ------------------------- -* ibex_ensure_basilisk_external_dir no longer importsFrom basilisk.utils directly - -CHANGES IN VERSION 0.99.30 ------------------------- -* Moved data processing script out of vignette to inst/scripts -* Added ibex_ensure_basilisk_external_dir with basilisk.utils - -CHANGES IN VERSION 0.99.29 ------------------------- -* Adding internal .OnLoad() function to handle basilisk lock dir issue - -CHANGES IN VERSION 0.99.28 ------------------------- -* Deprecated `quietBCRgenes()` -* Converted `Ibex.matrix()` to `Ibex_matrix()` -* Added Install Instructions for BioCondcutor on README and Vignette -* Removed references to Keras3 Installation -* Removed LazyData TRUE statement - -CHANGES IN VERSION 0.99.10 ------------------------- -* Added information to example data - -CHANGES IN VERSION 0.99.9 ------------------------- -* Examples now check if python is installed and running - -CHANGES IN VERSION 0.99.8 ------------------------- -* Updated example data to 2k HEL BEAM-Ab from 10x -* Converted ibex_example into SCE object for compliance -* Large revision of vignette to fit new data/format -* Added species argument to runIbex -* Updated CoNGA handling of assay for Seurat and Single-Cell Objects. - -CHANGES IN VERSION 0.99.7 ------------------------- -* Integration of Ibex with immApex -* Updated Seurat object to v5 -* Updated support for SCE format for ```runIbex()``` -* Update ```CoNGAfy()``` to function with all versions of Seurat -* Updated ```quietBCRgenes()``` to use VariableFeatures() call for SeuratV5 and backward compatibility. -* Add ```getHumanIgPseudoGenes()``` to return a list of human Immunoglobulin Pseudo genes that are kept by ```quietBCRgenes()``` +# Ibex Development Version + +- removed rlang from Imports +- Reformatted NEWS file + +# Ibex 1.0.0 + +## Major Underlying Changes + +- Integration of Ibex with immApex +- Updated Seurat object to v5 +- Runs using basilisk instead of reticulate - no installation of python packages + +## Feature Changes + +- Converted Ibex.matrix() to Ibex_matrix() +- Updated support for SCE format for runIbex() +- Update CoNGAfy() to function with all versions of Seurat +- Updated quietBCRgenes() to use VariableFeatures() call for SeuratV5 and backward compatibility. +- Add getHumanIgPseudoGenes() to return a list of human Immunoglobulin Pseudo genes that are kept by quietBCRgenes() + +## New Models + +- Added New Light and Heavy Chain Models +- Encoding methods now accepted: "OHE", "atchleyFactors", "crucianiProperties", "kideraFactors", "MSWHIM","tScales", "zScales" +- Sequence input: + - Human Heavy: 10000000 + - Human Light: 5000000 + - Human Heavy-Expanded: 5000000 + - Human Light-Expanded: 2500000 + - Mouse Heavy: 5000000 + - Mouse Heavy-Expanded: 5000000 +- Trained convolutional and variational autoencoders for Heavy/Light chains + - Architecture: 512-256-128-256-512 + - Parameters: + - Batch Size = 128 + - Latent Dimensions = 128 + - Epochs = 100 + - Loss = Mean Squared Error (CNN) & KL Divergence (VAE) + - Activation = relu + - Learning rate = 1e-6 + - Optimizers: Adam + - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights + - CNN autoencoders have batch normalization layers between the dense layers. + +# Ibex 0.99.31 + +- ibex_ensure_basilisk_external_dir no longer importsFrom basilisk.utils directly + +# Ibex 0.99.30 + +- Moved data processing script out of vignette to inst/scripts +- Added ibex_ensure_basilisk_external_dir with basilisk.utils + +# Ibex 0.99.29 + +- Adding internal .OnLoad() function to handle basilisk lock dir issue + +# Ibex 0.99.28 + +- Deprecated `quietBCRgenes()` +- Converted `Ibex.matrix()` to `Ibex_matrix()` +- Added Install Instructions for BioCondcutor on README and Vignette +- Removed references to Keras3 Installation +- Removed LazyData TRUE statement + +# Ibex 0.99.10 + +- Added information to example data + +# Ibex 0.99.9 + +- Examples now check if python is installed and running + +# Ibex 0.99.8 + +- Updated example data to 2k HEL BEAM-Ab from 10x +- Converted ibex_example into SCE object for compliance +- Large revision of vignette to fit new data/format +- Added species argument to runIbex +- Updated CoNGA handling of assay for Seurat and Single-Cell Objects. + +# Ibex 0.99.7 + +- Integration of Ibex with immApex +- Updated Seurat object to v5 +- Updated support for SCE format for ```runIbex()``` +- Update ```CoNGAfy()``` to function with all versions of Seurat +- Updated ```quietBCRgenes()``` to use VariableFeatures() call for SeuratV5 and backward compatibility. +- Add ```getHumanIgPseudoGenes()``` to return a list of human Immunoglobulin Pseudo genes that are kept by ```quietBCRgenes()``` ## New Models -* Added New Light and Heavy Chain Models -* Encoding methods now accepted: "OHE", "atchleyFactors", "crucianiProperties", "kideraFactors", "MSWHIM","tScales", "zScales" -* Sequence input: +- Added New Light and Heavy Chain Models +- Encoding methods now accepted: "OHE", "atchleyFactors", "crucianiProperties", "kideraFactors", "MSWHIM","tScales", "zScales" +- Sequence input: - Human Heavy: 10000000 - Human Light: 5000000 - Human Heavy-Expanded: 5000000 - Human Light-Expanded: 2500000 - Mouse Heavy: 5000000 - Mouse Heavy-Expanded: 5000000 -* Trained convolutional and variational autoencoders for Heavy/Light chains +- Trained convolutional and variational autoencoders for Heavy/Light chains - Architecture: 512-256-128-256-512 - Parameters: Batch Size = 128 @@ -67,16 +112,16 @@ CHANGES IN VERSION 0.99.7 - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights - CNN autoencoders have batch normalization layers between the dense layers. -CHANGES IN VERSION 0.99.6 ------------------------- -* Implementing GitHub action workflows -* Adding testthat framework -* Deprecating clonalCommunity +# Ibex 0.99.6 + +- Implementing GitHub action workflows +- Adding testthat framework +- Deprecating clonalCommunity + +# Ibex 0.99.5 -CHANGES IN VERSION 0.99.5 ------------------------- -* Added geometric encoding using the BLOSUM62 matrix -* Trained classical and variational autoencoders for light/heavy chains with 1.5 million cdr sequences +- Added geometric encoding using the BLOSUM62 matrix +- Trained classical and variational autoencoders for light/heavy chains with 1.5 million cdr sequences - Architecture: 256-128-30-128-256 - Parameters: Batch Size = 64 @@ -88,13 +133,13 @@ CHANGES IN VERSION 0.99.5 - learn rate varied by models - classical auto encoders have batch normalization layers between the dense layers. -CHANGES IN VERSION 0.99.4 ------------------------- -* Added chain.checker() function to allow for uncapitlized chain calls +# Ibex 0.99.4 -CHANGES IN VERSION 0.99.3 ------------------------- -* Updated models for manuscript revision +- Added chain.checker() function to allow for uncapitlized chain calls + +# Ibex 0.99.3 + +- Updated models for manuscript revision - Architecture: 256-128-30-128-256 - Parameters: Batch Size = 64 @@ -106,19 +151,19 @@ CHANGES IN VERSION 0.99.3 - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights -CHANGES IN VERSION 0.99.2 ------------------------- -* Updated models to include radam optimization, early stop for min 10 epochs, and all trained on 800,000 unique cdr3s -* quietBCRgenes() now does not remove human Ig pseudogenes +# Ibex 0.99.2 + +- Updated models to include radam optimization, early stop for min 10 epochs, and all trained on 800,000 unique cdr3s +- quietBCRgenes() now does not remove human Ig pseudogenes + + +# Ibex 0.99.1 +- Added detection of chain length to function call +- Added support for direct output of combineBCR() +- Modified quietBCR() to include constant regions and J-chains -CHANGES IN VERSION 0.99.1 ------------------------- -* Added detection of chain length to function call -* Added support for direct output of combineBCR() -* Modified quietBCR() to include constant regions and J-chains +# Ibex 0.99.0 -CHANGES IN VERSION 0.99.0 ------------------------- -* Initial commit \ No newline at end of file +- Initial commit \ No newline at end of file From a407b1bf593fdf93ab993e866aa8bd4bcd22033b Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:25:08 -0800 Subject: [PATCH 07/15] Increment version number to 1.0.0.9000 --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index c633b86..ae66fcd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: Ibex Title: Methods for BCR single-cell embedding -Version: 1.0.0 +Version: 1.0.0.9000 Authors@R: c( person(given = "Nick", family = "Borcherding", role = c("aut", "cre", "cph"), email = "ncborch@gmail.com"), person(given = "Qile", family = "Yang", role = "ctb", email = "qile.yang@berkeley.edu", comment = c(ORCID = "0009-0005-0148-2499"))) From 5e5b10c9e3ed909a0108fcc70dc62f61dc5ef153 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:26:18 -0800 Subject: [PATCH 08/15] add bbsoptions --- .BBSoptions | 1 + NEWS | 1 + 2 files changed, 2 insertions(+) create mode 100644 .BBSoptions diff --git a/.BBSoptions b/.BBSoptions new file mode 100644 index 0000000..c51a3fc --- /dev/null +++ b/.BBSoptions @@ -0,0 +1 @@ +UnsupportedPlatforms: win32 \ No newline at end of file diff --git a/NEWS b/NEWS index 8fdd431..167ee5c 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ - removed rlang from Imports - Reformatted NEWS file +- Add `.BBSoptions` with `UnsupportedPlatforms: win32` as per `basilisk` documentation # Ibex 1.0.0 From c7248c89dca0cf8d29952a422525b037c2a991d8 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:28:56 -0800 Subject: [PATCH 09/15] docker --- .Rbuildignore | 6 ++++++ .devcontainer/devcontainer.json | 13 +++++++++++++ .gitignore | 1 - DockerFile | 8 ++++++++ NEWS | 1 + 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 DockerFile diff --git a/.Rbuildignore b/.Rbuildignore index 989c4b9..d809f26 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -9,3 +9,9 @@ ^__autograph_generated_filezt06eymn\.py$ ^\.github$ ^LICENSE\.md$ +^\.devcontainer +^\.trigger_build$ +^Dockerfile$ +^dev +^\.BBSoptions$ +^\.vscode \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..37091c3 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,13 @@ +{ + "name": "Ibex devcontainer", + "shutdownAction": "none", + "build": { + "context": "..", + "dockerfile": "../Dockerfile" + }, + "runArgs": [ + // to use GPUs in container uncomment next line + // "--gpus=all", + "--name=ibex-devbox" + ] +} diff --git a/.gitignore b/.gitignore index d618e1c..df54527 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ docs .DS_Store dev/ .vscode/ -.devcontainer/ \ No newline at end of file diff --git a/DockerFile b/DockerFile new file mode 100644 index 0000000..ff09f8c --- /dev/null +++ b/DockerFile @@ -0,0 +1,8 @@ +FROM rocker/verse:4.5.1 +RUN apt-get update && apt-get install -y texlive-fonts-extra +WORKDIR /Ibex +COPY . . +RUN apt install -y libgsl-dev +RUN Rscript -e "install.packages('Seurat')" +RUN Rscript -e "remotes::install_deps(dependencies = TRUE)" +RUN Rscript -e "devtools::test()" diff --git a/NEWS b/NEWS index 167ee5c..ae6d534 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ - removed rlang from Imports - Reformatted NEWS file - Add `.BBSoptions` with `UnsupportedPlatforms: win32` as per `basilisk` documentation +- Add Docker infrastructure with `Dockerfile` and `.devcontainer/devcontainer.json` # Ibex 1.0.0 From 04ca1768c2194fd6951b9ff6cea36c20c9dc5bb8 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:33:49 -0800 Subject: [PATCH 10/15] markdownlint --- .markdownlint.json | 7 +++ NEWS | 121 ++++++++++++++++++++++----------------------- 2 files changed, 67 insertions(+), 61 deletions(-) create mode 100644 .markdownlint.json diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..cc51b65 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,7 @@ +{ + "MD007" : { "indent": 4 }, + "MD013": false, + "MD024": false, + "MD025": false, + "MD033": false +} diff --git a/NEWS b/NEWS index ae6d534..637ff25 100644 --- a/NEWS +++ b/NEWS @@ -1,9 +1,10 @@ # Ibex Development Version - removed rlang from Imports -- Reformatted NEWS file +- Reformatted `NEWS` - Add `.BBSoptions` with `UnsupportedPlatforms: win32` as per `basilisk` documentation - Add Docker infrastructure with `Dockerfile` and `.devcontainer/devcontainer.json` +- Add `.markdownlint.json` to sourcecode # Ibex 1.0.0 @@ -26,24 +27,24 @@ - Added New Light and Heavy Chain Models - Encoding methods now accepted: "OHE", "atchleyFactors", "crucianiProperties", "kideraFactors", "MSWHIM","tScales", "zScales" - Sequence input: - - Human Heavy: 10000000 - - Human Light: 5000000 - - Human Heavy-Expanded: 5000000 - - Human Light-Expanded: 2500000 - - Mouse Heavy: 5000000 - - Mouse Heavy-Expanded: 5000000 + - Human Heavy: 10000000 + - Human Light: 5000000 + - Human Heavy-Expanded: 5000000 + - Human Light-Expanded: 2500000 + - Mouse Heavy: 5000000 + - Mouse Heavy-Expanded: 5000000 - Trained convolutional and variational autoencoders for Heavy/Light chains - - Architecture: 512-256-128-256-512 - - Parameters: - - Batch Size = 128 - - Latent Dimensions = 128 - - Epochs = 100 - - Loss = Mean Squared Error (CNN) & KL Divergence (VAE) - - Activation = relu - - Learning rate = 1e-6 - - Optimizers: Adam - - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights - - CNN autoencoders have batch normalization layers between the dense layers. + - Architecture: 512-256-128-256-512 + - Parameters: + - Batch Size = 128 + - Latent Dimensions = 128 + - Epochs = 100 + - Loss = Mean Squared Error (CNN) & KL Divergence (VAE) + - Activation = relu + - Learning rate = 1e-6 + - Optimizers: Adam + - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights + - CNN autoencoders have batch normalization layers between the dense layers. # Ibex 0.99.31 @@ -92,48 +93,49 @@ - Add ```getHumanIgPseudoGenes()``` to return a list of human Immunoglobulin Pseudo genes that are kept by ```quietBCRgenes()``` ## New Models + - Added New Light and Heavy Chain Models - Encoding methods now accepted: "OHE", "atchleyFactors", "crucianiProperties", "kideraFactors", "MSWHIM","tScales", "zScales" -- Sequence input: - - Human Heavy: 10000000 - - Human Light: 5000000 - - Human Heavy-Expanded: 5000000 - - Human Light-Expanded: 2500000 - - Mouse Heavy: 5000000 - - Mouse Heavy-Expanded: 5000000 +- Sequence input: + - Human Heavy: 10000000 + - Human Light: 5000000 + - Human Heavy-Expanded: 5000000 + - Human Light-Expanded: 2500000 + - Mouse Heavy: 5000000 + - Mouse Heavy-Expanded: 5000000 - Trained convolutional and variational autoencoders for Heavy/Light chains - - Architecture: 512-256-128-256-512 - - Parameters: - Batch Size = 128 - Latent Dimensions = 128 - Epochs = 100 - Loss = Mean Squared Error (CNN) & KL Divergence (VAE) - Activation = relu - Learning rate = 1e-6 - - Optimizers: Adam - - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights - - CNN autoencoders have batch normalization layers between the dense layers. + - Architecture: 512-256-128-256-512 + - Parameters: + - Batch Size = 128 + - Latent Dimensions = 128 + - Epochs = 100 + - Loss = Mean Squared Error (CNN) & KL Divergence (VAE) + - Activation = relu + - Learning rate = 1e-6 + - Optimizers: Adam + - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights + - CNN autoencoders have batch normalization layers between the dense layers. # Ibex 0.99.6 - Implementing GitHub action workflows -- Adding testthat framework -- Deprecating clonalCommunity +- Adding testthat framework +- Deprecating clonalCommunity # Ibex 0.99.5 - Added geometric encoding using the BLOSUM62 matrix - Trained classical and variational autoencoders for light/heavy chains with 1.5 million cdr sequences - - Architecture: 256-128-30-128-256 - - Parameters: - Batch Size = 64 - Latent Dimensions = 30 - Epochs = 100 - Loss = Mean Squared Error - - Optimizers: Adam - - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights - - learn rate varied by models - - classical auto encoders have batch normalization layers between the dense layers. + - Architecture: 256-128-30-128-256 + - Parameters: + - Batch Size = 64 + - Latent Dimensions = 30 + - Epochs = 100 + - Loss = Mean Squared Error + - Optimizers: Adam + - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights + - learn rate varied by models + - classical auto encoders have batch normalization layers between the dense layers. # Ibex 0.99.4 @@ -142,30 +144,27 @@ # Ibex 0.99.3 - Updated models for manuscript revision - - Architecture: 256-128-30-128-256 - - Parameters: - Batch Size = 64 - Learning Rate = 0.001 - Latent Dimensions = 30 - Epochs = 50 - Loss = Mean Squared Error - - Optimizers: RAdam (for amino acid properties) and RMSprop (for OHE) - - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights - + - Architecture: 256-128-30-128-256 + - Parameters: + Batch Size = 64 + Learning Rate = 0.001 + Latent Dimensions = 30 + Epochs = 50 + Loss = Mean Squared Error + - Optimizers: RAdam (for amino acid properties) and RMSprop (for OHE) + - Early stopping was set to patients of 10 for minimal validation loss and restoration of best weights # Ibex 0.99.2 - Updated models to include radam optimization, early stop for min 10 epochs, and all trained on 800,000 unique cdr3s - quietBCRgenes() now does not remove human Ig pseudogenes - # Ibex 0.99.1 - Added detection of chain length to function call - Added support for direct output of combineBCR() - Modified quietBCR() to include constant regions and J-chains - # Ibex 0.99.0 -- Initial commit \ No newline at end of file +- Initial commit From fadeab49c63d5f15e1eefd444c3e907b3693c317 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:44:57 -0800 Subject: [PATCH 11/15] add configure files for basilisk --- NAMESPACE | 1 - NEWS | 4 +++- R/Ibex-package.R | 5 +++++ R/basiliskEnv.R | 5 ++--- configure | 2 ++ configure.win | 2 ++ 6 files changed, 14 insertions(+), 5 deletions(-) create mode 100755 configure create mode 100755 configure.win diff --git a/NAMESPACE b/NAMESPACE index 9fe3887..a7da0e9 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,7 +4,6 @@ export(CoNGAfy) export(Ibex_matrix) export(combineExpandedBCR) export(runIbex) -import(basilisk) importFrom(Matrix,colSums) importFrom(Matrix,sparse.model.matrix) importFrom(SeuratObject,CreateAssayObject) diff --git a/NEWS b/NEWS index 637ff25..9b1a522 100644 --- a/NEWS +++ b/NEWS @@ -2,7 +2,9 @@ - removed rlang from Imports - Reformatted `NEWS` -- Add `.BBSoptions` with `UnsupportedPlatforms: win32` as per `basilisk` documentation +- As per `basilisk` documentation: + - Add `.BBSoptions` with `UnsupportedPlatforms: win32` + - Add `configure` and `configure.win` scripts - Add Docker infrastructure with `Dockerfile` and `.devcontainer/devcontainer.json` - Add `.markdownlint.json` to sourcecode diff --git a/R/Ibex-package.R b/R/Ibex-package.R index 6e1a392..6ad30a1 100644 --- a/R/Ibex-package.R +++ b/R/Ibex-package.R @@ -37,3 +37,8 @@ #' #' @keywords package "_PACKAGE" + + +## usethis namespace: start +## usethis namespace: end +NULL diff --git a/R/basiliskEnv.R b/R/basiliskEnv.R index 5d63f7c..dd5d892 100644 --- a/R/basiliskEnv.R +++ b/R/basiliskEnv.R @@ -1,5 +1,4 @@ -#' @import basilisk -IbexEnv <- BasiliskEnvironment( +IbexEnv <- basilisk::BasiliskEnvironment( envname = "IbexEnv", pkgname = "Ibex", packages = c( @@ -9,4 +8,4 @@ IbexEnv <- BasiliskEnvironment( "h5py=3.13", "numpy=1.26" ) -) \ No newline at end of file +) diff --git a/configure b/configure new file mode 100755 index 0000000..c5ad505 --- /dev/null +++ b/configure @@ -0,0 +1,2 @@ +#!/bin/sh +${R_HOME}/bin/Rscript -e "basilisk::configureBasiliskEnv(src = 'R/basiliskEnv.R')" diff --git a/configure.win b/configure.win new file mode 100755 index 0000000..dd3e17d --- /dev/null +++ b/configure.win @@ -0,0 +1,2 @@ +#!/bin/sh +${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe -e "basilisk::configureBasiliskEnv(src = 'R/basiliskEnv.R')" From 51c636994fb6bbc082bdbe55eedd215bf8f106f5 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:47:07 -0800 Subject: [PATCH 12/15] format readme --- README.md | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index a67bb8a..a65d47d 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,28 @@ - Ibex +# Ibex + Using BCR sequences for graph embedding + [![R-CMD-check](https://github.com/BorchLab/Ibex/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/BorchLab/Ibex/actions/workflows/R-CMD-check.yaml) [![Codecov test coverage](https://codecov.io/gh/BorchLab/Ibex/graph/badge.svg)](https://app.codecov.io/gh/BorchLab/Ibex?branch=master) [![Documentation](https://img.shields.io/badge/docs-stable-blue.svg)](https://www.borch.dev/uploads/screpertoire/articles/ibex) + ## Introduction + Single-cell sequencing is an integral tool in immunology and oncology, enabling researchers to measure gene expression and immune cell receptor profiling at the level of individual cells. We developed the [scRepertoire](https://github.com/BorchLab/scRepertoire) R package to facilitate the integration of immune receptor and gene expression data. However, leveraging clonal indices for more complex analyses—such as using clonality in cell embedding—remains challenging. **Ibex** addresses this need by using deep learning to vectorize BCR sequences based on amino acid properties or their underlying order. Ibex is the sister package to [Trex](https://github.com/BorchLab/Trex), which focuses on TCR sequence data. -# System Requirements +# System Requirements + Ibex has been tested on R versions >= 4.0. For details on required R packages, refer to the package’s DESCRIPTION file. It is designed to work with single-cell objects containing BCR data generated using [scRepertoire](https://github.com/BorchLab/scRepertoire). Ibex has been tested on macOS and Linux. -# Installation +## Installation -Ibex relies on the [immApex](https://github.com/BorchLab/immApex) API can be installed directly from GitHub: +Ibex relies on the [immApex](https://github.com/BorchLab/immApex) API can be installed directly from GitHub: ```r devtools::install_github("BorchLab/immApex") @@ -32,13 +37,13 @@ if (!require("BiocManager", quietly = TRUE)) BiocManager::install("immApex") ``` -After immApex installation, you can install Ibex with: +After immApex installation, you can install Ibex with: ```r devtools::install_github("BorchLab/Ibex") ``` -Or via Bioconductor +Or via Bioconductor: ```r BiocManager::install("Ibex") @@ -46,28 +51,28 @@ BiocManager::install("Ibex") The main version of Ibex is submitted to Bioconductor (installation instructions will be updated after review). By default, Ibex will automatically pull deep learning models from a [Zenodo repository](https://zenodo.org/records/14919286) and cache them locally. -# Usage/Demos +## Usage/Demos Ibex integrates smoothly into most popular R-based single-cell workflows, including **Seurat** and **Bioconductor/SingleCellExperiment.** -## Quick Start +### Quick Start -See the [vignette](https://www.borch.dev/uploads/screpertoire/articles/ibex) for a step-by-step tutorial. +See the [vignette](https://www.borch.dev/uploads/screpertoire/articles/ibex) for a step-by-step tutorial. -## Autoencoded Matrix +### Autoencoded Matrix -The Ibex algorithm allows users to select BCR-based metrics to return autoencoded values to be used in dimensional reduction. If single-cell objects are not filtered for B cells with BCR, `Ibex_matrix()` will still return values, however IBEX_1 will be based on the disparity of BCR-containing and BCR-non-containing cells based on the Ibex algorithm. +The Ibex algorithm allows users to select BCR-based metrics to return autoencoded values to be used in dimensional reduction. If single-cell objects are not filtered for B cells with BCR, `Ibex_matrix()` will still return values, however IBEX_1 will be based on the disparity of BCR-containing and BCR-non-containing cells based on the Ibex algorithm. ```r library(Ibex) my_ibex <- Ibex_matrix(singleObject) ``` -## Seurat or Single-Cell Experiment +### Seurat or Single-Cell Experiment -You can run Ibex within your Seurat or Single-Cell Experiemt workflow. **Importantly** `runIbex()` will automatically filter single-cells that do not contain BCR information in the meta data of the single-cell object. +You can run Ibex within your Seurat or Single-Cell Experiemt workflow. **Importantly** `runIbex()` will automatically filter single-cells that do not contain BCR information in the meta data of the single-cell object. ```r seuratObj_Bonly <- runIbex(seuratObj, #The single cell object @@ -78,11 +83,11 @@ seuratObj_Bonly <- runIbex(seuratObj, #The single cell object "kideraFactors", "MSWHIM", "tScales", "OHE"), # Method of Encoding geometric.theta = pi/3, # theta for Geometric Encoding species = "Human") # "Mouse" or "Human" - + seuratObj_Bonly <- runIbex(seuratObj, reduction.name = "Ibex") ``` -## After Running Ibex +### After Running Ibex Once the Ibex embeddings are part of your Seurat object, you can use these embeddings to generate a t-SNE or UMAP: @@ -93,13 +98,15 @@ seuratObj <- RunUMAP(seuratObj, reduction = "Ibex", reduction.key = "Ibex_") If using Seurat package, the Ibex embedding information and gene expression PCA can be used to find the [Weighted Nearest Neighbors](https://pubmed.ncbi.nlm.nih.gov/34062119/). Before applying the WNN approach, best practice would be to remove the BCR-related genes from the list of variable genes and rerunning the PCA analysis. -### Recalculate PCA without BCR genes with quietBCRgenes() function in Ibex. +#### Recalculate PCA without BCR genes with quietBCRgenes() function in Ibex. + ```r seuratObj <- quietBCRgenes(seuratObj) seuratObj <- RunPCA(seuratObj) ``` -### Running WNN approach +#### Running WNN approach + ```r seuratObj <- FindMultiModalNeighbors(seuratObj, reduction.list = list("pca", "Ibex"), @@ -111,17 +118,19 @@ seuratObj <- RunUMAP(seuratObj, reduction.name = "wnn.umap", reduction.key = "wnnUMAP_") ``` + ## Bug Reports/New Features -#### If you run into any issues or bugs please submit a [GitHub issue](https://github.com/BorchLab/Ibex/issues) with details of the issue. +### If you run into any issues or bugs please submit a [GitHub issue](https://github.com/BorchLab/Ibex/issues) with details of the issue. - If possible please include a [reproducible example](https://reprex.tidyverse.org/). Alternatively, an example with the internal **ibex_example** would be extremely helpful. -#### Any requests for new features or enhancements can also be submitted as [GitHub issues](https://github.com/BorchLab/Ibex/issues). +### Any requests for new features or enhancements can also be submitted as [GitHub issues](https://github.com/BorchLab/Ibex/issues). -#### [Pull Requests](https://github.com/BorchLab/Ibex/pulls) are welcome for bug fixes, new features, or enhancements. +### [Pull Requests](https://github.com/BorchLab/Ibex/pulls) are welcome for bug fixes, new features, or enhancements. ## Citation -More information on Ibex is available at our [Biorxiv preprint](https://www.biorxiv.org/content/10.1101/2022.11.09.515787v2). + +More information on Ibex is available at our [Biorxiv preprint](https://www.biorxiv.org/content/10.1101/2022.11.09.515787v2). From e97f2a6a56b6230f90c07203b91ddde1c14f0122 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:54:43 -0800 Subject: [PATCH 13/15] improve testing and update wordlist --- NEWS | 3 +- inst/WORDLIST | 10 +- tests/testthat/helper-testingFunctions.R | 26 +++- tests/testthat/test-CoNGAfy.R | 3 + tests/testthat/test-Ibex_matrix.R | 111 ++++++++------- tests/testthat/test-runIbex.R | 165 +++++++++++------------ 6 files changed, 169 insertions(+), 149 deletions(-) diff --git a/NEWS b/NEWS index 9b1a522..467dbd9 100644 --- a/NEWS +++ b/NEWS @@ -1,12 +1,13 @@ # Ibex Development Version - removed rlang from Imports -- Reformatted `NEWS` +- Reformatted `NEWS` and `README.md` - As per `basilisk` documentation: - Add `.BBSoptions` with `UnsupportedPlatforms: win32` - Add `configure` and `configure.win` scripts - Add Docker infrastructure with `Dockerfile` and `.devcontainer/devcontainer.json` - Add `.markdownlint.json` to sourcecode +- Improved testthat compatibility across platforms # Ibex 1.0.0 diff --git a/inst/WORDLIST b/inst/WORDLIST index e6ff5b4..e536e44 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -5,7 +5,6 @@ Autoencoder Autoencoders BCR BLOSUM -Bioconductor's Biorxiv CDR CMD @@ -23,11 +22,14 @@ HEL IGH IGK Ig +Interoperate Kidera Lysozyme MSWHIM MultiUMAP OHE +ORCID +Pretrained SNE Schattgen SingleCellExperiment @@ -55,21 +57,19 @@ combineBCR contig crucianiProperties csv -customizable embeddings gp hydrophobicity ident -identOriginal immApex +interoperates interpretability -keras kideraFactors nCount nFeature physicochemical preprint -pseudogenes +pretrained pv quietBCRgenes runIbex diff --git a/tests/testthat/helper-testingFunctions.R b/tests/testthat/helper-testingFunctions.R index 316f0da..714d981 100644 --- a/tests/testthat/helper-testingFunctions.R +++ b/tests/testthat/helper-testingFunctions.R @@ -1,3 +1,25 @@ getdata <- function(dir, name) { - readRDS(paste("testdata/", dir, "/", name, ".rds", sep = "")) # could move testdata 1 dir lvl up nstead -} \ No newline at end of file + readRDS(paste("testdata/", dir, "/", name, ".rds", sep = "")) +} + +skip_if_py_not_installed <- function(python_packages) { + + missing_packages <- basilisk::basiliskRun( + env = IbexEnv, + fun = function(packages) { + packages[sapply(packages, Negate(reticulate::py_module_available))] + }, + packages = python_packages + ) + + if (length(missing_packages) > 0) { + testthat::skip(paste0( + "Required Python Module", + if (length(missing_packages) > 1) "s" else "", + " `", + paste(missing_packages, collapse = "`, `"), + "` not available." + )) + } + +} diff --git a/tests/testthat/test-CoNGAfy.R b/tests/testthat/test-CoNGAfy.R index 2ba7305..72b4a2f 100644 --- a/tests/testthat/test-CoNGAfy.R +++ b/tests/testthat/test-CoNGAfy.R @@ -25,6 +25,9 @@ test_that("CoNGAfy filters cells correctly", { }) test_that("CoNGAfy stops if amino acid sequences are missing", { + + local_reproducible_output(unicode = FALSE) + sc_example <- suppressWarnings(CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) diff --git a/tests/testthat/test-Ibex_matrix.R b/tests/testthat/test-Ibex_matrix.R index e0a85c1..53eca53 100644 --- a/tests/testthat/test-Ibex_matrix.R +++ b/tests/testthat/test-Ibex_matrix.R @@ -1,8 +1,10 @@ # test script for Ibex_matrix.R - testcases are NOT comprehensive! -library(Ibex) ibex_example <- get(data("ibex_example")) test_that("Ibex_matrix handles incorrect inputs gracefully", { + + local_reproducible_output(unicode = FALSE) + expect_error(Ibex_matrix(input.data = ibex_example, chain = "Middle", method = "encoder"), "'arg' should be one of \"Heavy\", \"Light\"") expect_error(Ibex_matrix(input.data = ibex_example, chain = "Heavy", method = "xyz"), @@ -15,68 +17,61 @@ test_that("Ibex_matrix handles incorrect inputs gracefully", { "non-numeric argument to mathematical function") }) -keras_installed <- reticulate::py_module_available("keras") -numpy_installed <- reticulate::py_module_available("numpy") +test_that("Ibex_matrix returns expected output format", { + skip_if_py_not_installed(c("keras", "numpy")) + result <- Ibex_matrix(input.data = ibex_example, + chain = "Heavy", + method = "encoder", + encoder.model = "VAE", + encoder.input = "atchleyFactors", + verbose = FALSE) + expect_true(is.data.frame(result)) + expect_true(all(grepl("^Ibex_", colnames(result)))) + expect_gt(nrow(result), 0) + expect_gt(ncol(result), 0) +}) + +test_that("Ibex_matrix works with encoder method", { + skip_if_py_not_installed(c("keras", "numpy")) + result <- Ibex_matrix(input.data = ibex_example, + chain = "Light", + method = "encoder", + encoder.model = "CNN", + encoder.input = "OHE", + verbose = FALSE) + expect_true(is.data.frame(result)) + expect_true(all(grepl("^Ibex_", colnames(result)))) +}) + +test_that("Ibex_matrix works with geometric method", { + skip_if_py_not_installed(c("keras", "numpy")) + result <- Ibex_matrix(input.data = ibex_example, + chain = "Heavy", + method = "geometric", + geometric.theta = pi / 4, + verbose = FALSE) + expect_true(is.data.frame(result)) + expect_true(all(grepl("^Ibex_", colnames(result)))) +}) -# 2. If not installed, skip everything: -if (!keras_installed || !numpy_installed) { - test_that("Skipping Ibex_matrix tests", { - skip("Required Python modules (Keras, NumPy) are not available.") - }) -} else { - - test_that("Ibex_matrix returns expected output format", { - result <- Ibex_matrix(input.data = ibex_example, +test_that("Ibex_matrix handles different species options", { + skip_if_py_not_installed(c("keras", "numpy")) + result1 <- Ibex_matrix(input.data = ibex_example, chain = "Heavy", method = "encoder", encoder.model = "VAE", encoder.input = "atchleyFactors", + species = "Human", verbose = FALSE) - expect_true(is.data.frame(result)) - expect_true(all(grepl("^Ibex_", colnames(result)))) - expect_gt(nrow(result), 0) - expect_gt(ncol(result), 0) - }) - - test_that("Ibex_matrix works with encoder method", { - result <- Ibex_matrix(input.data = ibex_example, - chain = "Light", - method = "encoder", - encoder.model = "CNN", - encoder.input = "OHE", - verbose = FALSE) - expect_true(is.data.frame(result)) - expect_true(all(grepl("^Ibex_", colnames(result)))) - }) - - test_that("Ibex_matrix works with geometric method", { - result <- Ibex_matrix(input.data = ibex_example, + result2 <- Ibex_matrix(input.data = ibex_example, chain = "Heavy", - method = "geometric", - geometric.theta = pi / 4, + method = "encoder", + encoder.model = "VAE", + encoder.input = "atchleyFactors", + species = "Mouse", verbose = FALSE) - expect_true(is.data.frame(result)) - expect_true(all(grepl("^Ibex_", colnames(result)))) - }) - - test_that("Ibex_matrix handles different species options", { - result1 <- Ibex_matrix(input.data = ibex_example, - chain = "Heavy", - method = "encoder", - encoder.model = "VAE", - encoder.input = "atchleyFactors", - species = "Human", - verbose = FALSE) - result2 <- Ibex_matrix(input.data = ibex_example, - chain = "Heavy", - method = "encoder", - encoder.model = "VAE", - encoder.input = "atchleyFactors", - species = "Mouse", - verbose = FALSE) - expect_true(is.data.frame(result1)) - expect_true(is.data.frame(result2)) - expect_true(all(grepl("^Ibex_", colnames(result1)))) - expect_true(all(grepl("^Ibex_", colnames(result2)))) - }) -} + expect_true(is.data.frame(result1)) + expect_true(is.data.frame(result2)) + expect_true(all(grepl("^Ibex_", colnames(result1)))) + expect_true(all(grepl("^Ibex_", colnames(result2)))) +}) diff --git a/tests/testthat/test-runIbex.R b/tests/testthat/test-runIbex.R index 6b6d856..aa3dc68 100644 --- a/tests/testthat/test-runIbex.R +++ b/tests/testthat/test-runIbex.R @@ -1,8 +1,10 @@ # test script for runIbex.R - testcases are NOT comprehensive! -library(Ibex) ibex_example <- get(data("ibex_example")) test_that("runIbex handles incorrect inputs gracefully", { + + local_reproducible_output(unicode = FALSE) + expect_error(runIbex(sc.data = ibex_example, chain = "Middle", method = "encoder"), "'arg' should be one of \"Heavy\", \"Light\"") expect_error(runIbex(sc.data = ibex_example, chain = "Heavy", method = "xyz"), @@ -15,97 +17,94 @@ test_that("runIbex handles incorrect inputs gracefully", { "non-numeric argument to mathematical function") }) -keras_installed <- reticulate::py_module_available("keras") -numpy_installed <- reticulate::py_module_available("numpy") +test_that("runIbex works with Seurat object", { + skip_if_py_not_installed(c("keras", "numpy")) + suppressWarnings(sc_example <- CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) + sc_example[["CTaa"]] <- sample(c("CASSL", "CASST", NA, "NA_IGHV1", "None_IGHV2"), 100, replace = TRUE) + sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) + + result <- runIbex(sc_example, + chain = "Heavy", + method = "encoder", + encoder.model = "VAE", + encoder.input = "atchleyFactors", + reduction.name = "IbexTest", + verbose = FALSE) + + expect_true("IbexTest" %in% names(result@reductions)) + expect_true(inherits(result, "Seurat")) +}) + +test_that("runIbex works with geometric method", { + skip_if_py_not_installed(c("keras", "numpy")) + sc_example <- suppressWarnings(SeuratObject::CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) + sc_example[["CTaa"]] <- sample(c("CASSL", "CASST", NA, "NA_IGHV1", "None_IGHV2"), 100, replace = TRUE) + sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) + + result <- runIbex(sc_example, + chain = "Heavy", + method = "geometric", + geometric.theta = pi / 4, + reduction.name = "IbexGeo", + verbose = FALSE) + + expect_true("IbexGeo" %in% names(result@reductions)) + expect_true(inherits(result, "Seurat")) +}) + +test_that("runIbex filters cells correctly", { + skip_if_py_not_installed(c("keras", "numpy")) + sc_example <- suppressWarnings(CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) + sc_example[["CTaa"]] <- c(rep("CASSL", 50), rep(NA, 50)) + sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) + result <- runIbex(sc_example, + chain = "Heavy", + method = "encoder", + encoder.model = "VAE", + encoder.input = "atchleyFactors", + reduction.name = "IbexFiltered", + verbose = FALSE) + + expect_true("IbexFiltered" %in% names(result@reductions)) + expect_lt(ncol(result), 100) # Ensures some cells were filtered out +}) -# 2. If not installed, skip everything: -if (!keras_installed || !numpy_installed) { - test_that("Skipping runIbex tests", { - skip("Required Python modules (Keras, NumPy) are not available.") - }) -} else { - - test_that("runIbex works with Seurat object", { - suppressWarnings(sc_example <- CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) - sc_example[["CTaa"]] <- sample(c("CASSL", "CASST", NA, "NA_IGHV1", "None_IGHV2"), 100, replace = TRUE) - sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) - - result <- runIbex(sc_example, +test_that("runIbex stops if amino acid sequences are missing", { + + skip_if_py_not_installed(c("keras", "numpy")) + local_reproducible_output(unicode = FALSE) + + sc_example <- suppressWarnings(SeuratObject::CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) + + expect_error(runIbex(sc_example, + chain = "Heavy", + method = "encoder", + encoder.model = "VAE", + encoder.input = "atchleyFactors", + verbose = FALSE), + "Amino acid sequences are not added to the single-cell object correctly.") +}) + +test_that("runIbex works with different reduction names", { + skip_if_py_not_installed(c("keras", "numpy")) + sc_example <- suppressWarnings(SeuratObject::CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) + sc_example[["CTaa"]] <- sample(c("CASSL", "CASST", NA, "NA_IGHV1", "None_IGHV2"), 100, replace = TRUE) + sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) + result1 <- runIbex(sc_example, chain = "Heavy", method = "encoder", encoder.model = "VAE", encoder.input = "atchleyFactors", - reduction.name = "IbexTest", + reduction.name = "Ibex1", verbose = FALSE) - - expect_true("IbexTest" %in% names(result@reductions)) - expect_true(inherits(result, "Seurat")) - }) - test_that("runIbex works with geometric method", { - sc_example <- suppressWarnings(SeuratObject::CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) - sc_example[["CTaa"]] <- sample(c("CASSL", "CASST", NA, "NA_IGHV1", "None_IGHV2"), 100, replace = TRUE) - sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) - - result <- runIbex(sc_example, - chain = "Heavy", - method = "geometric", - geometric.theta = pi / 4, - reduction.name = "IbexGeo", - verbose = FALSE) - - expect_true("IbexGeo" %in% names(result@reductions)) - expect_true(inherits(result, "Seurat")) - }) - - test_that("runIbex filters cells correctly", { - sc_example <- suppressWarnings(CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) - sc_example[["CTaa"]] <- c(rep("CASSL", 50), rep(NA, 50)) - sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) - result <- runIbex(sc_example, - chain = "Heavy", + result2 <- runIbex(sc_example, chain = "Heavy", method = "encoder", encoder.model = "VAE", encoder.input = "atchleyFactors", - reduction.name = "IbexFiltered", + reduction.name = "Ibex2", verbose = FALSE) - - expect_true("IbexFiltered" %in% names(result@reductions)) - expect_lt(ncol(result), 100) # Ensures some cells were filtered out - }) - test_that("runIbex stops if amino acid sequences are missing", { - sc_example <- suppressWarnings(SeuratObject::CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) - - expect_error(runIbex(sc_example, - chain = "Heavy", - method = "encoder", - encoder.model = "VAE", - encoder.input = "atchleyFactors", - verbose = FALSE), - "Amino acid sequences are not added to the single-cell object correctly.") - }) - - test_that("runIbex works with different reduction names", { - sc_example <- suppressWarnings(SeuratObject::CreateSeuratObject(counts = matrix(rnorm(1000), nrow = 10, ncol = 100))) - sc_example[["CTaa"]] <- sample(c("CASSL", "CASST", NA, "NA_IGHV1", "None_IGHV2"), 100, replace = TRUE) - sc_example[["CTgene"]] <- sample(c("NA_IGHV1.IGD1.IGJ1.IGM", "NA_IGHV1.IGD1.IGJ1.IGM", NA, "NA_IGHV1.IGD1.IGJ1.IGM", "None_IGHV1.IGD1.IGJ1.IGM"), 100, replace = TRUE) - result1 <- runIbex(sc_example, - chain = "Heavy", - method = "encoder", - encoder.model = "VAE", - encoder.input = "atchleyFactors", - reduction.name = "Ibex1", - verbose = FALSE) - - result2 <- runIbex(sc_example, chain = "Heavy", - method = "encoder", - encoder.model = "VAE", - encoder.input = "atchleyFactors", - reduction.name = "Ibex2", - verbose = FALSE) - - expect_true("Ibex1" %in% names(result1@reductions)) - expect_true("Ibex2" %in% names(result2@reductions)) - }) -} + expect_true("Ibex1" %in% names(result1@reductions)) + expect_true("Ibex2" %in% names(result2@reductions)) +}) From da9907830e462e4eee4d161765d082b12e81d5c5 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 12:58:15 -0800 Subject: [PATCH 14/15] make actions work on devel --- .github/workflows/R-CMD-check.yaml | 4 ++-- .github/workflows/test-coverage.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 32c3e56..ccce637 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -2,9 +2,9 @@ # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: - branches: [main, master] + branches: [main, devel] pull_request: - branches: [main, master] + branches: [main, devel] name: R-CMD-check diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 9ee1f3d..d0a0796 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -2,9 +2,9 @@ # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: - branches: [main, master] + branches: [main, devel] pull_request: - branches: [main, master] + branches: [main, devel] name: test-coverage From 270807625bdaf8f7431a8d8d8665649b84467994 Mon Sep 17 00:00:00 2001 From: Qile0317 Date: Sun, 2 Nov 2025 20:12:39 -0800 Subject: [PATCH 15/15] minor NEWS formatting --- NEWS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 467dbd9..5a20b98 100644 --- a/NEWS +++ b/NEWS @@ -19,11 +19,11 @@ ## Feature Changes -- Converted Ibex.matrix() to Ibex_matrix() -- Updated support for SCE format for runIbex() -- Update CoNGAfy() to function with all versions of Seurat -- Updated quietBCRgenes() to use VariableFeatures() call for SeuratV5 and backward compatibility. -- Add getHumanIgPseudoGenes() to return a list of human Immunoglobulin Pseudo genes that are kept by quietBCRgenes() +- Renamed `Ibex.matrix()` to `Ibex_matrix()` +- Updated support for SCE format for `runIbex()` +- Update `CoNGAfy()` to function with all versions of Seurat +- Updated `quietBCRgenes()` to use `VariableFeatures()` call for SeuratV5 and backward compatibility. +- Add `getHumanIgPseudoGenes()` to return a list of human Immunoglobulin Pseudo genes that are kept by `quietBCRgenes()` ## New Models