diffbio 0.1.6__tar.gz → 0.1.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. {diffbio-0.1.6 → diffbio-0.1.8}/PKG-INFO +6 -7
  2. {diffbio-0.1.6 → diffbio-0.1.8}/README.md +3 -4
  3. {diffbio-0.1.6 → diffbio-0.1.8}/pyproject.toml +3 -3
  4. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/losses/self_supervised_losses.py +10 -9
  5. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/epigenomics/contextual.py +2 -2
  6. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/multiomics/multiomics_vae.py +1 -3
  7. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/enhanced_batch_correction.py +3 -9
  8. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/joint_training.py +2 -2
  9. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/minibatch_training.py +2 -4
  10. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/utils/__init__.py +0 -2
  11. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/utils/training.py +2 -24
  12. {diffbio-0.1.6 → diffbio-0.1.8}/.gitignore +0 -0
  13. {diffbio-0.1.6 → diffbio-0.1.8}/LICENSE +0 -0
  14. {diffbio-0.1.6 → diffbio-0.1.8}/benchmarks/README.md +0 -0
  15. {diffbio-0.1.6 → diffbio-0.1.8}/benchmarks/crossmodality/README.md +0 -0
  16. {diffbio-0.1.6 → diffbio-0.1.8}/examples/README.md +0 -0
  17. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/__init__.py +0 -0
  18. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/configs.py +0 -0
  19. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/constants.py +0 -0
  20. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/__init__.py +0 -0
  21. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/base_operators.py +0 -0
  22. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/data_types.py +0 -0
  23. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/gnn_components.py +0 -0
  24. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/graph_utils.py +0 -0
  25. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/neural_components.py +0 -0
  26. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/optimal_transport.py +0 -0
  27. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/__init__.py +0 -0
  28. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/_projections_permutahedron.py +0 -0
  29. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/_projections_simplex.py +0 -0
  30. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/_projections_transport.py +0 -0
  31. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/_sorting_network.py +0 -0
  32. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/_types.py +0 -0
  33. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/_utils.py +0 -0
  34. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/autograd_safe.py +0 -0
  35. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/comparison.py +0 -0
  36. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/elementwise.py +0 -0
  37. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/logical.py +0 -0
  38. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/normalization.py +0 -0
  39. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/quantile.py +0 -0
  40. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/selection.py +0 -0
  41. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/sorting.py +0 -0
  42. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/soft_ops/straight_through.py +0 -0
  43. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/core/uncertainty.py +0 -0
  44. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/evaluation/__init__.py +0 -0
  45. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/evaluation/adapters.py +0 -0
  46. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/evaluation/graders.py +0 -0
  47. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/evaluation/problem.py +0 -0
  48. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/evaluation/runner.py +0 -0
  49. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/losses/__init__.py +0 -0
  50. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/losses/alignment_losses.py +0 -0
  51. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/losses/biological_regularization.py +0 -0
  52. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/losses/metric_losses.py +0 -0
  53. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/losses/singlecell_losses.py +0 -0
  54. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/losses/statistical_losses.py +0 -0
  55. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/__init__.py +0 -0
  56. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/_count_vae.py +0 -0
  57. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/_loss_balancing.py +0 -0
  58. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/_masked_gene_transformer.py +0 -0
  59. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/_transformer_validation.py +0 -0
  60. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/alignment/__init__.py +0 -0
  61. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/alignment/profile_hmm.py +0 -0
  62. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/alignment/scoring.py +0 -0
  63. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/alignment/smith_waterman.py +0 -0
  64. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/alignment/soft_msa.py +0 -0
  65. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/assembly/__init__.py +0 -0
  66. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/assembly/gnn_assembly.py +0 -0
  67. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/assembly/metagenomic_binning.py +0 -0
  68. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/crispr/__init__.py +0 -0
  69. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/crispr/guide_scoring.py +0 -0
  70. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/__init__.py +0 -0
  71. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/_graph_utils.py +0 -0
  72. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/admet_predictor.py +0 -0
  73. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/attentive_fp.py +0 -0
  74. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/dti.py +0 -0
  75. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/fingerprint.py +0 -0
  76. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/maccs_keys.py +0 -0
  77. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/message_passing.py +0 -0
  78. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/primitives.py +0 -0
  79. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/property_predictor.py +0 -0
  80. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/drug_discovery/similarity.py +0 -0
  81. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/epigenomics/__init__.py +0 -0
  82. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/epigenomics/chromatin_state.py +0 -0
  83. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/epigenomics/fno_peak_calling.py +0 -0
  84. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/epigenomics/peak_calling.py +0 -0
  85. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/__init__.py +0 -0
  86. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/adapters.py +0 -0
  87. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/contracts.py +0 -0
  88. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/embedding_probe.py +0 -0
  89. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/experimental.py +0 -0
  90. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/foundation_model.py +0 -0
  91. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/frozen.py +0 -0
  92. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/precomputed.py +0 -0
  93. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/foundation_models/transformer_encoder.py +0 -0
  94. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/mapping/__init__.py +0 -0
  95. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/mapping/neural_mapper.py +0 -0
  96. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/metabolomics/__init__.py +0 -0
  97. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/metabolomics/isotope_envelope.py +0 -0
  98. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/metabolomics/soft_centroiding.py +0 -0
  99. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/metabolomics/spectral_similarity.py +0 -0
  100. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/molecular_dynamics/__init__.py +0 -0
  101. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/molecular_dynamics/force_field.py +0 -0
  102. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/molecular_dynamics/integrator.py +0 -0
  103. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/molecular_dynamics/primitives.py +0 -0
  104. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/multiomics/__init__.py +0 -0
  105. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/multiomics/hic_contact.py +0 -0
  106. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/multiomics/spatial_deconvolution.py +0 -0
  107. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/multiomics/spatial_gene_detection.py +0 -0
  108. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/__init__.py +0 -0
  109. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/arcsinh_cofactor.py +0 -0
  110. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/differentiable_pca.py +0 -0
  111. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/embedding.py +0 -0
  112. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/learnable_normalization.py +0 -0
  113. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/learnable_orthogonal_projection.py +0 -0
  114. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/learnable_projection.py +0 -0
  115. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/matrix_free_pca.py +0 -0
  116. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/phate.py +0 -0
  117. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/scaling.py +0 -0
  118. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/soft_pca.py +0 -0
  119. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/umap.py +0 -0
  120. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/normalization/vae_normalizer.py +0 -0
  121. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/population/__init__.py +0 -0
  122. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/population/ancestry_estimation.py +0 -0
  123. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/preprocessing/__init__.py +0 -0
  124. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/preprocessing/adapter_removal.py +0 -0
  125. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/preprocessing/duplicate_filter.py +0 -0
  126. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/preprocessing/error_correction.py +0 -0
  127. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/protein/__init__.py +0 -0
  128. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/protein/secondary_structure.py +0 -0
  129. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/quality_filter.py +0 -0
  130. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/rna_structure/__init__.py +0 -0
  131. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/rna_structure/rna_folding.py +0 -0
  132. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/rnaseq/__init__.py +0 -0
  133. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/rnaseq/motif_discovery.py +0 -0
  134. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/rnaseq/splicing_psi.py +0 -0
  135. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/__init__.py +0 -0
  136. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/ambient_removal.py +0 -0
  137. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/archetypes.py +0 -0
  138. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/batch_correction.py +0 -0
  139. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/cell_annotation.py +0 -0
  140. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/communication.py +0 -0
  141. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/differential_distribution.py +0 -0
  142. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/doublet_detection.py +0 -0
  143. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/downsampling.py +0 -0
  144. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/grn_inference.py +0 -0
  145. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/imputation.py +0 -0
  146. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/knockdown_filter.py +0 -0
  147. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/ot_trajectory.py +0 -0
  148. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/simulation.py +0 -0
  149. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/sindy_grn.py +0 -0
  150. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/soft_clustering.py +0 -0
  151. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/soft_hvg.py +0 -0
  152. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/spatial_domains.py +0 -0
  153. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/stochastic_gate_selector.py +0 -0
  154. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/switch_de.py +0 -0
  155. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/trajectory.py +0 -0
  156. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/singlecell/velocity.py +0 -0
  157. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/statistical/__init__.py +0 -0
  158. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/statistical/em_quantification.py +0 -0
  159. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/statistical/hmm.py +0 -0
  160. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/statistical/nb_glm.py +0 -0
  161. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/__init__.py +0 -0
  162. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/classifier.py +0 -0
  163. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/cnn_classifier.py +0 -0
  164. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/cnv_segmentation.py +0 -0
  165. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/deepvariant_pileup.py +0 -0
  166. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/learnable_pileup.py +0 -0
  167. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/pileup.py +0 -0
  168. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/operators/variant/quality_recalibration.py +0 -0
  169. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/__init__.py +0 -0
  170. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/adapters.py +0 -0
  171. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/differential_expression.py +0 -0
  172. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/enhanced_variant_calling.py +0 -0
  173. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/joint_preprocessing.py +0 -0
  174. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/perturbation.py +0 -0
  175. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/preprocessing.py +0 -0
  176. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/single_cell.py +0 -0
  177. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/pipelines/variant_calling.py +0 -0
  178. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/reductions/__init__.py +0 -0
  179. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/reductions/base.py +0 -0
  180. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/reductions/pca_reduction.py +0 -0
  181. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/reductions/tfidf_reduction.py +0 -0
  182. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/samplers/__init__.py +0 -0
  183. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/samplers/perturbation_sampler.py +0 -0
  184. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sequences/__init__.py +0 -0
  185. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sequences/dna.py +0 -0
  186. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sequences/kmer.py +0 -0
  187. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/__init__.py +0 -0
  188. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/_anndata_shared.py +0 -0
  189. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/_batch_iteration.py +0 -0
  190. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/_benchmark_source.py +0 -0
  191. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/_indexed_batch_source.py +0 -0
  192. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/_utils.py +0 -0
  193. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/anndata_interop.py +0 -0
  194. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/anndata_source.py +0 -0
  195. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/archive_ii.py +0 -0
  196. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/balifam.py +0 -0
  197. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/bam.py +0 -0
  198. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/bengrn_ground_truth.py +0 -0
  199. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/contextual_epigenomics.py +0 -0
  200. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/dti.py +0 -0
  201. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/embeddings.py +0 -0
  202. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/encode_peaks.py +0 -0
  203. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/fasta.py +0 -0
  204. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/immune_human.py +0 -0
  205. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/indexed_embeddings.py +0 -0
  206. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/indexed_view.py +0 -0
  207. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/molnet.py +0 -0
  208. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/multiomics.py +0 -0
  209. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/pancreas.py +0 -0
  210. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/__init__.py +0 -0
  211. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/_types.py +0 -0
  212. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/_utils.py +0 -0
  213. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/concat_source.py +0 -0
  214. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/control_mapping.py +0 -0
  215. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/experiment_config.py +0 -0
  216. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/h5_metadata_cache.py +0 -0
  217. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/output_space.py +0 -0
  218. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/perturbation/perturbation_source.py +0 -0
  219. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/seqfish.py +0 -0
  220. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/sequence_foundation.py +0 -0
  221. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/sources/singlecell_foundation.py +0 -0
  222. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/splitters/__init__.py +0 -0
  223. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/splitters/base.py +0 -0
  224. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/splitters/molecular.py +0 -0
  225. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/splitters/perturbation.py +0 -0
  226. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/splitters/random.py +0 -0
  227. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/splitters/sequence.py +0 -0
  228. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/utils/dependency_runtime.py +0 -0
  229. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/utils/nn_utils.py +0 -0
  230. {diffbio-0.1.6 → diffbio-0.1.8}/src/diffbio/utils/quality.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: diffbio
