Metadata-Version: 2.5
Name: geomend
Version: 0.0.9
Summary: Combine GEO metadata tables, review suggested variable mappings, and export data with source and review history
Project-URL: Documentation, https://prestonraab.github.io/geomend/
Project-URL: Repository, https://github.com/prestonraab/geomend
Project-URL: Issues, https://github.com/prestonraab/geomend/issues
License: MIT License
        
        Copyright (c) 2026 Preston Raab
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: GEO,bioinformatics,data curation,metadata harmonization,ontology mapping,schema matching
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Requires-Python: >=3.13
Requires-Dist: bagit<2,>=1.9
Requires-Dist: biopython<2,>=1.85
Requires-Dist: bioregistry<1,>=0.14
Requires-Dist: diskcache<6,>=5.6
Requires-Dist: duckdb<2,>=1.5
Requires-Dist: fastapi<1,>=0.115
Requires-Dist: filelock<4,>=3.16
Requires-Dist: frictionless<6,>=5.18
Requires-Dist: httpx<1,>=0.28
Requires-Dist: huey<3,>=2.5
Requires-Dist: joblib<2,>=1.4
Requires-Dist: linkml-map==0.5.4
Requires-Dist: numpy<3,>=2.1
Requires-Dist: oaklib<1,>=0.6
Requires-Dist: packaging<27,>=24
Requires-Dist: pint<1,>=0.24
Requires-Dist: pooch<2,>=1.9
Requires-Dist: pydantic<3,>=2.12
Requires-Dist: pyyaml<7,>=6.0
Requires-Dist: rapidfuzz<4,>=3.10
Requires-Dist: scikit-learn<2,>=1.5
Requires-Dist: scipy<2,>=1.14
Requires-Dist: sse-starlette<4,>=3.5
Requires-Dist: sssom<1,>=0.4
Requires-Dist: uvicorn<1,>=0.34
Provides-Extra: cohort
Requires-Dist: diskcache<6,>=5.6; extra == 'cohort'
Requires-Dist: duckdb<2,>=1.5; extra == 'cohort'
Requires-Dist: fastapi<1,>=0.115; extra == 'cohort'
Requires-Dist: frictionless<6,>=5.18; extra == 'cohort'
Requires-Dist: httpx<1,>=0.28; extra == 'cohort'
Requires-Dist: huey<3,>=2.5; extra == 'cohort'
Requires-Dist: joblib<2,>=1.4; extra == 'cohort'
Requires-Dist: linkml-map==0.5.4; extra == 'cohort'
Requires-Dist: numpy<3,>=2.1; extra == 'cohort'
Requires-Dist: packaging<27,>=24; extra == 'cohort'
Requires-Dist: pint<1,>=0.24; extra == 'cohort'
Requires-Dist: pooch<2,>=1.9; extra == 'cohort'
Requires-Dist: rapidfuzz<4,>=3.10; extra == 'cohort'
Requires-Dist: scikit-learn<2,>=1.5; extra == 'cohort'
Requires-Dist: scipy<2,>=1.14; extra == 'cohort'
Requires-Dist: sse-starlette<4,>=3.5; extra == 'cohort'
Requires-Dist: uvicorn<1,>=0.34; extra == 'cohort'
Provides-Extra: geo-verify
Requires-Dist: geoparse<3,>=2.0; extra == 'geo-verify'
Requires-Dist: pandas<3,>=2.2; extra == 'geo-verify'
Provides-Extra: learned
Requires-Dist: huggingface-hub<1,>=0.28; extra == 'learned'
Requires-Dist: torch<3,>=2.6; extra == 'learned'
Requires-Dist: transformers<5,>=4.48; extra == 'learned'
Provides-Extra: ontology
Requires-Dist: bioregistry<1,>=0.14; extra == 'ontology'
Requires-Dist: oaklib<1,>=0.6; extra == 'ontology'
Requires-Dist: pooch<2,>=1.9; extra == 'ontology'
Requires-Dist: sssom<1,>=0.4; extra == 'ontology'
Provides-Extra: reconcile
Requires-Dist: biopython<2,>=1.85; extra == 'reconcile'
Requires-Dist: frictionless<6,>=5.18; extra == 'reconcile'
Requires-Dist: httpx<1,>=0.28; extra == 'reconcile'
Requires-Dist: joblib<2,>=1.4; extra == 'reconcile'
Requires-Dist: numpy<3,>=2.1; extra == 'reconcile'
Requires-Dist: packaging<27,>=24; extra == 'reconcile'
Requires-Dist: pint<1,>=0.24; extra == 'reconcile'
Requires-Dist: pooch<2,>=1.9; extra == 'reconcile'
Requires-Dist: rapidfuzz<4,>=3.10; extra == 'reconcile'
Requires-Dist: scikit-learn<2,>=1.5; extra == 'reconcile'
Requires-Dist: scipy<2,>=1.14; extra == 'reconcile'
Provides-Extra: server
Requires-Dist: fastapi<1,>=0.115; extra == 'server'
Requires-Dist: sse-starlette<4,>=3.5; extra == 'server'
Requires-Dist: uvicorn<1,>=0.34; extra == 'server'
Provides-Extra: transform
Requires-Dist: linkml-map==0.5.4; extra == 'transform'
Description-Content-Type: text/markdown

