name: pca
namespace: "dimred"
scope: "public"
description: |
  Computes PCA coordinates, loadings and variance decomposition. Uses the implementation of scikit-learn [Pedregosa11].
authors:
  - __merge__: /src/authors/dries_de_maeyer.yaml
    roles: [ maintainer ]
arguments:
  # inputs
  - name: "--input"
    alternatives: ["-i"]
    type: file
    description: Input h5mu file
    direction: input
    required: true
    example: input.h5mu

  - name: "--modality"
    description: |
      Which modality from the input MuData file to process.
    type: string
    default: "rna"
    required: false

  - name: "--layer"
    type: string
    description: Use specified layer for expression values instead of the .X object from the modality.
    required: false

  - name: "--var_input"
    type: string
    description: Column name in .var matrix that will be used to select which genes to run the PCA on.
    example: filter_with_hvg

  # outputs
  - name: "--output"
    alternatives: ["-o"]
    type: file
    description: Output h5mu file.
    direction: output
    required: true
    example: output.h5mu

  - name: "--obsm_output"
    type: string
    default: "X_pca"
    description: "In which .obsm slot to store the resulting embedding."

  - name: "--varm_output"
    type: string
    default: "pca_loadings"
    description: "In which .varm slot to store the resulting loadings matrix."

  - name: "--uns_output"
    type: string
    default: "pca_variance"
    description: "In which .uns slot to store the resulting variance objects."
  
  # arguments
  - name: "--num_components"
    type: integer
    example: 25
    description: Number of principal components to compute. Defaults to 50, or 1 - minimum dimension size of selected representation.

  - name: "--overwrite"
    type: boolean_true
    description: "Allow overwriting .obsm, .varm and .uns slots."

__merge__: [., /src/base/h5_compression_argument.yaml]

resources:
  - type: python_script
    path: script.py
  - path: /src/utils/setup_logger.py
  - path: /src/utils/compress_h5mu.py
test_resources:
  - type: python_script
    path: test.py
  - path: /resources_test/pbmc_1k_protein_v3

engines:
- type: docker
  image: python:3.12-slim
  setup:
    - type: apt
      packages: 
        - procps
    - type: python
      __merge__: [/src/base/requirements/anndata_mudata.yaml, /src/base/requirements/scanpy.yaml, .]
  test_setup:
    - type: python
      __merge__: [ /src/base/requirements/viashpy.yaml, .]

runners:
- type: executable
- type: nextflow
  directives:
    label: 
      - highcpu
      - highmem
      - middisk