3
- Version: 0.1.6
3
+ Version: 0.1.8
4
4
  Summary: End-to-end differentiable bioinformatics for JAX/Flax NNX: alignment, mapping, assembly, variant calling, RNA-seq, single-cell, epigenomics, CRISPR, metabolomics, multi-omics, protein and RNA structure, molecular dynamics and drug-discovery operators composed into trainable pipelines on datarax, artifex, opifex and calibrax
5
5
  Project-URL: Bug Tracker, https://github.com/avitai/DiffBio/issues
6
6
  Project-URL: Documentation, https://diffbio.readthedocs.io
@@ -45,10 +45,10 @@ Classifier: Topic :: Software Development :: Libraries
45
45
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
46
46
  Requires-Python: <3.14,>=3.12
47
47
  Requires-Dist: anndata>=0.9.1
48
- Requires-Dist: avitai-artifex>=0.1.9
48
+ Requires-Dist: avitai-artifex>=0.1.10
49
49
  Requires-Dist: beartype>=0.14.1
50
50
  Requires-Dist: biopython>=1.81
51
- Requires-Dist: calibrax>=0.1.6
51
+ Requires-Dist: calibrax>=0.1.8
52
52
  Requires-Dist: chex>=0.1.7
53
53
  Requires-Dist: datarax>=0.1.11
