{
  "access": {
    "embargo": {
      "active": false,
      "reason": null
    },
    "files": "public",
    "record": "public",
    "status": "open"
  },
  "created": "2026-04-24T22:50:41.885268+00:00",
  "custom_fields": {
    "code:codeRepository": "https://github.com/slowkow/harmonypy"
  },
  "deletion_status": {
    "is_deleted": false,
    "status": "P"
  },
  "files": {
    "count": 1,
    "enabled": true,
    "entries": {
      "slowkow/harmonypy-v2.0.0.zip": {
        "access": {
          "hidden": false
        },
        "checksum": "md5:471cb94b329200a68fdf8ae6d18fc0e9",
        "ext": "zip",
        "id": "b72acaf6-48ee-4b1b-beda-e05b4423b26d",
        "key": "slowkow/harmonypy-v2.0.0.zip",
        "links": {
          "content": "https://zenodo.org/api/records/19747319/files/slowkow/harmonypy-v2.0.0.zip/content",
          "self": "https://zenodo.org/api/records/19747319/files/slowkow/harmonypy-v2.0.0.zip"
        },
        "metadata": null,
        "mimetype": "application/zip",
        "size": 93663745,
        "storage_class": "L"
      }
    },
    "order": [],
    "total_bytes": 93663745
  },
  "id": "19747319",
  "is_draft": false,
  "is_published": true,
  "links": {
    "access": "https://zenodo.org/api/records/19747319/access",
    "access_grants": "https://zenodo.org/api/records/19747319/access/grants",
    "access_links": "https://zenodo.org/api/records/19747319/access/links",
    "access_request": "https://zenodo.org/api/records/19747319/access/request",
    "access_users": "https://zenodo.org/api/records/19747319/access/users",
    "archive": "https://zenodo.org/api/records/19747319/files-archive",
    "archive_media": "https://zenodo.org/api/records/19747319/media-files-archive",
    "communities": "https://zenodo.org/api/records/19747319/communities",
    "communities-suggestions": "https://zenodo.org/api/records/19747319/communities-suggestions",
    "doi": "https://doi.org/10.5281/zenodo.19747319",
    "draft": "https://zenodo.org/api/records/19747319/draft",
    "file_modification": "https://zenodo.org/api/records/19747319/file-modification",
    "files": "https://zenodo.org/api/records/19747319/files",
    "latest": "https://zenodo.org/api/records/19747319/versions/latest",
    "latest_html": "https://zenodo.org/records/19747319/latest",
    "media_files": "https://zenodo.org/api/records/19747319/media-files",
    "parent": "https://zenodo.org/api/records/4531400",
    "parent_doi": "https://doi.org/10.5281/zenodo.4531400",
    "parent_doi_html": "https://zenodo.org/doi/10.5281/zenodo.4531400",
    "parent_html": "https://zenodo.org/records/4531400",
    "preview_html": "https://zenodo.org/records/19747319?preview=1",
    "quota_increase": "https://zenodo.org/api/records/19747319/quota-increase",
    "request_deletion": "https://zenodo.org/api/records/19747319/request-deletion",
    "requests": "https://zenodo.org/api/records/19747319/requests",
    "reserve_doi": "https://zenodo.org/api/records/19747319/draft/pids/doi",
    "self": "https://zenodo.org/api/records/19747319",
    "self_doi": "https://doi.org/10.5281/zenodo.19747319",
    "self_doi_html": "https://zenodo.org/doi/10.5281/zenodo.19747319",
    "self_html": "https://zenodo.org/records/19747319",
    "self_iiif_manifest": "https://zenodo.org/api/iiif/record:19747319/manifest",
    "self_iiif_sequence": "https://zenodo.org/api/iiif/record:19747319/sequence/default",
    "versions": "https://zenodo.org/api/records/19747319/versions"
  },
  "media_files": {
    "count": 0,
    "enabled": false,
    "entries": {},
    "order": [],
    "total_bytes": 0
  },
  "metadata": {
    "creators": [
      {
        "affiliations": [
          {
            "name": "Mass General Brigham"
          }
        ],
        "person_or_org": {
          "family_name": "Kamil Slowikowski",
          "name": "Kamil Slowikowski",
          "type": "personal"
        }
      },
      {
        "affiliations": [
          {
            "name": "Broad Institute of MIT and Harvard"
          }
        ],
        "person_or_org": {
          "family_name": "John Arevalo",
          "name": "John Arevalo",
          "type": "personal"
        }
      },
      {
        "affiliations": [
          {
            "name": "Seqera"
          }
        ],
        "person_or_org": {
          "family_name": "Jonathan Manning",
          "name": "Jonathan Manning",
          "type": "personal"
        }
      }
    ],
    "description": "<p>Complete rewrite with C++ backend (<a href=\"https://arma.sourceforge.net/\">Armadillo</a> + <a href=\"https://github.com/wjakob/nanobind\">nanobind</a>), matching the <a href=\"https://github.com/immunogenomics/harmony\">R harmony2 package</a> step-by-step.</p>\n<h3>Highlights</h3>\n<ul>\n<li><strong>~10x faster</strong> than v0.1.0: 858k cells in ~36s on Apple M1 Ultra (vs ~340s previously)</li>\n<li><strong>Matches R harmony2</strong>: correlation \u22650.998 across all PCs</li>\n<li><strong>Minimal dependencies</strong>: only <code>numpy</code> at runtime</li>\n<li><strong>Pre-built wheels</strong> for Linux (x86_64, aarch64) and macOS (x86_64, arm64), Python 3.9\u20133.13</li>\n</ul>\n<h3>New</h3>\n<ul>\n<li>C++ backend with BLAS-accelerated dense matrix ops (Accelerate on macOS, OpenBLAS on Linux)</li>\n<li>Custom scatter/gather kernels replace all sparse matrix operations</li>\n<li>K-means initialization matches R exactly (Gumbel-max cosine-distance sampling)</li>\n<li><code>ncores</code> parameter to control BLAS thread count</li>\n<li><code>batch_prop_cutoff</code> parameter for underrepresented batch handling</li>\n<li>Arrowhead matrix inverse for fast single-covariate correction</li>\n<li>Accepts pandas DataFrame, dict of arrays, or NumPy array for <code>meta_data</code></li>\n<li>C++ progress messages routed through Python <code>logging</code> for proper integration with downstream packages (thanks @yakirr)</li>\n</ul>\n<h3>Breaking changes</h3>\n<ul>\n<li><code>lamb</code> defaults to automatic estimation (was fixed <code>1</code>). Pass <code>lamb=1</code> for old behavior.</li>\n<li>Default parameters changed to match R harmony2: <code>max_iter_kmeans</code> 20\u21924, <code>epsilon_cluster</code> 1e-5\u21921e-3, <code>epsilon_harmony</code> 1e-4\u21921e-2</li>\n<li>Only <code>numpy</code> required at runtime (previously pandas, scipy, scikit-learn)</li>\n</ul>\n<p>See <a href=\"https://github.com/slowkow/harmonypy/blob/master/CHANGELOG.md\">CHANGELOG.md</a> for full details.</p>",
    "publication_date": "2026-04-24",
    "publisher": "Zenodo",
    "related_identifiers": [
      {
        "identifier": "https://github.com/slowkow/harmonypy/tree/v2.0.0",
        "relation_type": {
          "id": "issupplementto",
          "title": {
            "de": "Erg\u00e4nzt",
            "en": "Is supplement to"
          }
        },
        "resource_type": {
          "id": "software",
          "title": {
            "de": "Software",
            "en": "Software"
          }
        },
        "scheme": "url"
      }
    ],
    "resource_type": {
      "id": "software",
      "title": {
        "de": "Software",
        "en": "Software"
      }
    },
    "rights": [
      {
        "description": {
          "en": ""
        },
        "id": "gpl-3.0-only",
        "props": {
          "scheme": "spdx",
          "url": "https://www.gnu.org/licenses/gpl-3.0-standalone.html"
        },
        "title": {
          "en": "GNU General Public License v3.0 only"
        }
      }
    ],
    "title": "slowkow/harmonypy: v2.0.0",
    "version": "v2.0.0"
  },
  "parent": {
    "access": {
      "owned_by": {
        "user": "514"
      },
      "settings": {
        "accept_conditions_text": null,
        "allow_guest_requests": false,
        "allow_user_requests": false,
        "secret_link_expiration": 0
      }
    },
    "communities": {
      "entries": [
        {
          "access": {
            "member_policy": "open",
            "members_visibility": "public",
            "record_submission_policy": "open",
            "review_policy": "open",
            "visibility": "public"
          },
          "children": {
            "allow": false
          },
          "created": "2016-05-05T14:18:41+00:00",
          "custom_fields": {},
          "deletion_status": {
            "is_deleted": false,
            "status": "P"
          },
          "id": "242a92a9-551c-4fd4-a0d5-850b6514313c",
          "links": {},
          "metadata": {
            "curation_policy": "",
            "page": "",
            "title": "RNA-sequencing analyses"
          },
          "revision_id": 0,
          "slug": "rna-sequencing",
          "updated": "2016-05-05T14:55:54+00:00"
        },
        {
          "access": {
            "member_policy": "open",
            "members_visibility": "public",
            "record_submission_policy": "open",
            "review_policy": "open",
            "visibility": "public"
          },
          "children": {
            "allow": false
          },
          "created": "2019-02-21T19:48:43.477275+00:00",
          "custom_fields": {},
          "deletion_status": {
            "is_deleted": false,
            "status": "P"
          },
          "id": "995d6f74-9ef3-411d-9fd4-18fca1c8ffa8",
          "links": {},
          "metadata": {
            "curation_policy": "<p>Curators will contact owners of submitted datasets to make sure that they are linked to pre-print resources (e.g. BioRxiv, etc) and/or to Github code documentation. If you still don&#39;t have a DOI number you can add it later.</p>\r\n",
            "description": "Datasets related to single-cell RNA-sequencing (scRNA-seq) data analysis, (e.g. supporting information of research articles, inputs for Github codes, etc).",
            "page": "",
            "title": "Single-cell RNA-sequencing (scRNA-seq) data analysis"
          },
          "revision_id": 0,
          "slug": "single_cell_rna_seq_analysis",
          "updated": "2019-02-21T19:48:43.477290+00:00"
        }
      ],
      "ids": [
        "242a92a9-551c-4fd4-a0d5-850b6514313c",
        "995d6f74-9ef3-411d-9fd4-18fca1c8ffa8"
      ]
    },
    "id": "4531400",
    "pids": {
      "doi": {
        "client": "datacite",
        "identifier": "10.5281/zenodo.4531400",
        "provider": "datacite"
      }
    }
  },
  "pids": {
    "doi": {
      "client": "datacite",
      "identifier": "10.5281/zenodo.19747319",
      "provider": "datacite"
    },
    "oai": {
      "identifier": "oai:zenodo.org:19747319",
      "provider": "oai"
    }
  },
  "revision_id": 4,
  "stats": {
    "all_versions": {
      "data_volume": 9192967427.0,
      "downloads": 227,
      "unique_downloads": 214,
      "unique_views": 1359,
      "views": 1432
    },
    "this_version": {
      "data_volume": 561982470.0,
      "downloads": 6,
      "unique_downloads": 5,
      "unique_views": 17,
      "views": 17
    }
  },
  "status": "published",
  "swh": {},
  "updated": "2026-04-24T22:50:42.199373+00:00",
  "versions": {
    "index": 11,
    "is_latest": false
  }
}