ashlr-plugin 1.36.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +39 -0
- package/.claude-plugin/plugin.json +36 -0
- package/.codex/agents/README.md +9 -0
- package/.codex/agents/ashlr-explorer.md +36 -0
- package/.codex/agents/ashlr-worker.md +38 -0
- package/.codex-plugin/plugin.json +45 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +311 -0
- package/agents/ashlr-code.md +69 -0
- package/agents/ashlr-explore.md +44 -0
- package/agents/ashlr-plan.md +54 -0
- package/bench/fixtures/notebook-large.ipynb +660 -0
- package/bench/fixtures/notebook-small.ipynb +39 -0
- package/bench/fixtures/tasklist-closed.json +62 -0
- package/bench/fixtures/tasklist-large-mixed.json +27 -0
- package/bench/fixtures/tasklist-sprint-open.json +79 -0
- package/bench/fixtures/websearch-bun-runtime.json +32 -0
- package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
- package/bench/fixtures/websearch-typescript-generics.json +38 -0
- package/bench/refs/node-sdk/.refrev +1 -0
- package/bench/refs/node-sdk/README.md +17 -0
- package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
- package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
- package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
- package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
- package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
- package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
- package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
- package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
- package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
- package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
- package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
- package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
- package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
- package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
- package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
- package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
- package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
- package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
- package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
- package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
- package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
- package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
- package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
- package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
- package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
- package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
- package/bench/refs/python-lib/.refrev +1 -0
- package/bench/refs/python-lib/README.md +18 -0
- package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
- package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
- package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
- package/bench/refs/python-lib/pandas/core/api.py +138 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
- package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
- package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
- package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
- package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
- package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
- package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
- package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
- package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
- package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
- package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
- package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
- package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
- package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
- package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
- package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
- package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
- package/bench/refs/rust-project/.refrev +1 -0
- package/bench/refs/rust-project/README.md +17 -0
- package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
- package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
- package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
- package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
- package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
- package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
- package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
- package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
- package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
- package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
- package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
- package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
- package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
- package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
- package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
- package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
- package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
- package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
- package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
- package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
- package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
- package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
- package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
- package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
- package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
- package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
- package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
- package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
- package/commands/_spawn-patterns.json +32 -0
- package/commands/ashlr-allow.md +21 -0
- package/commands/ashlr-benchmark.md +53 -0
- package/commands/ashlr-brief.md +97 -0
- package/commands/ashlr-budget.md +76 -0
- package/commands/ashlr-compact.md +54 -0
- package/commands/ashlr-dashboard.md +37 -0
- package/commands/ashlr-doctor.md +56 -0
- package/commands/ashlr-eco-mode.md +92 -0
- package/commands/ashlr-genome-init.md +24 -0
- package/commands/ashlr-genome-keygen.md +36 -0
- package/commands/ashlr-genome-loop.md +118 -0
- package/commands/ashlr-genome-push.md +36 -0
- package/commands/ashlr-genome-rewrap.md +48 -0
- package/commands/ashlr-genome-team-init.md +67 -0
- package/commands/ashlr-handoff.md +23 -0
- package/commands/ashlr-help.md +86 -0
- package/commands/ashlr-hook-timings.md +30 -0
- package/commands/ashlr-leaderboard.md +50 -0
- package/commands/ashlr-ollama-setup.md +39 -0
- package/commands/ashlr-orchestrate-status.md +72 -0
- package/commands/ashlr-orchestrate.md +83 -0
- package/commands/ashlr-parallelize.md +63 -0
- package/commands/ashlr-report-crash.md +33 -0
- package/commands/ashlr-resume.md +72 -0
- package/commands/ashlr-savings.md +24 -0
- package/commands/ashlr-settings.md +50 -0
- package/commands/ashlr-spawn.md +61 -0
- package/commands/ashlr-start.md +60 -0
- package/commands/ashlr-status.md +64 -0
- package/commands/ashlr-team-invite.md +47 -0
- package/commands/ashlr-tier.md +122 -0
- package/commands/ashlr-tour.md +60 -0
- package/commands/ashlr-update.md +155 -0
- package/commands/ashlr-upgrade.md +96 -0
- package/commands/goal.md +58 -0
- package/commands/loop.md +40 -0
- package/docs/CNAME +1 -0
- package/docs/PRO_TIER.md +104 -0
- package/docs/README.md +21 -0
- package/docs/architecture.md +415 -0
- package/docs/ashlr-pipe.md +161 -0
- package/docs/assets/logo.svg +19 -0
- package/docs/assets/og.png +0 -0
- package/docs/assets/og.svg +41 -0
- package/docs/benchmarks-v2.json +355 -0
- package/docs/benchmarks.json +102 -0
- package/docs/benchmarks.md +211 -0
- package/docs/billing.md +185 -0
- package/docs/cloud-genome.md +155 -0
- package/docs/competitive-wozcode.md +92 -0
- package/docs/deploy.md +325 -0
- package/docs/email-templates.md +113 -0
- package/docs/embed-tuning.md +103 -0
- package/docs/genome.md +120 -0
- package/docs/github-oauth-onboarding.md +127 -0
- package/docs/hero-video-script.md +129 -0
- package/docs/index.html +2262 -0
- package/docs/install-prompt.md +78 -0
- package/docs/install-windows.md +132 -0
- package/docs/install.ps1 +171 -0
- package/docs/install.sh +146 -0
- package/docs/launch/README.md +114 -0
- package/docs/launch/hn.md +49 -0
- package/docs/launch/reddit.md +45 -0
- package/docs/launch/x.md +65 -0
- package/docs/launch-post.md +112 -0
- package/docs/legal.md +78 -0
- package/docs/llm-providers.md +99 -0
- package/docs/multi-host-mcp.md +217 -0
- package/docs/multi-turn-architecture.md +108 -0
- package/docs/operations/deployment.md +108 -0
- package/docs/operations/error-monitoring.md +70 -0
- package/docs/operations/weekly-digest.md +70 -0
- package/docs/operations.md +494 -0
- package/docs/platform-support.md +133 -0
- package/docs/policy-packs.md +188 -0
- package/docs/press-kit/fact-sheet.md +78 -0
- package/docs/press-kit/founder-bio.md +3 -0
- package/docs/press-kit/logo.svg +33 -0
- package/docs/press-kit/screenshots.md +146 -0
- package/docs/pricing.md +251 -0
- package/docs/pro-backend-architecture.md +523 -0
- package/docs/producthunt.md +52 -0
- package/docs/router-migration.md +110 -0
- package/docs/session-log-schema.md +68 -0
- package/docs/social.md +95 -0
- package/docs/team-genome.md +528 -0
- package/docs/telemetry.md +194 -0
- package/docs/test-isolation.md +100 -0
- package/docs/upgrade.md +159 -0
- package/hooks/_hook-errors.ts +87 -0
- package/hooks/_hook-perf-emit.ts +113 -0
- package/hooks/_hook-timing-ledger.ts +1133 -0
- package/hooks/_nudge-throttle.ts +127 -0
- package/hooks/_recent-blocks.ts +127 -0
- package/hooks/audit-upload.ts +86 -0
- package/hooks/codex-hooks.json +171 -0
- package/hooks/commit-attribution.ts +179 -0
- package/hooks/edit-batching-nudge.ts +154 -0
- package/hooks/genome-scribe-hook.ts +219 -0
- package/hooks/hooks.json +294 -0
- package/hooks/orient-nudge-hook.ts +242 -0
- package/hooks/policy-enforce.ts +214 -0
- package/hooks/post-tool-use-embedding.ts +93 -0
- package/hooks/post-tool-use-genome.sh +37 -0
- package/hooks/post-tool-use-genome.ts +69 -0
- package/hooks/posttooluse-correlate.ts +122 -0
- package/hooks/posttooluse-dedupe-output.ts +241 -0
- package/hooks/posttooluse-genome-refresh.ts +223 -0
- package/hooks/posttooluse-native-nudge.ts +205 -0
- package/hooks/posttooluse-stale-result.ts +277 -0
- package/hooks/pretooluse-bash.ts +63 -0
- package/hooks/pretooluse-budget-guard.ts +318 -0
- package/hooks/pretooluse-common.ts +985 -0
- package/hooks/pretooluse-eco-router.ts +196 -0
- package/hooks/pretooluse-edit.sh +93 -0
- package/hooks/pretooluse-edit.ts +197 -0
- package/hooks/pretooluse-glob.ts +70 -0
- package/hooks/pretooluse-grep.sh +85 -0
- package/hooks/pretooluse-grep.ts +96 -0
- package/hooks/pretooluse-notebookedit.ts +121 -0
- package/hooks/pretooluse-read.sh +118 -0
- package/hooks/pretooluse-read.ts +118 -0
- package/hooks/pretooluse-task.ts +130 -0
- package/hooks/pretooluse-webfetch.ts +66 -0
- package/hooks/pretooluse-websearch.ts +85 -0
- package/hooks/pretooluse-write.ts +128 -0
- package/hooks/pulse-emit.ts +197 -0
- package/hooks/session-end-consolidate.sh +35 -0
- package/hooks/session-end-consolidate.ts +188 -0
- package/hooks/session-end-stats-gc.ts +80 -0
- package/hooks/session-log-append.sh +94 -0
- package/hooks/session-log-append.ts +116 -0
- package/hooks/session-start.ts +993 -0
- package/hooks/sessionend-hook-health-nudge.ts +451 -0
- package/hooks/sessionend-savings-nudge.ts +318 -0
- package/hooks/sessionend-status-line-nudge.ts +296 -0
- package/hooks/sessionstart-brief.ts +140 -0
- package/hooks/sessionstart-cost-refactor.ts +95 -0
- package/hooks/sessionstart-efficient.ts +110 -0
- package/hooks/sessionstart-genome-author.ts +93 -0
- package/hooks/sessionstart-lean-tools.ts +98 -0
- package/hooks/sessionstart-search.ts +97 -0
- package/hooks/stop-accounting.ts +152 -0
- package/hooks/subagent-stop-rollup.ts +162 -0
- package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
- package/package.json +56 -0
- package/ports/README.md +108 -0
- package/ports/cursor/mcp.json +11 -0
- package/ports/goose/recipe.yaml +26 -0
- package/scripts/ashlr-mcp.ts +40 -0
- package/scripts/auto-update.ts +177 -0
- package/scripts/baseline-scan.ts +831 -0
- package/scripts/bench-orchestrate.ts +377 -0
- package/scripts/benchmark-refs.ts +292 -0
- package/scripts/bootstrap.mjs +100 -0
- package/scripts/brief-eval.ts +234 -0
- package/scripts/bump-version.ts +82 -0
- package/scripts/bun-resolve.d.mts +11 -0
- package/scripts/bun-resolve.mjs +59 -0
- package/scripts/calibrate-grep.ts +467 -0
- package/scripts/capture-grep-workload.ts +260 -0
- package/scripts/check-tier.ts +61 -0
- package/scripts/check-version-sync.ts +97 -0
- package/scripts/cli-orchestrate-status.ts +386 -0
- package/scripts/cli-orchestrate.ts +303 -0
- package/scripts/cli.ts +478 -0
- package/scripts/cloud-smoke-test.ts +313 -0
- package/scripts/coach-report.ts +373 -0
- package/scripts/context-db-migrate.ts +137 -0
- package/scripts/context-status.ts +43 -0
- package/scripts/demo-run.ts +255 -0
- package/scripts/deploy-smoke.sh +140 -0
- package/scripts/doctor.ts +992 -0
- package/scripts/embed-file-worker.ts +104 -0
- package/scripts/embed-tune.ts +308 -0
- package/scripts/errors-report.ts +428 -0
- package/scripts/find-test-leak.ts +69 -0
- package/scripts/generate-badge.ts +357 -0
- package/scripts/genome-auto-consolidate.ts +533 -0
- package/scripts/genome-auto-propose.ts +578 -0
- package/scripts/genome-cloud-pull.ts +363 -0
- package/scripts/genome-cloud-push.ts +382 -0
- package/scripts/genome-cloud-sync.ts +587 -0
- package/scripts/genome-commit-watcher.ts +295 -0
- package/scripts/genome-init.ts +986 -0
- package/scripts/genome-key.ts +233 -0
- package/scripts/genome-keygen.ts +168 -0
- package/scripts/genome-link.ts +59 -0
- package/scripts/genome-refresh-worker.ts +364 -0
- package/scripts/genome-rewrap.ts +90 -0
- package/scripts/genome-synthesizer.ts +679 -0
- package/scripts/genome-team-init.ts +312 -0
- package/scripts/handoff-pack.ts +438 -0
- package/scripts/hook-bootstrap.mjs +75 -0
- package/scripts/hook-timing-reader.ts +371 -0
- package/scripts/hook-timings-report.ts +554 -0
- package/scripts/install-genome-hooks.ts +196 -0
- package/scripts/install-onnx-model.ts +154 -0
- package/scripts/install-permissions.ts +276 -0
- package/scripts/install-status-line.ts +150 -0
- package/scripts/mcp-entrypoint.sh +78 -0
- package/scripts/mcp-entrypoint.ts +130 -0
- package/scripts/mdx-angle-bracket-lint.ts +152 -0
- package/scripts/measure-cold-start.ts +126 -0
- package/scripts/migrate-stats-to-sqlite.ts +86 -0
- package/scripts/ollama-setup.ts +498 -0
- package/scripts/onboarding-wizard.ts +1691 -0
- package/scripts/orchestrate-emit-telemetry.ts +177 -0
- package/scripts/orchestrate-expand.ts +517 -0
- package/scripts/orchestrate-run.ts +744 -0
- package/scripts/print-legend.ts +50 -0
- package/scripts/product-metadata.ts +38 -0
- package/scripts/prune-old-memories.ts +208 -0
- package/scripts/publish.sh +88 -0
- package/scripts/read-calibration.ts +122 -0
- package/scripts/report-crash.ts +226 -0
- package/scripts/run-benchmark.ts +750 -0
- package/scripts/run-root-tests.ts +28 -0
- package/scripts/savings-dashboard.ts +1258 -0
- package/scripts/savings-report-extras.ts +447 -0
- package/scripts/savings-status-line.ts +873 -0
- package/scripts/session-event-emit.ts +266 -0
- package/scripts/session-greet.ts +686 -0
- package/scripts/session-log-report.ts +551 -0
- package/scripts/session-resume.ts +614 -0
- package/scripts/set-hook-mode.ts +83 -0
- package/scripts/smoke-cross-platform.ts +117 -0
- package/scripts/smoke-realtime.ts +257 -0
- package/scripts/smoke-tools.ts +21 -0
- package/scripts/stats-cloud-pull.ts +213 -0
- package/scripts/stats-cloud-sync.ts +261 -0
- package/scripts/telemetry-flush.ts +160 -0
- package/scripts/telemetry-status.ts +266 -0
- package/scripts/timing-budget.ts +35 -0
- package/scripts/ui-animation.ts +120 -0
- package/scripts/ui.ts +431 -0
- package/scripts/upgrade-flow.ts +775 -0
- package/scripts/weekly-digest.ts +394 -0
- package/servers/_accounting.ts +78 -0
- package/servers/_ask-router.ts +84 -0
- package/servers/_ast-chunker.ts +434 -0
- package/servers/_ast-helpers.ts +183 -0
- package/servers/_ast-languages.ts +153 -0
- package/servers/_ast-refactor/_shared.ts +221 -0
- package/servers/_ast-refactor/cross-file-rename.ts +560 -0
- package/servers/_ast-refactor/extract-function.ts +357 -0
- package/servers/_ast-refactor/file-local-rename.ts +172 -0
- package/servers/_ast-refactor.ts +41 -0
- package/servers/_ast-skeleton.ts +107 -0
- package/servers/_bash-summarizers-registry.ts +1096 -0
- package/servers/_crash-dump.ts +210 -0
- package/servers/_cwd-clamp.ts +342 -0
- package/servers/_edit-log.ts +28 -0
- package/servers/_edit-match.ts +236 -0
- package/servers/_edit-validate.ts +196 -0
- package/servers/_embed-calibration.ts +123 -0
- package/servers/_embedding-cache.ts +401 -0
- package/servers/_embedding-model.ts +329 -0
- package/servers/_events.ts +113 -0
- package/servers/_genome-cache.ts +154 -0
- package/servers/_genome-commits.ts +172 -0
- package/servers/_genome-crypto-v2.ts +242 -0
- package/servers/_genome-crypto.ts +259 -0
- package/servers/_genome-discoveries.ts +140 -0
- package/servers/_genome-embed-populator.ts +216 -0
- package/servers/_genome-freshness.ts +134 -0
- package/servers/_genome-issues.ts +171 -0
- package/servers/_genome-live.ts +263 -0
- package/servers/_genome-prs.ts +188 -0
- package/servers/_genome-search.ts +479 -0
- package/servers/_genome-sync.ts +297 -0
- package/servers/_history-tracker.ts +279 -0
- package/servers/_http-helpers.ts +151 -0
- package/servers/_identity-hash.ts +151 -0
- package/servers/_llm-providers/anthropic.ts +132 -0
- package/servers/_llm-providers/cloud.ts +195 -0
- package/servers/_llm-providers/index.ts +350 -0
- package/servers/_llm-providers/local.ts +127 -0
- package/servers/_llm-providers/onnx.ts +393 -0
- package/servers/_llm-providers/types.ts +27 -0
- package/servers/_manifest-v2.ts +447 -0
- package/servers/_mcp-host.ts +93 -0
- package/servers/_nudge-events.ts +451 -0
- package/servers/_orchestrate-executor.ts +316 -0
- package/servers/_prefetch.ts +435 -0
- package/servers/_pricing.ts +256 -0
- package/servers/_pro.ts +381 -0
- package/servers/_read-cache.ts +44 -0
- package/servers/_router-handlers.ts +46 -0
- package/servers/_router.ts +55 -0
- package/servers/_run-with-timeout.ts +173 -0
- package/servers/_savings-render.ts +214 -0
- package/servers/_stats-sqlite.ts +640 -0
- package/servers/_stats.ts +1183 -0
- package/servers/_status-line-cells.ts +469 -0
- package/servers/_streaks.ts +162 -0
- package/servers/_summarize.ts +208 -0
- package/servers/_task-graph-render.ts +217 -0
- package/servers/_task-graph.ts +545 -0
- package/servers/_telemetry.ts +719 -0
- package/servers/_test-parsers.ts +530 -0
- package/servers/_test-watch.ts +626 -0
- package/servers/_text-helpers.ts +37 -0
- package/servers/_token-measure.ts +160 -0
- package/servers/_tool-base.ts +248 -0
- package/servers/_weekly-digest.ts +391 -0
- package/servers/ask-server-handlers.ts +49 -0
- package/servers/ask-server.ts +174 -0
- package/servers/bash-server-handlers.ts +138 -0
- package/servers/bash-server.ts +1136 -0
- package/servers/bench.ts +186 -0
- package/servers/diff-semantic-server-handlers.ts +39 -0
- package/servers/diff-semantic-server.ts +566 -0
- package/servers/diff-server-handlers.ts +317 -0
- package/servers/diff-server.ts +20 -0
- package/servers/edit-server-handlers.ts +31 -0
- package/servers/edit-server.ts +209 -0
- package/servers/edit-structural-server-handlers.ts +322 -0
- package/servers/efficiency-server-handlers.ts +161 -0
- package/servers/efficiency-server.ts +1135 -0
- package/servers/flush-server-handlers.ts +21 -0
- package/servers/flush-server.ts +19 -0
- package/servers/genome-server-handlers.ts +118 -0
- package/servers/genome-server.ts +397 -0
- package/servers/github-server-handlers.ts +187 -0
- package/servers/github-server.ts +856 -0
- package/servers/glob-server-handlers.ts +233 -0
- package/servers/glob-server.ts +20 -0
- package/servers/grep-server-handlers.ts +61 -0
- package/servers/grep-server.ts +564 -0
- package/servers/http-server-handlers.ts +36 -0
- package/servers/http-server.ts +149 -0
- package/servers/logs-server-handlers.ts +42 -0
- package/servers/logs-server.ts +359 -0
- package/servers/ls-server-handlers.ts +166 -0
- package/servers/ls-server.ts +20 -0
- package/servers/multi-edit-server-handlers.ts +51 -0
- package/servers/multi-edit-server.ts +422 -0
- package/servers/notebook-edit-server-handlers.ts +34 -0
- package/servers/notebook-edit-server.ts +181 -0
- package/servers/orient-server-handlers.ts +52 -0
- package/servers/orient-server.ts +436 -0
- package/servers/pipe-server-handlers.ts +68 -0
- package/servers/pipe-server.ts +300 -0
- package/servers/read-server-handlers.ts +42 -0
- package/servers/read-server.ts +206 -0
- package/servers/rename-file-server-handlers.ts +67 -0
- package/servers/rename-file-server.ts +699 -0
- package/servers/savings-server-handlers.ts +27 -0
- package/servers/savings-server.ts +54 -0
- package/servers/search-replace-regex-server-handlers.ts +96 -0
- package/servers/search-replace-regex-server.ts +751 -0
- package/servers/sql-server-handlers.ts +58 -0
- package/servers/sql-server.ts +505 -0
- package/servers/task-server-handlers.ts +358 -0
- package/servers/task-server.ts +24 -0
- package/servers/test-server-handlers.ts +351 -0
- package/servers/test-server.ts +20 -0
- package/servers/tree-server-handlers.ts +503 -0
- package/servers/tree-server.ts +20 -0
- package/servers/webfetch-server-handlers.ts +166 -0
- package/servers/webfetch-server.ts +20 -0
- package/servers/websearch-server-handlers.ts +215 -0
- package/servers/websearch-server.ts +19 -0
- package/servers/write-server-handlers.ts +27 -0
- package/servers/write-server.ts +97 -0
- package/skills/ashlr-brief/SKILL.md +80 -0
- package/skills/ashlr-codex-doctor/SKILL.md +21 -0
- package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
- package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
- package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
- package/skills/ashlr-codex-savings/SKILL.md +17 -0
- package/skills/ashlr-cost-refactor/SKILL.md +50 -0
- package/skills/ashlr-efficient/SKILL.md +64 -0
- package/skills/ashlr-genome-author/SKILL.md +43 -0
- package/skills/ashlr-lean-tools/SKILL.md +43 -0
- package/skills/ashlr-search/SKILL.md +46 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""
|
|
2
|
+
masked_accumulations.py is for accumulation algorithms using a mask-based approach
|
|
3
|
+
for missing values.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
import numpy as np
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from collections.abc import Callable
|
|
14
|
+
|
|
15
|
+
from pandas._typing import npt
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _cum_func(
|
|
19
|
+
func: Callable,
|
|
20
|
+
values: np.ndarray,
|
|
21
|
+
mask: npt.NDArray[np.bool_],
|
|
22
|
+
*,
|
|
23
|
+
skipna: bool = True,
|
|
24
|
+
) -> tuple[np.ndarray, npt.NDArray[np.bool_]]:
|
|
25
|
+
"""
|
|
26
|
+
Accumulations for 1D masked array.
|
|
27
|
+
|
|
28
|
+
We will modify values in place to replace NAs with the appropriate fill value.
|
|
29
|
+
|
|
30
|
+
Parameters
|
|
31
|
+
----------
|
|
32
|
+
func : np.cumsum, np.cumprod, np.maximum.accumulate, np.minimum.accumulate
|
|
33
|
+
values : np.ndarray
|
|
34
|
+
Numpy array with the values (can be of any dtype that support the
|
|
35
|
+
operation).
|
|
36
|
+
mask : np.ndarray
|
|
37
|
+
Boolean numpy array (True values indicate missing values).
|
|
38
|
+
skipna : bool, default True
|
|
39
|
+
Whether to skip NA.
|
|
40
|
+
"""
|
|
41
|
+
dtype_info: np.iinfo | np.finfo
|
|
42
|
+
if values.dtype.kind == "f":
|
|
43
|
+
dtype_info = np.finfo(values.dtype.type)
|
|
44
|
+
elif values.dtype.kind in "iu":
|
|
45
|
+
dtype_info = np.iinfo(values.dtype.type)
|
|
46
|
+
elif values.dtype.kind == "b":
|
|
47
|
+
# Max value of bool is 1, but since we are setting into a boolean
|
|
48
|
+
# array, 255 is fine as well. Min value has to be 0 when setting
|
|
49
|
+
# into the boolean array.
|
|
50
|
+
dtype_info = np.iinfo(np.uint8)
|
|
51
|
+
else:
|
|
52
|
+
raise NotImplementedError(
|
|
53
|
+
f"No masked accumulation defined for dtype {values.dtype.type}"
|
|
54
|
+
)
|
|
55
|
+
try:
|
|
56
|
+
fill_value = {
|
|
57
|
+
np.cumprod: 1,
|
|
58
|
+
np.maximum.accumulate: dtype_info.min,
|
|
59
|
+
np.cumsum: 0,
|
|
60
|
+
np.minimum.accumulate: dtype_info.max,
|
|
61
|
+
}[func]
|
|
62
|
+
except KeyError as err:
|
|
63
|
+
raise NotImplementedError(
|
|
64
|
+
f"No accumulation for {func} implemented on BaseMaskedArray"
|
|
65
|
+
) from err
|
|
66
|
+
|
|
67
|
+
values[mask] = fill_value
|
|
68
|
+
|
|
69
|
+
if not skipna:
|
|
70
|
+
mask = np.maximum.accumulate(mask)
|
|
71
|
+
|
|
72
|
+
values = func(values)
|
|
73
|
+
return values, mask
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def cumsum(
|
|
77
|
+
values: np.ndarray, mask: npt.NDArray[np.bool_], *, skipna: bool = True
|
|
78
|
+
) -> tuple[np.ndarray, npt.NDArray[np.bool_]]:
|
|
79
|
+
return _cum_func(np.cumsum, values, mask, skipna=skipna)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def cumprod(
|
|
83
|
+
values: np.ndarray, mask: npt.NDArray[np.bool_], *, skipna: bool = True
|
|
84
|
+
) -> tuple[np.ndarray, npt.NDArray[np.bool_]]:
|
|
85
|
+
return _cum_func(np.cumprod, values, mask, skipna=skipna)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def cummin(
|
|
89
|
+
values: np.ndarray, mask: npt.NDArray[np.bool_], *, skipna: bool = True
|
|
90
|
+
) -> tuple[np.ndarray, npt.NDArray[np.bool_]]:
|
|
91
|
+
return _cum_func(np.minimum.accumulate, values, mask, skipna=skipna)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def cummax(
|
|
95
|
+
values: np.ndarray, mask: npt.NDArray[np.bool_], *, skipna: bool = True
|
|
96
|
+
) -> tuple[np.ndarray, npt.NDArray[np.bool_]]:
|
|
97
|
+
return _cum_func(np.maximum.accumulate, values, mask, skipna=skipna)
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"""
|
|
2
|
+
masked_reductions.py is for reduction algorithms using a mask-based approach
|
|
3
|
+
for missing values.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
import warnings
|
|
10
|
+
|
|
11
|
+
import numpy as np
|
|
12
|
+
|
|
13
|
+
from pandas._libs import (
|
|
14
|
+
lib,
|
|
15
|
+
missing as libmissing,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
from pandas.core.nanops import check_below_min_count
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from collections.abc import Callable
|
|
22
|
+
|
|
23
|
+
from pandas._typing import (
|
|
24
|
+
AxisInt,
|
|
25
|
+
npt,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _get_min_value(dtype: np.dtype) -> int | float:
|
|
30
|
+
"""Get the minimum value for a given numpy dtype."""
|
|
31
|
+
if dtype.kind == "f":
|
|
32
|
+
return -np.inf
|
|
33
|
+
elif dtype.kind == "u":
|
|
34
|
+
return 0
|
|
35
|
+
else:
|
|
36
|
+
return np.iinfo(dtype).min
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _get_max_value(dtype: np.dtype) -> int | float:
|
|
40
|
+
"""Get the maximum value for a given numpy dtype."""
|
|
41
|
+
if dtype.kind == "f":
|
|
42
|
+
return np.inf
|
|
43
|
+
else:
|
|
44
|
+
return np.iinfo(dtype).max
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _reductions(
|
|
48
|
+
func: Callable,
|
|
49
|
+
values: np.ndarray,
|
|
50
|
+
mask: npt.NDArray[np.bool_],
|
|
51
|
+
*,
|
|
52
|
+
skipna: bool = True,
|
|
53
|
+
min_count: int = 0,
|
|
54
|
+
axis: AxisInt | None = None,
|
|
55
|
+
initial: object | lib.NoDefault = lib.no_default,
|
|
56
|
+
**kwargs,
|
|
57
|
+
):
|
|
58
|
+
"""
|
|
59
|
+
Sum, mean or product for 1D masked array.
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
func : np.sum or np.prod
|
|
64
|
+
values : np.ndarray
|
|
65
|
+
Numpy array with the values (can be of any dtype that support the
|
|
66
|
+
operation).
|
|
67
|
+
mask : np.ndarray[bool]
|
|
68
|
+
Boolean numpy array (True values indicate missing values).
|
|
69
|
+
skipna : bool, default True
|
|
70
|
+
Whether to skip NA.
|
|
71
|
+
min_count : int, default 0
|
|
72
|
+
The required number of valid values to perform the operation. If fewer than
|
|
73
|
+
``min_count`` non-NA values are present the result will be NA.
|
|
74
|
+
axis : int, optional, default None
|
|
75
|
+
initial : scalar, optional
|
|
76
|
+
Starting value for the reduction. NumPy has a default value for most
|
|
77
|
+
data types, but for object-dtype arrays we need to specify it explicitly
|
|
78
|
+
"""
|
|
79
|
+
if initial is not lib.no_default:
|
|
80
|
+
kwargs["initial"] = initial
|
|
81
|
+
|
|
82
|
+
if not skipna:
|
|
83
|
+
if axis is not None and values.ndim > 1:
|
|
84
|
+
# For 2D with axis, compute the reduction and let the caller
|
|
85
|
+
# handle per-row/column masking via _wrap_reduction_result.
|
|
86
|
+
return func(values, axis=axis, **kwargs)
|
|
87
|
+
if mask.any() or check_below_min_count(values.shape, None, min_count):
|
|
88
|
+
return libmissing.NA
|
|
89
|
+
else:
|
|
90
|
+
return func(values, axis=axis, **kwargs)
|
|
91
|
+
else:
|
|
92
|
+
if check_below_min_count(values.shape, mask, min_count) and (
|
|
93
|
+
axis is None or values.ndim == 1
|
|
94
|
+
):
|
|
95
|
+
return libmissing.NA
|
|
96
|
+
|
|
97
|
+
return func(values, where=~mask, axis=axis, **kwargs)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def sum(
|
|
101
|
+
values: np.ndarray,
|
|
102
|
+
mask: npt.NDArray[np.bool_],
|
|
103
|
+
*,
|
|
104
|
+
skipna: bool = True,
|
|
105
|
+
min_count: int = 0,
|
|
106
|
+
axis: AxisInt | None = None,
|
|
107
|
+
initial: object | lib.NoDefault = lib.no_default,
|
|
108
|
+
):
|
|
109
|
+
return _reductions(
|
|
110
|
+
np.sum,
|
|
111
|
+
values=values,
|
|
112
|
+
mask=mask,
|
|
113
|
+
skipna=skipna,
|
|
114
|
+
min_count=min_count,
|
|
115
|
+
axis=axis,
|
|
116
|
+
initial=initial,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def prod(
|
|
121
|
+
values: np.ndarray,
|
|
122
|
+
mask: npt.NDArray[np.bool_],
|
|
123
|
+
*,
|
|
124
|
+
skipna: bool = True,
|
|
125
|
+
min_count: int = 0,
|
|
126
|
+
axis: AxisInt | None = None,
|
|
127
|
+
):
|
|
128
|
+
return _reductions(
|
|
129
|
+
np.prod, values=values, mask=mask, skipna=skipna, min_count=min_count, axis=axis
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def _minmax(
|
|
134
|
+
func: Callable,
|
|
135
|
+
values: np.ndarray,
|
|
136
|
+
mask: npt.NDArray[np.bool_],
|
|
137
|
+
*,
|
|
138
|
+
skipna: bool = True,
|
|
139
|
+
axis: AxisInt | None = None,
|
|
140
|
+
):
|
|
141
|
+
"""
|
|
142
|
+
Reduction for 1D masked array.
|
|
143
|
+
|
|
144
|
+
Parameters
|
|
145
|
+
----------
|
|
146
|
+
func : np.min or np.max
|
|
147
|
+
values : np.ndarray
|
|
148
|
+
Numpy array with the values (can be of any dtype that support the
|
|
149
|
+
operation).
|
|
150
|
+
mask : np.ndarray[bool]
|
|
151
|
+
Boolean numpy array (True values indicate missing values).
|
|
152
|
+
skipna : bool, default True
|
|
153
|
+
Whether to skip NA.
|
|
154
|
+
axis : int, optional, default None
|
|
155
|
+
"""
|
|
156
|
+
if not skipna:
|
|
157
|
+
if axis is not None and values.ndim > 1:
|
|
158
|
+
# For 2D with axis, compute the reduction and let the caller
|
|
159
|
+
# handle per-row/column masking via _wrap_reduction_result.
|
|
160
|
+
return func(values, axis=axis)
|
|
161
|
+
if mask.any() or not values.size:
|
|
162
|
+
# min/max with empty array raise in numpy, pandas returns NA
|
|
163
|
+
return libmissing.NA
|
|
164
|
+
else:
|
|
165
|
+
return func(values, axis=axis)
|
|
166
|
+
else:
|
|
167
|
+
if axis is not None and values.ndim > 1:
|
|
168
|
+
# Can't use values[~mask] which would flatten the array.
|
|
169
|
+
# Instead, replace masked values with the identity element
|
|
170
|
+
# and then reduce.
|
|
171
|
+
if func is np.min:
|
|
172
|
+
fill_value = _get_max_value(values.dtype)
|
|
173
|
+
else:
|
|
174
|
+
fill_value = _get_min_value(values.dtype)
|
|
175
|
+
filled = np.where(mask, fill_value, values)
|
|
176
|
+
return func(filled, axis=axis)
|
|
177
|
+
subset = values[~mask]
|
|
178
|
+
if subset.size:
|
|
179
|
+
return func(subset, axis=axis)
|
|
180
|
+
else:
|
|
181
|
+
# min/max with empty array raise in numpy, pandas returns NA
|
|
182
|
+
return libmissing.NA
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def min(
|
|
186
|
+
values: np.ndarray,
|
|
187
|
+
mask: npt.NDArray[np.bool_],
|
|
188
|
+
*,
|
|
189
|
+
skipna: bool = True,
|
|
190
|
+
axis: AxisInt | None = None,
|
|
191
|
+
):
|
|
192
|
+
return _minmax(np.min, values=values, mask=mask, skipna=skipna, axis=axis)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def max(
|
|
196
|
+
values: np.ndarray,
|
|
197
|
+
mask: npt.NDArray[np.bool_],
|
|
198
|
+
*,
|
|
199
|
+
skipna: bool = True,
|
|
200
|
+
axis: AxisInt | None = None,
|
|
201
|
+
):
|
|
202
|
+
return _minmax(np.max, values=values, mask=mask, skipna=skipna, axis=axis)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def mean(
|
|
206
|
+
values: np.ndarray,
|
|
207
|
+
mask: npt.NDArray[np.bool_],
|
|
208
|
+
*,
|
|
209
|
+
skipna: bool = True,
|
|
210
|
+
axis: AxisInt | None = None,
|
|
211
|
+
):
|
|
212
|
+
if not values.size or (mask.all() and (axis is None or values.ndim == 1)):
|
|
213
|
+
return libmissing.NA
|
|
214
|
+
with warnings.catch_warnings():
|
|
215
|
+
warnings.simplefilter("ignore", RuntimeWarning)
|
|
216
|
+
return _reductions(np.mean, values=values, mask=mask, skipna=skipna, axis=axis)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def var(
|
|
220
|
+
values: np.ndarray,
|
|
221
|
+
mask: npt.NDArray[np.bool_],
|
|
222
|
+
*,
|
|
223
|
+
skipna: bool = True,
|
|
224
|
+
axis: AxisInt | None = None,
|
|
225
|
+
ddof: int = 1,
|
|
226
|
+
):
|
|
227
|
+
if not values.size or (mask.all() and (axis is None or values.ndim == 1)):
|
|
228
|
+
return libmissing.NA
|
|
229
|
+
|
|
230
|
+
with warnings.catch_warnings():
|
|
231
|
+
warnings.simplefilter("ignore", RuntimeWarning)
|
|
232
|
+
return _reductions(
|
|
233
|
+
np.var, values=values, mask=mask, skipna=skipna, axis=axis, ddof=ddof
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def std(
|
|
238
|
+
values: np.ndarray,
|
|
239
|
+
mask: npt.NDArray[np.bool_],
|
|
240
|
+
*,
|
|
241
|
+
skipna: bool = True,
|
|
242
|
+
axis: AxisInt | None = None,
|
|
243
|
+
ddof: int = 1,
|
|
244
|
+
):
|
|
245
|
+
if not values.size or (mask.all() and (axis is None or values.ndim == 1)):
|
|
246
|
+
return libmissing.NA
|
|
247
|
+
|
|
248
|
+
with warnings.catch_warnings():
|
|
249
|
+
warnings.simplefilter("ignore", RuntimeWarning)
|
|
250
|
+
return _reductions(
|
|
251
|
+
np.std, values=values, mask=mask, skipna=skipna, axis=axis, ddof=ddof
|
|
252
|
+
)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"""
|
|
2
|
+
EA-compatible analogue to np.putmask
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import (
|
|
8
|
+
TYPE_CHECKING,
|
|
9
|
+
Any,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
from pandas._libs import lib
|
|
15
|
+
|
|
16
|
+
from pandas.core.dtypes.cast import infer_dtype_from
|
|
17
|
+
from pandas.core.dtypes.common import is_list_like
|
|
18
|
+
|
|
19
|
+
from pandas.core.arrays import ExtensionArray
|
|
20
|
+
|
|
21
|
+
if TYPE_CHECKING:
|
|
22
|
+
from pandas._typing import (
|
|
23
|
+
ArrayLike,
|
|
24
|
+
npt,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
from pandas import MultiIndex
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def putmask_inplace(values: ArrayLike, mask: npt.NDArray[np.bool_], value: Any) -> None:
|
|
31
|
+
"""
|
|
32
|
+
ExtensionArray-compatible implementation of np.putmask. The main
|
|
33
|
+
difference is we do not handle repeating or truncating like numpy.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
values: np.ndarray or ExtensionArray
|
|
38
|
+
mask : np.ndarray[bool]
|
|
39
|
+
We assume extract_bool_array has already been called.
|
|
40
|
+
value : Any
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
if (
|
|
44
|
+
not isinstance(values, np.ndarray)
|
|
45
|
+
or (values.dtype == object and not lib.is_scalar(value))
|
|
46
|
+
# GH#43424: np.putmask raises TypeError if we cannot cast between types with
|
|
47
|
+
# rule = "safe", a stricter guarantee we may not have here
|
|
48
|
+
or (
|
|
49
|
+
isinstance(value, np.ndarray) and not np.can_cast(value.dtype, values.dtype)
|
|
50
|
+
)
|
|
51
|
+
):
|
|
52
|
+
# GH#19266 using np.putmask gives unexpected results with listlike value
|
|
53
|
+
# along with object dtype
|
|
54
|
+
if is_list_like(value) and len(value) == len(values):
|
|
55
|
+
values[mask] = value[mask]
|
|
56
|
+
else:
|
|
57
|
+
values[mask] = value
|
|
58
|
+
else:
|
|
59
|
+
# GH#37833 np.putmask is more performant than __setitem__
|
|
60
|
+
np.putmask(values, mask, value)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def putmask_without_repeat(
|
|
64
|
+
values: np.ndarray, mask: npt.NDArray[np.bool_], new: Any
|
|
65
|
+
) -> None:
|
|
66
|
+
"""
|
|
67
|
+
np.putmask will truncate or repeat if `new` is a listlike with
|
|
68
|
+
len(new) != len(values). We require an exact match.
|
|
69
|
+
|
|
70
|
+
Parameters
|
|
71
|
+
----------
|
|
72
|
+
values : np.ndarray
|
|
73
|
+
mask : np.ndarray[bool]
|
|
74
|
+
new : Any
|
|
75
|
+
"""
|
|
76
|
+
if getattr(new, "ndim", 0) >= 1:
|
|
77
|
+
new = new.astype(values.dtype, copy=False)
|
|
78
|
+
|
|
79
|
+
# TODO: this prob needs some better checking for 2D cases
|
|
80
|
+
nlocs = mask.sum()
|
|
81
|
+
if nlocs > 0 and is_list_like(new) and getattr(new, "ndim", 1) == 1:
|
|
82
|
+
shape = np.shape(new)
|
|
83
|
+
# np.shape compat for if setitem_datetimelike_compat
|
|
84
|
+
# changed arraylike to list e.g. test_where_dt64_2d
|
|
85
|
+
if nlocs == shape[-1]:
|
|
86
|
+
# GH#30567
|
|
87
|
+
# If length of ``new`` is less than the length of ``values``,
|
|
88
|
+
# `np.putmask` would first repeat the ``new`` array and then
|
|
89
|
+
# assign the masked values hence produces incorrect result.
|
|
90
|
+
# `np.place` on the other hand uses the ``new`` values at it is
|
|
91
|
+
# to place in the masked locations of ``values``
|
|
92
|
+
np.place(values, mask, new)
|
|
93
|
+
# i.e. values[mask] = new
|
|
94
|
+
elif mask.shape[-1] == shape[-1] or shape[-1] == 1:
|
|
95
|
+
np.putmask(values, mask, new)
|
|
96
|
+
else:
|
|
97
|
+
raise ValueError("cannot assign mismatch length to masked array")
|
|
98
|
+
else:
|
|
99
|
+
np.putmask(values, mask, new)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def validate_putmask(
|
|
103
|
+
values: ArrayLike | MultiIndex, mask: np.ndarray
|
|
104
|
+
) -> tuple[npt.NDArray[np.bool_], bool]:
|
|
105
|
+
"""
|
|
106
|
+
Validate mask and check if this putmask operation is a no-op.
|
|
107
|
+
"""
|
|
108
|
+
mask = extract_bool_array(mask)
|
|
109
|
+
if mask.shape != values.shape:
|
|
110
|
+
raise ValueError("putmask: mask and data must be the same size")
|
|
111
|
+
|
|
112
|
+
noop = not mask.any()
|
|
113
|
+
return mask, noop
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def extract_bool_array(mask: ArrayLike) -> npt.NDArray[np.bool_]:
|
|
117
|
+
"""
|
|
118
|
+
If we have a SparseArray or BooleanArray, convert it to ndarray[bool].
|
|
119
|
+
"""
|
|
120
|
+
if isinstance(mask, ExtensionArray):
|
|
121
|
+
# We could have BooleanArray, Sparse[bool], ...
|
|
122
|
+
# Except for BooleanArray, this is equivalent to just
|
|
123
|
+
# np.asarray(mask, dtype=bool)
|
|
124
|
+
mask = mask.to_numpy(dtype=bool, na_value=False)
|
|
125
|
+
|
|
126
|
+
mask = np.asarray(mask, dtype=bool)
|
|
127
|
+
return mask
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def setitem_datetimelike_compat(values: np.ndarray, num_set: int, other: Any) -> Any:
|
|
131
|
+
"""
|
|
132
|
+
Parameters
|
|
133
|
+
----------
|
|
134
|
+
values : np.ndarray
|
|
135
|
+
num_set : int
|
|
136
|
+
For putmask, this is mask.sum()
|
|
137
|
+
other : Any
|
|
138
|
+
"""
|
|
139
|
+
if values.dtype == object:
|
|
140
|
+
dtype, _ = infer_dtype_from(other)
|
|
141
|
+
|
|
142
|
+
if lib.is_np_dtype(dtype, "mM"):
|
|
143
|
+
# https://github.com/numpy/numpy/issues/12550
|
|
144
|
+
# timedelta64 will incorrectly cast to int
|
|
145
|
+
if not is_list_like(other):
|
|
146
|
+
other = [other] * num_set
|
|
147
|
+
else:
|
|
148
|
+
other = list(other)
|
|
149
|
+
|
|
150
|
+
return other
|