54
54
  Requires-Dist: flax>=0.12.9
@@ -352,11 +352,11 @@ result, _, _ = pipeline.apply(batch_data, {}, None)
352
352
  ### Training a Pipeline
353
353
 
354
354
  ```python
355
- from diffbio.utils import (
355
+ from calibrax.metrics.functional import softmax_cross_entropy
356
356
  from substrax.optim import OptimizerConfig
357
+ from diffbio.utils import (
357
358
  Trainer,
358
359
  TrainingConfig,
359
- cross_entropy_loss,
360
360
  create_synthetic_training_data,
361
361
  data_iterator,
362
362
  )
@@ -384,10 +384,9 @@ trainer = Trainer(pipeline, config)
384
384
 
385
385
  # Define loss function
386
386
  def loss_fn(predictions, targets):
387
- return cross_entropy_loss(
387
+ return softmax_cross_entropy(
388
388
  predictions["logits"],
389
389
  targets["labels"],
390
- num_classes=3,
391
390
  )
392
391
 
393
392
  # Train
@@ -138,11 +138,11 @@ result, _, _ = pipeline.apply(batch_data, {}, None)
138
138
  ### Training a Pipeline
139
139
 
140
140
  ```python
141
- from diffbio.utils import (
141
+ from calibrax.metrics.functional import softmax_cross_entropy
142
142
  from substrax.optim import OptimizerConfig
143
+ from diffbio.utils import (
143
144
  Trainer,
144
145
  TrainingConfig,
145
- cross_entropy_loss,
146
146
  create_synthetic_training_data,
147
147
  data_iterator,
148
148
  )
@@ -170,10 +170,9 @@ trainer = Trainer(pipeline, config)
170
170
 
171
171
  # Define loss function
172
172
  def loss_fn(predictions, targets):
173
- return cross_entropy_loss(
173
+ return softmax_cross_entropy(
174
174
  predictions["logits"],
175
175
  targets["labels"],
176
- num_classes=3,
177
176
  )
178
177
 
179
178
  # Train
@@ -39,11 +39,11 @@ dependencies = [
39
39
  # Datarax - operator, source, and pipeline contracts
40
40
  "datarax>=0.1.11",
41
41
  # Artifex - modeling, modality, and transformer substrate
42
- "avitai-artifex>=0.1.9",
42
+ "avitai-artifex>=0.1.10",
43
43
  # Opifex - scientific ML, operator learning, and advanced optimization
44
44
  "opifex>=0.2.7",
45
45
  # Calibrax - benchmarking, comparison, profiling, and regression control
46
- "calibrax>=0.1.6",
46
+ "calibrax>=0.1.8",
47
47
  # Substrax - device identity, meshes, runtime settings and checkpoint store shared by the
48
48
  # siblings; 0.1.6 adds substrax.runtime, substrax.artifacts and substrax.testing.
49
49
  "substrax>=0.1.9",
@@ -71,7 +71,7 @@ license = {file = "LICENSE"}
71
71
  name = "diffbio"
72
72
  readme = "README.md"
73
73
  requires-python = ">=3.12,<3.14"
74
- version = "0.1.6"
74
+ version = "0.1.8"
75
75
 
76
76
  [project.optional-dependencies]
77
77
  all = ["diffbio[benchmark,chem,cuda12,dev,docs,genomics,metal,soft-ops-advanced,soft-ops-ot,test,torch-io]"]
@@ -11,10 +11,11 @@ term, which the ``core.losses`` ledger flags as the one genuinely new B6 piece.
11
11
  from __future__ import annotations
12
12
 
13
13
  import jax
14
+ from calibrax.metrics.functional import mae, mse
14
15
  from flax import nnx
15
16
 
16
- _EPSILON = 1.0e-8
17
- _VALID_LOSS_TYPES = ("mse", "mae")
17
+ _LOSSES = {"mse": mse, "mae": mae}
18
+ _VALID_LOSS_TYPES = tuple(_LOSSES)
18
19
 
19
20
 
20
21
  def masked_value_loss(
@@ -23,28 +24,28 @@ def masked_value_loss(
23
24
  mask: jax.Array,
24
25
  *,
25
26
  loss_type: str = "mse",
26
- epsilon: float = _EPSILON,
27
27
  ) -> jax.Array:
28
28
  """Reconstruction loss averaged over masked positions only.
29
29
 
30
+ The reduction is calibrax's masked mean: positions where ``mask`` is nonzero are
31
+ averaged, the rest contribute nothing, and an all-zero mask gives ``0`` rather than
32
+ ``0 / 0``.
33
+
30
34
  Args:
31
35
  predictions: Predicted values, any shape broadcastable with ``mask``.
32
36
  targets: Ground-truth values, same shape as ``predictions``.
33
37
  mask: ``1`` at positions to reconstruct (the masked-out values), ``0`` elsewhere.
34
38
  loss_type: ``"mse"`` (squared error) or ``"mae"`` (absolute error).
35
- epsilon: Stabilizer so an all-zero mask returns ``0`` rather than ``0 / 0``.
36
39
 
37
40
  Returns:
38
- The mask-weighted mean reconstruction error at the masked positions.
41
+ The mean reconstruction error at the masked positions.
39
42
 
40
43
  Raises:
41
44
  ValueError: If ``loss_type`` is not one of ``("mse", "mae")``.
42
45
  """
43
- if loss_type not in _VALID_LOSS_TYPES:
46
+ if loss_type not in _LOSSES:
44
47
  raise ValueError(f"loss_type must be one of {_VALID_LOSS_TYPES}, got {loss_type!r}")
45
- residual = predictions - targets
46
- error = residual**2 if loss_type == "mse" else abs(residual)
47
- return (mask * error).sum() / (mask.sum() + epsilon)
48
+ return _LOSSES[loss_type](predictions, targets, mask=mask)
48
49
 
49
50
 
50
51
  class MaskedValueLoss(nnx.Module):
@@ -9,6 +9,7 @@ import jax
9
9
  import jax.numpy as jnp
10
10
  import optax
11
11
  from artifex.generative_models.core.layers import TransformerEncoder
12
+ from calibrax.metrics.functional import mse
12
13
  from datarax.core.config import OperatorConfig
13
14
  from datarax.core.operator import OperatorModule
14
15
  from flax import nnx
@@ -250,8 +251,7 @@ def compute_chromatin_guidance_loss(
250
251
  )
251
252
  predicted_contacts = jax.nn.sigmoid(similarity)
252
253
  pair_mask = sequence_mask[:, :, None] * sequence_mask[:, None, :]
253
- squared_error = jnp.square(predicted_contacts - chromatin_contacts) * pair_mask
254
- return squared_error.sum() / jnp.maximum(pair_mask.sum(), 1.0)
254
+ return mse(predicted_contacts, chromatin_contacts, mask=pair_mask)
255
255
 
256
256
 
257
257
  def compute_contextual_epigenomics_loss(
@@ -23,7 +23,6 @@ from typing import Any
23
23
  import jax
24
24
  import jax.numpy as jnp
25
25
  from artifex.generative_models.core.base import MLP
26
- from artifex.generative_models.core.losses.base import reduce_loss
27
26
  from artifex.generative_models.core.losses.divergence import gaussian_kl_divergence
28
27
  from datarax.core.config import OperatorConfig
29
28
  from datarax.core.operator import require_key
@@ -304,8 +303,7 @@ class DifferentiableMultiOmicsVAE(LossBalancingMixin, EncoderDecoderOperator):
304
303
  for i in range(n_modalities):
305
304
  counts = data[self._input_key(i)]
306
305
  per_sample = jnp.sum((counts - reconstructions[i]) ** 2, axis=-1)
307
- mean_recon = reduce_loss(per_sample, reduction="mean")
308
- total_recon = total_recon + weights[i] * mean_recon
306
+ total_recon = total_recon + weights[i] * jnp.mean(per_sample)
309
307
 
310
308
  # KL divergence (batch_sum: sum over latent, mean over batch)
311
309
  kl = gaussian_kl_divergence(mu_joint, logvar_joint, reduction="batch_sum")
@@ -29,8 +29,8 @@ from artifex.generative_models.core.losses.adversarial import (
29
29
  wasserstein_discriminator_loss,
30
30
  wasserstein_generator_loss,
31
31
  )
32
- from artifex.generative_models.core.losses.base import reduce_loss
33
32
  from artifex.generative_models.core.losses.divergence import maximum_mean_discrepancy
33
+ from calibrax.metrics.functional import mse
34
34
  from datarax.core.config import OperatorConfig
35
35
  from datarax.core.operator import OperatorModule
36
36
  from flax import nnx
@@ -294,10 +294,7 @@ class DifferentiableMMDBatchCorrection(LossBalancingMixin, OperatorModule):
294
294
  reconstructed = self._decode(latent)
295
295
 
296
296
  # Losses
297
- reconstruction_loss = reduce_loss(
298
- (reconstructed - expression) ** 2,
299
- reduction="mean",
300
- )
297
+ reconstruction_loss = mse(reconstructed, expression)
301
298
  mmd_loss = self._compute_pairwise_mmd(latent, batch_labels)
302
299
 
303
300
  result = {
@@ -474,10 +471,7 @@ class DifferentiableWGANBatchCorrection(LossBalancingMixin, OperatorModule):
474
471
  disc_scores = self._discriminate(latent_reversed)
475
472
 
476
473
  # Reconstruction loss
477
- reconstruction_loss = reduce_loss(
478
- (reconstructed - expression) ** 2,
479
- reduction="mean",
480
- )
474
+ reconstruction_loss = mse(reconstructed, expression)
481
475
 
482
476
  # Identify "real" (batch 0) and "fake" (batch != 0) for WGAN framing.
483
477
  # The discriminator tries to distinguish batch 0 from the rest.
@@ -36,7 +36,7 @@ from substrax.optim import OptimizerConfig, create_optimizer
36
36
 
37
37
  from diffbio.losses.singlecell_losses import gene_weight_sparsity_loss
38
38
  from diffbio.pipelines.joint_preprocessing import JointPreprocessingPipeline
39
- from diffbio.utils.training import cross_entropy_loss
39
+ from calibrax.metrics.functional import softmax_cross_entropy
40
40
 
41
41
  _NUM_LOSSES = 2
42
42
 
@@ -94,7 +94,7 @@ def _classification_loss(
94
94
  ) -> jnp.ndarray:
95
95
  """Cross-entropy of the pipeline's predicted logits against the labels."""
96
96
  output, _, _ = pipeline.apply({"counts": counts}, {}, None)
97
- return cross_entropy_loss(output["logits"], labels, num_classes=n_classes)
97
+ return softmax_cross_entropy(output["logits"], labels)
98
98
 
99
99
 
100
100
  def _global_norm(grads: nnx.State) -> jnp.ndarray:
@@ -27,7 +27,7 @@ import numpy as np
27
27
  from flax import nnx
28
28
  from substrax.optim import create_optimizer, OptimizerConfig
29
29
 
30
- from diffbio.utils.training import cross_entropy_loss
30
+ from calibrax.metrics.functional import softmax_cross_entropy
31
31
 
32
32
 
33
33
  # ``features`` may be a single array or an arbitrary pytree of per-sample arrays (each
@@ -140,9 +140,7 @@ def train_minibatch(
140
140
  optimizer = create_optimizer(model, config.optimizer)
141
141
 
142
142
  def loss_fn(module: nnx.Module, batch_features: Any, batch_labels: jnp.ndarray) -> jnp.ndarray:
143
- loss = cross_entropy_loss(
144
- forward_fn(module, batch_features), batch_labels, num_classes=n_classes
145
- )
143
+ loss = softmax_cross_entropy(forward_fn(module, batch_features), batch_labels)
146
144
  if aux_loss_fn is not None:
147
145
  loss = loss + aux_loss_fn(module)
148
146
  return loss
@@ -20,7 +20,6 @@ from diffbio.utils.quality import apply_quality_filter
20
20
  from diffbio.utils.training import (
21
21
  default_training_optimizer,
22
22
  create_synthetic_training_data,
23
- cross_entropy_loss,
24
23
  data_iterator,
25
24
  Trainer,
26
25
  TrainingConfig,
@@ -42,7 +41,6 @@ __all__ = [
42
41
  "TrainingState",
43
42
  "default_training_optimizer",
44
43
  "create_synthetic_training_data",
45
- "cross_entropy_loss",
46
44
  "data_iterator",
47
45
  # Quality utilities
48
46
  "apply_quality_filter",
@@ -12,6 +12,7 @@ from typing import Any, Callable
12
12
  import jax
13
13
  import jax.numpy as jnp
14
14
  from datarax.core.operator import OperatorModule
15
+ from calibrax.metrics.functional import softmax_cross_entropy # noqa: F401 - the docstring example
15
16
  from flax import nnx
16
17
  from jaxtyping import Array, Float
17
18
  from substrax.optim import OptimizerConfig, create_optimizer
@@ -62,26 +63,6 @@ class TrainingState:
62
63
  self.loss_history = []
63
64
 
64
65
 
65
- def cross_entropy_loss(
66
- logits: Float[Array, "... num_classes"],
67
- labels: Float[Array, "..."],
68
- num_classes: int = 3,
69
- ) -> Float[Array, ""]:
70
- """Compute cross-entropy loss for variant classification.
71
-
72
- Args:
73
- logits: Raw model predictions
74
- labels: Integer class labels
75
- num_classes: Number of classes
76
-
77
- Returns:
78
- Scalar loss value
79
- """
80
- one_hot_labels = jax.nn.one_hot(labels.astype(jnp.int32), num_classes)
81
- log_probs = jax.nn.log_softmax(logits, axis=-1)
82
- return -jnp.mean(jnp.sum(one_hot_labels * log_probs, axis=-1))
83
-
84
-
85
66
  class Trainer:
86
67
  """Training loop for DiffBio pipelines using Flax NNX patterns.
87
68
 
@@ -96,10 +77,7 @@ class Trainer:
96
77
  trainer = Trainer(pipeline, TrainingConfig(learning_rate=1e-3))
97
78
  # Define loss function
98
79
  def loss_fn(predictions, targets):
99
- return cross_entropy_loss(
100
- predictions["logits"],
101
- targets["labels"],
102
- )
80
+ return softmax_cross_entropy(predictions["logits"], targets["labels"])
103
81
  # Train
104
82
  trainer.train(data_iterator_fn, loss_fn)
105
83
  trained_pipeline = trainer.pipeline
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes