Merge main into cellpack-analysis#472
Conversation
* default upload_results to false * update config file options * update schema docs * propose to remove config files from the packing commands but add a section to explain how configs work * set open_results_in_browser to false since it's dependent on upload_results * improve loggings * add a config file for upload results * correct option default and log level * update schema * add aws db to path * add a layer to detect non-interactive envs for db selection * fix readme * add cellpack website url * remove unnecessary restriction * update readme * add screenshots to readme (#413) * add screenshots to readme * Quick fix: update bbox value in recipes (#420) * add randomness_seed to upload and download (#416) * update bbox value in recipes * add config option for plot display * replace result screenshots and update readme * update docs/index to display images correctly
* add `description` and `randomness_seed` to top level recipe settings * add description in example recipes * add description to download and upload script * add description field to unit tests
* test github cli * remove test branch
* set camera * use max dimension
* add upload script * add example data and more documentation * point to correct collection * return firebase IDs from upload_recipe adn upload_config * add documentation * add installation step * lint fixes * lint fix * fix typos * keep all upload functionality in upload.py, and rename client to studio * remove accidential line * update example editable fields to match updates we've done * add output param * lint fixes * small wording fixes * make config_path optional
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 4 to 7. - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](astral-sh/setup-uv@v4...v7) --- updated-dependencies: - dependency-name: astral-sh/setup-uv dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* use gh api instead of gh pr review * remove backslashes * trigger workflow to test comment update * use patch instead of delete * take2-trigger workflow to test comment update * use an actual new line to avoid \n being treated as literal chars
* add recipe and config to output * refactor * path guard * Potential fix for code scanning alert no. 21: Uncontrolled data used in path expression Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * format * fix 404 comment * handle firebase recipe, serialize it before passing to s3 * save recipe data directly to outputs * remove unused import * one more unused import --------- Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v4...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Add gradient weights to Environment.py and Gradient.py * Remove unused import * Refactor Environment.py and utils.py This commit refactors the `Environment.py` file by separating the loading of grid, compartment grids, and mesh store into separate loops. It also clears the triangles_tree cache and resets the grid. Additionally, the `load_object_from_pickle` function has been removed from `utils.py` as it is no longer used. * Ignore venv folders * Update logging level * Update `aicsimageio` to `bioio` - Also update the logging of recipe validation to `debug` * Suppress logging outputs for lower level functions * Update logs in `ImageWriter.py` * Update path preference loading to catch empty json * Update logging for recipe validation * sort imports * Update uv lock * Allow gradient weights to be specified as a dict while combining * Add uniform weight map option * Fix gradient weight scaling for equal weights * Update scaling to just divide by max value * Add recipe to test gradients * Rename scaling method to normalize_by_max_value and update references * Use uniform weight if `decay_length` is 0 * Linting updates * Update validation for decay length * Update validation for multiple gradients * Add zero decay gradient in test recipe
#447) * ci(dependabot): bump aws-actions/configure-aws-credentials from 4 to 5 Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 4 to 5. - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](aws-actions/configure-aws-credentials@v4...v5) --- updated-dependencies: - dependency-name: aws-actions/configure-aws-credentials dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * matching the regular pr format * trigger codeQL --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ruge Li <rugeli0605@gmail.com>
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](peter-evans/create-pull-request@v7...v8) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* update UV setup to version 7 * update Dependabot configuration * remove unnecessary permissions for open-PR job in make-requirements.yml * Make timestamp unique using the run ID * Avoid expanding the WORKFLOW_PAT
Bumps the actions group with 4 updates: [actions/checkout](https://github.com/actions/checkout), [actions/upload-artifact](https://github.com/actions/upload-artifact), [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) and [actions/download-artifact](https://github.com/actions/download-artifact). Updates `actions/checkout` from 4 to 6 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) Updates `actions/upload-artifact` from 6 to 7 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v6...v7) Updates `aws-actions/configure-aws-credentials` from 5 to 6 - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](aws-actions/configure-aws-credentials@v5...v6) Updates `actions/download-artifact` from 6 to 8 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v6...v8) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: aws-actions/configure-aws-credentials dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Upgrading dependencies * Update black target version * Formatting via `uv run black cellpack`
…in` (#458) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* add upload script * add example data and more documentation * point to correct collection * have server accept recipe as json object in body of request * update documentation * remove accidential dockerfile changes * rename param json_recipe * remove file that shouldn't be in this PR * remove accidential file * lint fixes * refactor to try to improve clarity of json recipe vs file path * lint fixes * lint fix * minimize changeset * minimize changeset * simplify changeset * code cleanup * minimize changeset * remove trailing comma * Feature/firebase lookup (#445) * remove os fetch for job_id * use dedup_hash instead of job id * proposal: get hash from recipe loader * renaming and add TODOs * format * rename param to hash * remove unused validate param and doc strings in pack * simplify get_ dedup_hash * refactor job_status update * cleanup * fix upload_job_status to handle awshandler * pass dedup_pash to env for fetching across files * add tests * format1 * format test * Only upload simularium file once (#446) * proposal: get hash from recipe loader * simplify get_ dedup_hash * only post simularium results file once for server job runs * update code for rebase * code cleanup --------- Co-authored-by: Ruge Li <rugeli0605@gmail.com> * Maint/firebase collection cleanup (#448) * remove local metadata writes for auto-pop feature * remove cleanup firebase workflow * remove cleanup firebase code * 1. make doc url a constant 2.remove unused param * handle both recipe_path and json body requests (#449) * change error message body * lint fixes * add more checks when attempting to read json body * add upload script * add example data and more documentation * point to correct collection * have server accept recipe as json object in body of request * update documentation * remove accidential dockerfile changes * rename param json_recipe * remove file that shouldn't be in this PR * remove accidential file * lint fixes * refactor to try to improve clarity of json recipe vs file path * lint fixes * lint fix * minimize changeset * minimize changeset * simplify changeset * code cleanup * minimize changeset * remove trailing comma * Feature/firebase lookup (#445) * remove os fetch for job_id * use dedup_hash instead of job id * proposal: get hash from recipe loader * renaming and add TODOs * format * rename param to hash * remove unused validate param and doc strings in pack * simplify get_ dedup_hash * refactor job_status update * cleanup * fix upload_job_status to handle awshandler * pass dedup_pash to env for fetching across files * add tests * format1 * format test * Only upload simularium file once (#446) * proposal: get hash from recipe loader * simplify get_ dedup_hash * only post simularium results file once for server job runs * update code for rebase * code cleanup --------- Co-authored-by: Ruge Li <rugeli0605@gmail.com> * Maint/firebase collection cleanup (#448) * remove local metadata writes for auto-pop feature * remove cleanup firebase workflow * remove cleanup firebase code * 1. make doc url a constant 2.remove unused param * handle both recipe_path and json body requests (#449) * change error message body * lint fixes * add more checks when attempting to read json body * let recipe loader check the input and key stripping * Update cellpack/autopack/writers/__init__.py Co-authored-by: Saurabh Mogre <saurabh.mogre@alleninstitute.org> * use `isinstance` for AWSHandler, and misc * update aws tests * initialize dedup_hash * add in-line comment * temp solution: use requirement.txt --------- Co-authored-by: Ruge Li <91452427+rugeli@users.noreply.github.com> Co-authored-by: Ruge Li <rugeli0605@gmail.com> Co-authored-by: Saurabh Mogre <saurabh.mogre@alleninstitute.org>
…tes (#466) Bumps the actions group with 4 updates in the / directory: [actions/configure-pages](https://github.com/actions/configure-pages), [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact), [actions/deploy-pages](https://github.com/actions/deploy-pages) and [codecov/codecov-action](https://github.com/codecov/codecov-action). Updates `actions/configure-pages` from 5 to 6 - [Release notes](https://github.com/actions/configure-pages/releases) - [Commits](actions/configure-pages@v5...v6) Updates `actions/upload-pages-artifact` from 4 to 5 - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](actions/upload-pages-artifact@v4...v5) Updates `actions/deploy-pages` from 4 to 5 - [Release notes](https://github.com/actions/deploy-pages/releases) - [Commits](actions/deploy-pages@v4...v5) Updates `codecov/codecov-action` from 5 to 6 - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](codecov/codecov-action@v5...v6) --- updated-dependencies: - dependency-name: actions/configure-pages dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/upload-pages-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/deploy-pages dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: codecov/codecov-action dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* normalize data order before hashing and tests * test pack cli * refactor test file: use tmp_path instead of writing to a working dir * cleanup * formatting * add recipe fixture
* we only support recipe as JSON body now, remove support for reading recipe file path from URL * update documentation to use new communication protocol and strip out references to AWS batch * remove unused import
* remove requirements.txt related code * update pyproject.toml * generate new uv file * update pip install for dockerfile * use uv sync * move server dep list under dependency-groups * update docker * fix path and use uv sync * add pydantic to pyproject toml * update lock file
* update migration script and validation * add v2 blood plasma recipe
Bumps the actions group with 1 update: [actions/add-to-project](https://github.com/actions/add-to-project). Updates `actions/add-to-project` from 1.0.2 to 2.0.0 - [Release notes](https://github.com/actions/add-to-project/releases) - [Commits](actions/add-to-project@v1.0.2...v2.0.0) --- updated-dependencies: - dependency-name: actions/add-to-project dependency-version: 2.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ified gradients (#470) * Add recipe and config to test gradient mixing in peroxisome data * normalize grad in early process * add tests --------- Co-authored-by: mogres <saurabh.mogre@alleninstitute.org>
Reconcile 25 commits from main into the cellpack-analysis fork, resolving 4 conflicts + 1 silent auto-merge while preserving downstream-observable packing behavior (gradient math + output file naming). Resolutions: - Gradient.py: keep analysis behavior (probability-mixing combine_gradients, use_real_distances/decay-length validation) — byte-identical to f8b5500, the commit the downstream cellpack-analysis repo pins to. - recipe_models.py / validation: keep the coherent analysis validation layout (defaults in interface_objects); redirect two stale main-authored imports of DEFAULT_GRADIENT_MODE_SETTINGS to interface_objects to fix a silent ImportError the naive merge would have produced. - recipe_loader.py: take main's refactor (recipe-JSON support, _normalize_gradients, serializable_recipe_data); drop the redundant analysis GradientData block. - config_loader.py: take both (number_of_processes rename + main defaults), then restore upload_results/open_results_in_browser defaults to True to match the downstream baseline; add a backward-compat shim mapping legacy `parallel`. - writers/__init__.py: keep analysis result-file naming (downstream globs results_*.simularium); layer in main's dedup_hash plumbing. - deps: bioio (analysis) + requirements.txt deprecation (main) auto-merged cleanly. Verified: 93 non-AWS tests pass; import smoke test clean; end-to-end gradient pack produces results_<recipe>_<config>_<version>_seed_<n>.simularium naming. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a DEBUG-level log of which cellpack package pack.py imported (autopack path), so it is easy to confirm whether a run used an installed/pinned cellpack vs a checked-out branch when debugging. Kept at DEBUG so normal packing output is unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
We need to evaluate whether to keep maintaining this fork as a separate entity or if it makes sense to integrate into the current version of cellpack. Right now, this fork is used in mesoscope/cellpack-analysis as a pinned commit. |
There was a problem hiding this comment.
Pull request overview
This PR merges main into the long-lived cellpack-analysis branch, bringing in upstream infrastructure changes (uv/pyproject-based deps, recipe-JSON server support, dedup hashing, docs updates, and related refactors) while aiming to preserve downstream packing behavior (notably multi-gradient combination behavior).
Changes:
- Deprecate exported
requirements/**/requirements.txtin favor ofpyproject.toml/uv, and update docs + Docker build accordingly. - Add server-side recipe submission via JSON body + dedup hashing to avoid redundant packings, and plumb dedup identifiers through result upload paths.
- Expand recipe/config/docs schema support (
description,randomness_seed) and add/adjust tests to cover the new loader + hashing behaviors.
Reviewed changes
Copilot reviewed 70 out of 77 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| requirements/windows/requirements.txt | Removed autogenerated platform requirements export (uv/pyproject flow). |
| requirements/macos/requirements.txt | Removed autogenerated platform requirements export (uv/pyproject flow). |
| requirements/linux/requirements.txt | Removed autogenerated platform requirements export (uv/pyproject flow). |
| README.md | Updates install instructions and expands recipe usage/docs pointers. |
| pyproject.toml | Adds dependencies/extras and removes requirements from packaged sources; tweaks Black config. |
| examples/recipes/v2/spheres_in_a_box.json | Adds recipe metadata (description). |
| examples/recipes/v2/peroxisome.json | Adds recipe metadata (description). |
| examples/recipes/v2/one_sphere.json | Updates example bounding box + radius values. |
| examples/recipes/v2/golgi_endosome.json | Adds recipe metadata (description). |
| examples/recipes/v2/er_peroxisome.json | Adds recipe metadata (description). |
| examples/recipes/v2/endosome.json | Adds recipe metadata (description). |
| examples/recipes/v2/BloodPlasma-no-HIV_fv2.1.json | Adds a new v2.1 example recipe. |
| examples/packing-configs/upload_and_open_result.json | Adds example config enabling upload + browser open. |
| examples/client-data/example_editable_fields.json | Adds example “editable fields” schema for Studio integration. |
| docs/STUDIO_SITE.md | Adds documentation for Studio site and publishing workflow. |
| docs/RECIPE_SCHEMA.md | Documents new top-level recipe fields (description, randomness_seed). |
| docs/INSTALLATION.md | Updates clone instructions to mesoscope/cellpack. |
| docs/index.md | Adjusts README include settings for docs build. |
| docs/DOCKER.md | Updates Docker docs to focus on ECS/server usage. |
| docs/CONTRIBUTING.md | Updates contributing instructions to use uv sync. |
| docs/CONFIG_SCHEMA.md | Updates config schema docs (but currently mismatches actual defaults). |
| docker/server.py | Switches packing endpoint to accept JSON body; adds dedup hashing + job status updates. |
| docker/entrypoint-batch.sh | Removes legacy batch entrypoint script. |
| docker/Dockerfile.ecs | Switches Docker build to uv sync with a server dependency group. |
| docker/Dockerfile.batch | Removes legacy batch Dockerfile. |
| cellpack/tests/test_recipe_version_migration.py | Updates RecipeLoader call sites for new signature. |
| cellpack/tests/test_recipe_loader.py | Adds tests for gradient normalization defaults + imports default settings. |
| cellpack/tests/test_partners.py | Minor formatting tweak (blank line). |
| cellpack/tests/test_pack_cli.py | Adds integration tests for pack() with recipe dict input + default config behavior. |
| cellpack/tests/test_gradient_data.py | Minor formatting tweak (blank line). |
| cellpack/tests/test_db_uploader.py | Extends uploader tests (description + job status updates). |
| cellpack/tests/test_db_recipe_loader.py | Extends DB recipe loader test data (description). |
| cellpack/tests/test_data_doc.py | Adds hash stability tests across key/list ordering rules. |
| cellpack/tests/test_aws_handler.py | Fixes tests to avoid writing into CWD by using tmp_path. |
| cellpack/tests/recipes/v2/test_peroxisome_combined_gradient.json | Adds a combined-gradient fixture recipe. |
| cellpack/tests/packing-configs/test_gradient_mixing.json | Adds a config fixture for gradient mixing tests. |
| cellpack/bin/upload.py | Extends upload CLI for Studio metadata + result upload + description propagation. |
| cellpack/bin/simularium_converter.py | Changes camera Z heuristic for converted trajectories. |
| cellpack/bin/pack.py | Allows recipe dict input; plumbs dedup hash into env + upload workflow. |
| cellpack/bin/cleanup_tasks.py | Removes Firebase cleanup task script. |
| cellpack/autopack/writers/init.py | Threads dedup hash into upload/open behavior. |
| cellpack/autopack/validation/recipe_models.py | Adds description/randomness_seed, allows float priority, removes gradient-combination validator. |
| cellpack/autopack/upy/simularium/simularium_helper.py | Refactors result upload/open; simplifies AWS upload; updates camera heuristic. |
| cellpack/autopack/upy/hostHelper.py | Minor formatting tweak (blank line). |
| cellpack/autopack/transformation.py | Minor formatting tweak (blank line). |
| cellpack/autopack/Serializable.py | Minor formatting tweak (blank line). |
| cellpack/autopack/MeshStore.py | Minor tuple unpacking style changes. |
| cellpack/autopack/loaders/recipe_loader.py | Accepts dict recipes; normalizes gradients + saves serializable snapshot. |
| cellpack/autopack/loaders/migrate_v1_to_v2.py | Normalizes v1 color values to 0–1 range when needed. |
| cellpack/autopack/loaders/config_loader.py | Adds legacy key migration (parallel → number_of_processes). |
| cellpack/autopack/IOutils.py | Minor formatting tweak (blank line). |
| cellpack/autopack/interface_objects/default_values.py | Removes results from firebase collection allow-list. |
| cellpack/autopack/interface_objects/database_ids.py | Adjusts AWS handler factory signature defaults. |
| cellpack/autopack/interface_objects/init.py | Minor formatting tweak (blank line). |
| cellpack/autopack/ingredient/Ingredient.py | Minor tuple unpacking style changes. |
| cellpack/autopack/GeometryTools.py | Minor formatting tweak (blank line). |
| cellpack/autopack/FirebaseHandler.py | Defaults to staging DB in non-interactive environments. |
| cellpack/autopack/Environment.py | Adds dedup_hash attribute to env. |
| cellpack/autopack/DBRecipeHandler.py | Adds dedup-hash normalization + job status + output upload workflow changes; removes DBMaintenance. |
| cellpack/autopack/BaseGrid.py | Minor formatting tweak (blank line). |
| cellpack/autopack/AWSHandler.py | Switches credential warning from print() to logging. |
| cellpack/autopack/Analysis.py | Minor formatting tweak (blank line). |
| cellpack/autopack/init.py | Adds AWS to server URL map; improves remote-db error message. |
| .github/workflows/make-requirements.yml | Removes workflow that generated platform requirements exports. |
| .github/workflows/cleanup-firebase.yml | Removes Firebase cleanup workflow. |
| .github/workflows/cleanup-aws.yml | Updates GitHub Actions versions. |
| .github/workflows/ci.yml | Updates GitHub Actions versions (checkout/codecov). |
| .github/workflows/cache-dependencies.yml | Updates GitHub Actions versions (checkout). |
| .github/workflows/build-docs.yml | Updates GitHub Actions versions (checkout/pages). |
| .github/workflows/analyze.yml | Updates action versions and switches PR commenting to gh CLI. |
| .github/workflows/add-issue-to-project.yml | Updates actions/add-to-project version. |
| .github/dependabot.yml | Broadens actions grouping and adds uv ecosystem updates. |
| .github/actions/uv/action.yml | Updates uv setup action version. |
| .github/actions/dependencies/action.yml | Updates uv setup action version. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if not (request.can_read_body and request.content_length and request.content_length > 0): | ||
| raise web.HTTPBadRequest( | ||
| "Pack requests must include recipe as a query param" | ||
| "Pack requests must include a recipe in the request body" | ||
| ) |
| if self.db: | ||
| timestamp = self.db.create_timestamp() | ||
| self.db.update_or_create( | ||
| "job_status", | ||
| job_id, | ||
| { | ||
| "timestamp": timestamp, | ||
| "status": str(status), | ||
| "result_path": result_path, | ||
| "error_message": error_message, | ||
| }, | ||
| ) | ||
|
|
||
| def upload_packing_results_workflow(self, source_folder, recipe_name, job_id): | ||
| db_handler = self.db | ||
| # If db is AWSHandler, switch to firebase handler for job status updates | ||
| if isinstance(self.db, AWSHandler): | ||
| handler = DATABASE_IDS.handlers().get(DATABASE_IDS.FIREBASE) | ||
| db_handler = handler(default_db="staging") |
| | `name` | string | Name of the config | default | Used to identify this config run | | ||
| | `number_of_packings` | number (>=1) | Number of independent packing replicates | 1 | | | ||
| | `open_results_in_browser` | boolean | Open results in browser after run | True | | | ||
| | `open_results_in_browser` | boolean | Open results in browser after run | False | Prerequisite: AWS s3 credentials | |
| | `show_sphere_trees` | boolean | Visualize sphere trees | False | | | ||
| | `spacing` | number | Override object spacing | None | | | ||
| | `upload_results` | boolean | Upload results to S3 | True | | | ||
| | `upload_results` | boolean | Upload results to S3 | False | Requires AWS S3 credentials to upload the result file to S3 | | |


Summary
Merges
maininto the long-livedcellpack-analysisfork branch, bringing main'sinfrastructure (dependency upgrades, recipe-JSON server support, dedup hashing,
requirements.txtdeprecation, etc.) into the fork without changingdownstream-observable packing behavior. The downstream
cellpack-analysisrepo pins cellpack to
f8b5500f(currentcellpack-analysisHEAD), so thegoal was to preserve gradient math and output file naming exactly.
Base is
cellpack-analysis(notmain): this updates the fork.Conflict resolutions (favoring downstream behavior)
Gradient.py— kept the analysis behavior (probability-mixingcombine_gradients,use_real_distances+ decay validation). Leftbyte-identical to
f8b5500f.validation/recipe_models.py— kept the analysis validation layout(gradient defaults in
interface_objects/default_values.py). Fixed asilent-but-broken auto-merge by redirecting two
main-authored imports ofDEFAULT_GRADIENT_MODE_SETTINGSfromrecipe_modelstointerface_objects(a naive merge
ImportErrors at startup otherwise).loaders/recipe_loader.py— took main's refactor (recipe-JSON input,_normalize_gradients); dropped the now-redundant analysisGradientDatablock.loaders/config_loader.py— kept the analysisparallel→number_of_processesrename; restoredupload_results/open_results_in_browserdefaults toTrueto match the downstream baseline;added a backward-compat shim mapping legacy
parallel.writers/__init__.py— kept the analysis result-file naming (downstreamglobs
results_*.simularium); layered in main'sdedup_hashplumbing.bioio(analysis) +requirements.txtdeprecation (main)auto-merged cleanly.
Also:
pack.pylogs the resolved cellpack package path at DEBUG level (helpsconfirm which cellpack build a run used).
Verification
bit-identical packed positions vs the downstream pin
f8b5500ffor random,single-gradient, and multi-gradient combine recipes.
run_packing_workflow(generation + packing, random + gradientrules) runs green against this branch.
differs only for multi-gradient combination — the intended divergence
(probability mixing vs main's max-normalization). This branch matches
f8b5500fexactly on that case.Notes / follow-ups
cellpack-analysisrepo'scellpack.revonly after this lands.uv lockbefore final merge.downstream
cellpack-analysisrepo (not part of this PR).🤖 Generated with Claude Code