# GEOmend

GEOmend combines metadata from Gene Expression Omnibus (GEO) studies and local
tables into one table for analysis. It suggests which columns describe the same
variable, converts compatible units, and keeps the sources and decisions behind
the result. You can export a first table, then correct the matches that matter
to your analysis.

## Produce a first table

With Python 3.13 or newer:

```bash
python -m pip install geomend
geomend capabilities --json
geomend project create samples-a.tsv samples-b.tsv --project my-project
geomend project exports table my-project --mode best_guess --profile analysis --output metadata.tsv
```

Replace the filenames with CSV/TSV files, local family-SOFT files, or GEO
identifiers such as `GSE5390`. GEO identifiers require an initial metadata download.
The export writes `metadata.tsv`, column descriptions in `metadata.columns.tsv`,
and extra metadata in `metadata.context.tsv`. It keeps one row per study and sample.

`best_guess` can include unreviewed suggestions. Inspect the source evidence for
matches that affect your analysis. Choose `--mode reviewed` to use only reviewed
mappings; project tables still keep their sample rows when reviewed values are blank.
If a run stops, resume with `geomend project inputs run my-project`.

## Find the instructions for your task

| I want to… | Start here |
| --- | --- |
| Try a complete example with local inputs | [Combine metadata and correct a match](docs/project.md) |
| Start with my own data | [GEO accessions](docs/accession-quickstart.md), [CSV/TSV](docs/local-table-quickstart.md), or [family-SOFT](docs/soft-quickstart.md) |
| Check or correct a column grouping | [Candidate selection](docs/project-reference.md#candidates-and-best-guess-in-one-workflow) and [merge suggestions](docs/cohort-merge-suggestions.md) |
| Understand exported columns or reproduce a result | [Project exports](docs/project-exports.md) |
| Get local model suggestions | [Model assistance](docs/model-assistance.md); requires Ollama and an installed model |
| Complete a review assignment | [Reviewer protocol](docs/reviewer-protocol.md) and [worked CLI review](docs/command-line-review.md) |
| Coordinate several reviewers | [Multiple reviewers](docs/workspace-review.md) |
| Require fixed evidence and curated targets before exporting data | [Reconciliation manifest](docs/manifest-reference.md) and [reviewed export](docs/native-review-export.md) |
| Use Python or connect a GUI or agent | [Python example](docs/project.md#use-python) and [client integration](docs/client-integration.md) |
| Recover from an error | [Troubleshooting](docs/troubleshooting.md) |

The [documentation home](docs/index.md) explains which workflow fits your goal.
`geomend project --help` shows command groups; `--expanded-help` shows all options.
Record decisions through the CLI, SDK, or authenticated API. Preserve source metadata
and review records; direct database edits are unsupported.

To build a GUI, notebook workflow, or agent on GEOmend, use the
[client integration guide](docs/client-integration.md),
[project operation reference](docs/project-operations.md), and
[reviewer client contract](docs/reviewer-client-contract.md).
