{
  "canonical_workflow": [
    "find_files",
    "process_images",
    "compute_properties",
    "plot_pca"
  ],
  "documentation": "https://phenome-ecosystem.github.io/PhenoMe",
  "methods": [
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "analyze_group_enrichment",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, group_by: str | list[str] = 'cluster', property_keys: list[str] | None = None, filters: dict[str, typing.Any] | None = None, exclude: dict[str, typing.Any] | None = None, plot: bool = True, return_fig: bool = False, top_k: int | None = None, figsize: tuple[int, int] = (10, 6), title: str | None = None, correct_multiple_testing: bool = True) -> pandas.DataFrame | tuple[pandas.DataFrame, typing.Any]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "checkpoint_context",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, path: str | None = None, lazy_checkpoint: bool = True) -> collections.abc.Generator[typing.Any, None, None]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "clear_temporal_data",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self) -> int"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "compute_clustering",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', n_clusters: int = 5, clustering_method: Literal['kmeans', 'dbscan', 'gmm'] = 'kmeans', property_keys: list[str] | None = None, filters: dict[str, typing.Any | list[typing.Any]] | None = None, exclude: dict[str, typing.Any | list[typing.Any]] | None = None, random_state: int | None = None, normalize: bool = True, reduce_dim: int | None = 100, reduce_method: Literal['pca', 'tsne', 'umap'] = 'pca', return_silhouette: bool = False, dbscan_eps: float | None = None, dbscan_min_samples: int | None = None, include_metadata: bool = False) -> pandas.DataFrame | tuple[pandas.DataFrame, float | None]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "compute_component_correlation",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, method: Literal['pca', 'tsne', 'umap'] = 'pca', n_components: int = 2, source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', property_keys: list[str] | None = None, filters: dict[str, typing.Any] | None = None, exclude: dict[str, typing.Any] | None = None, top_k: int | None = None, normalize: bool = True, correlation_method: Literal['pearson', 'spearman', 'distance_correlation', 'mutual_info'] = 'pearson', plot: bool = True, return_fig: bool = False, figsize: tuple[int, int] = (10, 6)) -> pandas.DataFrame | tuple[pandas.DataFrame, typing.Any]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "compute_embedding_property_correlations",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, property_keys: list[str] | None = None, normalize: bool = True, method: Literal['pearson', 'spearman', 'distance_correlation', 'mutual_info'] = 'pearson', n_jobs: int = 1) -> dict[str, numpy.ndarray]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "compute_multivariate_interpretability",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, method: Literal['pca', 'tsne', 'umap'] = 'tsne', component: int = 1, model_type: Literal['lasso', 'random_forest'] = 'lasso', property_keys: list[str] | None = None, filters: dict[str, typing.Any] | None = None, exclude: dict[str, typing.Any] | None = None, normalize: bool = True, cv: int = 5, stratify_by: str | None = None, rf_n_estimators: int = 100, seed: int | None = None, plot: bool = True, return_fig: bool = False, return_meta: bool = False, top_k: int = 10, figsize: tuple[int, int] = (10, 8)) -> pandas.DataFrame | tuple[pandas.DataFrame, dict[str, typing.Any]] | tuple[pandas.DataFrame, typing.Any] | tuple[pandas.DataFrame, dict[str, typing.Any], typing.Any]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "compute_properties",
      "purpose": "Calculate classical image properties.",
      "signature": "(self, metadata_config: typing.Any | None = None, property_preset: str | None = None, additional_property_functions: dict[str, collections.abc.Callable | list[collections.abc.Callable]] | None = None, checkpoint_path: str | None = None, save_every: int = 50, n_jobs: int = 1, lazy_checkpoint: bool = True, force_update: bool = False, include_metadata: bool = False, progress_callback: collections.abc.Callable[[int, int, str], None] | None = None) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "compute_reference_distances",
      "purpose": "Compare samples with a reference group.",
      "signature": "(self, reference_filters: dict[str, typing.Any], filters: dict[str, typing.Any | list[typing.Any]] | None = None, exclude: dict[str, typing.Any | list[typing.Any]] | None = None, source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', mode: Literal['centroid', 'nearest'] = 'centroid', distance_type: Literal['euclidean', 'cosine'] = 'euclidean', property_keys: list[str] | None = None, group_by: str | list[str] | None = None, dist_range: tuple[float, float] = (0.0, 100.0), figsize: tuple[int, int] = (10, 6), plot: bool = True, return_fig: bool = False, return_meta: bool = False, include_metadata: bool = False, points: Optional[Literal['all', 'outliers', False]] = None) -> pandas.DataFrame | tuple[pandas.DataFrame, dict[str, typing.Any]] | tuple[pandas.DataFrame, typing.Any] | tuple[pandas.DataFrame, dict[str, typing.Any], typing.Any]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "correct_batches",
      "purpose": "Correct technical variation between batches or plates.",
      "signature": "(self, batch_metadata_key: 'str', method: 'MethodName' = 'sphering', source: 'SourceName' = 'embeddings', property_keys: 'list[str] | None' = None, control_filters: 'dict[str, Any] | None' = None, inplace: 'bool' = True, checkpoint_path: 'str | None' = None, chunk_size: 'int' = 4096, force: 'bool' = False, ridge_multiplier: 'float' = 0.001, min_controls: 'int' = 2) -> 'dict[str, Any]'"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "create_colab_interactive_explorer",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, filters: dict | None = None, exclude: dict | None = None) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "create_interactive_explorer",
      "purpose": "Open an interactive plot of the current results.",
      "signature": "(self, filters: dict | None = None, exclude: dict | None = None, hover_features: list[str] | None = None) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "detect_outliers",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, method: Literal['z-score', 'iqr'] = 'z-score', threshold: float = 3.0, group_by: str | list[str] | None = None, filters: dict[str, typing.Any] | None = None, exclude: dict[str, typing.Any] | None = None, source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', property_keys: list[str] | None = None, normalize: bool = True, drop_outliers: bool = False, plot: bool = True) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "export_dataset_table",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, output_path: str | None = None, dist_results: pandas.DataFrame | None = None, include_embeddings: Union[bool, Literal['separate']] = False, export_format: Literal['csv', 'parquet', 'excel'] = 'csv') -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "export_experiment_config",
      "purpose": "Export reproducibility settings as JSON.",
      "signature": "(self, path: str, reference_filters: dict[str, typing.Any] | None = None, model_name: str | None = None, checkpoint_path: str | None = None, **extra: Any) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "export_methods_markdown",
      "purpose": "Write a Markdown methods summary when the user asked for that file.",
      "signature": "(self, path: str) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "find_files",
      "purpose": "Discover image files, masks, and metadata.",
      "signature": "(self, image_dir: str, mask_dir: str | None = None, extensions: list[str] | None = None, metadata_fn: collections.abc.Callable[[str], dict[str, typing.Any]] | phenome.metadata.base.MetadataBase | None = None, on_missing_metadata: str = 'drop', mask_filename_column: str | None = None, mask_extensions: list[str] | None = None, channel_names: list[str] | None = None) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "find_prototypes",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, cluster_col: str | list[str] | None = 'cluster', n_prototypes: int = 5, source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', property_keys: list[str] | None = None, filters: dict[str, typing.Any] | None = None, exclude: dict[str, typing.Any] | None = None, metric: str = 'euclidean', normalize: bool = True, plot: bool = True) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "generate_report",
      "purpose": "Generate a standalone HTML report.",
      "signature": "(self, output_path: str = 'pheno_report.html', title: str = 'PhenoMe Analysis Report', config: typing.Any | None = None, **overrides: Any) -> str"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "get_available_metadata_keys",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self) -> list[str]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "get_available_property_keys",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self) -> list[str]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "get_embeddings",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, indices: int | list[int] | numpy.ndarray | None = None) -> numpy.ndarray | None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "get_image_info",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, idx: int, distance_results: pandas.DataFrame | None = None) -> dict"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "get_processing_pipeline",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self) -> dict[str, typing.Any] | None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "get_run_settings",
      "purpose": "Return the run as a dict. Does not write a file.",
      "signature": "(self) -> dict[str, typing.Any]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "image_preview_png_bytes",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, idx: int, distance_results: pandas.DataFrame | None = None, channels: int | list | None = None, title_fields: list[str] | None = None, show_extra_info: bool = False, apply_transforms: bool = True, downsample: int | None = 720) -> tuple[bytes, str | None, str | None]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "inspect_data",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "load_embeddings",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, path: str | None = None, lazy_checkpoint: bool = True) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "load_properties",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, path: str | None = None, lazy_checkpoint: bool = True) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "load_results",
      "purpose": "Load results from an HDF5 checkpoint after file discovery.",
      "signature": "(self, path: str | None = None, lazy_checkpoint: bool = True) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "plot_centroids",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, group_by: str | list[str], method: Literal['pca', 'tsne', 'umap'] = 'pca', n_components: int = 2, filters: dict[str, typing.Any | list[typing.Any]] | None = None, exclude: dict[str, typing.Any | list[typing.Any]] | None = None, source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', property_keys: list[str] | None = None, show_points: bool = True, show_centroids: bool = True, figsize: tuple[int, int] = (10, 8), return_fig: bool = False, normalize: bool = True, **dr_kwargs: Any) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "plot_counts",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, group_by: list[str] | None = None, return_fig: bool = False, plot: bool = True) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "plot_image_by_index",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, idx: int | collections.abc.Sequence[int], distance_results: pandas.DataFrame | None = None, channels: int | list | None = None, figsize: tuple = (6, 6), title_fields: list[str] | None = None, show_extra_info: bool = True, apply_transforms: bool = False, downsample: int | None = 720, ax: Any = None, return_fig: bool = False, show_mask_overlay: bool = False) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "plot_pca",
      "purpose": "Plot a PCA projection of embeddings or features.",
      "signature": "(self, n_components: int = 2, color_by: str | None = None, figsize: tuple[int, int] = (10, 8), source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', property_keys: list[str] | None = None, filters: dict[str, typing.Any | list[typing.Any]] | None = None, exclude: dict[str, typing.Any | list[typing.Any]] | None = None, hover_features: list[str] | None = None, return_fig: bool = False, render_mode: Literal['auto', 'svg', 'webgl'] = 'webgl', normalize: bool = True, sample_size: int | None = None, **dr_kwargs: Any) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "plot_tsne",
      "purpose": "Plot a t-SNE projection of embeddings or features.",
      "signature": "(self, n_components: int = 2, perplexity: float = 30.0, color_by: str | None = None, figsize: tuple[int, int] = (10, 8), source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', property_keys: list[str] | None = None, filters: dict[str, typing.Any | list[typing.Any]] | None = None, exclude: dict[str, typing.Any | list[typing.Any]] | None = None, hover_features: list[str] | None = None, return_fig: bool = False, render_mode: Literal['auto', 'svg', 'webgl'] = 'webgl', normalize: bool = True, sample_size: int | None = None, **dr_kwargs: Any) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "plot_umap",
      "purpose": "Plot a UMAP projection of embeddings or features.",
      "signature": "(self, n_components: int = 2, n_neighbors: int = 15, min_dist: float = 0.1, color_by: str | None = None, figsize: tuple[int, int] = (10, 8), source: Literal['embeddings', 'properties', 'combined'] = 'embeddings', property_keys: list[str] | None = None, filters: dict[str, typing.Any | list[typing.Any]] | None = None, exclude: dict[str, typing.Any | list[typing.Any]] | None = None, hover_features: list[str] | None = None, return_fig: bool = False, render_mode: Literal['auto', 'svg', 'webgl'] = 'webgl', normalize: bool = True, sample_size: int | None = None, **dr_kwargs: Any) -> Any"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "print_distance_summary",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, distance_results: pandas.DataFrame, group_by: str | None = None, dist_range: tuple = (0, 100)) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "print_processing_pipeline",
      "purpose": "Print the recorded processing steps as text.",
      "signature": "(self) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "process_images",
      "purpose": "Extract model embeddings from discovered images.",
      "signature": "(self, model_wrapper: phenome.utils.model_wrapper.ModelWrapper, batch_size: int = 32, num_workers: int = 4, filters: dict[str, list[typing.Any]] | None = None, exclude: dict[str, list[typing.Any]] | None = None, channel_mode: Literal['split', 'combined'] = 'split', channels: list[int] | None = None, preprocessing_fn: collections.abc.Callable[[numpy.ndarray], numpy.ndarray] | None = None, custom_transformations: typing.Any | None = None, preprocessing_description: str | None = None, transformations_description: str | None = None, append: bool = False, resize_size: int | tuple[int, int] | None = 224, pad_size: int | tuple[int, int] | None = None, checkpoint_path: str | None = None, force_rgb: bool = True, l2_normalize_channels: bool = True, save_every: int = 5, lazy_checkpoint: bool = True, force_reprocess: bool = False, progress_callback: collections.abc.Callable[[int, int, str], None] | None = None) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "process_temporal_images",
      "purpose": "Add new images temporarily to an existing analysis.",
      "signature": "(self, model_wrapper: phenome.utils.model_wrapper.ModelWrapper, files: str | list[str] | pandas.DataFrame, batch_size: int = 32, num_workers: int = 4, channel_mode: Optional[Literal['split', 'combined']] = None, channels: list[int] | None = None, preprocessing_fn: collections.abc.Callable[[numpy.ndarray], numpy.ndarray] | None = None, custom_transformations: typing.Any | None = None, preprocessing_description: str | None = None, transformations_description: str | None = None, resize_size: int | tuple[int, int] | None = None, pad_size: int | tuple[int, int] | None = None, force_rgb: bool | None = None, l2_normalize_channels: bool | None = None, extensions: list[str] | None = None) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "property_stats_by_group",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, group_by: list[str] | None = None, properties: list[str] | None = None, *, print_table: bool = True, print_properties: list[str] | None = None, group_column_width_max: int = 25, content_col_width_max: int = 25) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "reset",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, verbose: bool = False, clear_file_df: bool = False) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "reset_properties",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, verbose: bool = False) -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "save_results",
      "purpose": "Save results to an HDF5 checkpoint.",
      "signature": "(self, path: str | None = None, compression: str = 'gzip') -> None"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "set_file_df",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, file_df: pandas.DataFrame, channel_names: list[str] | None = None) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "summarize_embedding_property_correlations",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, correlations: dict[str, numpy.ndarray], order_by: str = 'mean_abs', top_k: int | None = 20, plot: bool = True, return_fig: bool = False, figsize: tuple[int, int] = (10, 8), title: str = 'Property Correlations with Embeddings', embedding_shape: tuple[int, int] | None = None, n_properties: int | None = None, correlation_method: str = 'pearson') -> pandas.DataFrame | tuple[pandas.DataFrame, typing.Any | None]"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "top_properties_different_from_reference",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, df: pandas.DataFrame, reference_group: dict[str, typing.Any], k: int = 5, properties: list[str] | None = None, metric: Literal['cohens_d', 'mean_diff'] = 'cohens_d', print_output: bool = True, group_column_width_max: int = 25, top_property_col_width_max: int = 25, top_effect_col_width_min: int = 12) -> pandas.DataFrame"
    },
    {
      "class": "PhenoMe",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/function-location-guide/",
      "name": "transfer_metadata_to_properties",
      "purpose": "Public PhenoMe pipeline method.",
      "signature": "(self, columns: str | list[str]) -> None"
    }
  ],
  "package": "phenome",
  "project": "PhenoMe",
  "public_imports": {
    "DataFrameMetadata": "phenome.DataFrameMetadata",
    "DefaultMetadata": "phenome.DefaultMetadata",
    "MetadataBase": "phenome.MetadataBase",
    "PathTemplateMetadata": "phenome.PathTemplateMetadata",
    "PhenoMe": "phenome.PhenoMe",
    "PhenoMeResults": "phenome.PhenoMeResults",
    "create_blur_effect_function": "phenome.create_blur_effect_function",
    "create_concentric_ring_function": "phenome.create_concentric_ring_function",
    "create_entropy_function": "phenome.create_entropy_function",
    "create_intensity_function": "phenome.create_intensity_function",
    "create_masked_intensity_function": "phenome.create_masked_intensity_function",
    "create_regionprops_function": "phenome.create_regionprops_function",
    "create_texture_function": "phenome.create_texture_function",
    "default_metadata_from_path": "phenome.default_metadata_from_path",
    "get_metadata_from_path": "phenome.get_metadata_from_path",
    "get_preset_property_functions": "phenome.get_preset_property_functions",
    "load_dinov2_model": "phenome.load_dinov2_model",
    "make_dataframe_metadata_fn": "phenome.make_dataframe_metadata_fn"
  },
  "recipes": {
    "batch-correction": {
      "methods": [
        "correct_batches"
      ],
      "purpose": "Correct plate or batch effects using controls.",
      "requires": [
        "batch and control metadata"
      ]
    },
    "checkpoint": {
      "methods": [
        "process_images",
        "find_files",
        "load_results"
      ],
      "purpose": "Checkpoint and reload large analyses.",
      "requires": [
        "HDF5 checkpoint path"
      ]
    },
    "export-settings": {
      "methods": [
        "save_results",
        "export_experiment_config",
        "generate_report"
      ],
      "purpose": "Save the HDF5 results, plus any settings or report file the user asked to keep.",
      "requires": [
        "completed PhenoMe run"
      ]
    },
    "first-analysis": {
      "methods": [
        "find_files",
        "process_images",
        "compute_properties",
        "plot_pca"
      ],
      "purpose": "Run the standard embedding and visualization workflow.",
      "requires": [
        "image directory"
      ]
    },
    "path-metadata": {
      "methods": [
        "find_files",
        "get_metadata_from_path"
      ],
      "purpose": "Extract metadata from folder paths.",
      "requires": [
        "path template"
      ]
    },
    "property-presets": {
      "methods": [
        "compute_properties"
      ],
      "purpose": "Compute a named classical-property preset.",
      "requires": [
        "masks for shape-based presets"
      ]
    },
    "summarize": {
      "methods": [
        "plot_pca",
        "get_run_settings",
        "print_processing_pipeline"
      ],
      "purpose": "Read the analysis in memory so an assistant can summarize it.",
      "requires": [
        "completed PhenoMe run"
      ]
    }
  },
  "troubleshooting": [
    {
      "cause": "Shape-based properties require masks.",
      "code": "MISSING_MASKS",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/guides/experiment-details/mask-discovery/",
      "pattern": "mask|shape",
      "solution": "Pass mask_dir to find_files or use property_preset='intensity'."
    },
    {
      "cause": "The requested metadata key is not in the discovered dataset.",
      "code": "MISSING_METADATA_KEY",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/guides/data-setup/",
      "pattern": "metadata|color_by|batch_metadata_key",
      "solution": "Call get_available_metadata_keys() and use an existing key."
    },
    {
      "cause": "The dataset must be discovered before embeddings are processed.",
      "code": "PROCESSING_ORDER",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/workflows/",
      "pattern": "find_files|process_images|before",
      "solution": "Call find_files(), then process_images()."
    },
    {
      "cause": "Checkpoint rows must be aligned with the current file discovery.",
      "code": "CHECKPOINT_ORDER",
      "documentation": "https://phenome-ecosystem.github.io/PhenoMe/guides/using-with-llms/",
      "pattern": "load_results|checkpoint",
      "solution": "Call find_files() before load_results()."
    }
  ],
  "version": "1.5.3"
}
