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,454 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import numbers
|
|
4
|
+
from typing import (
|
|
5
|
+
TYPE_CHECKING,
|
|
6
|
+
ClassVar,
|
|
7
|
+
Self,
|
|
8
|
+
cast,
|
|
9
|
+
)
|
|
10
|
+
import warnings
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
from pandas._libs import (
|
|
15
|
+
lib,
|
|
16
|
+
missing as libmissing,
|
|
17
|
+
)
|
|
18
|
+
from pandas.errors import Pandas4Warning
|
|
19
|
+
from pandas.util._decorators import set_module
|
|
20
|
+
from pandas.util._exceptions import find_stack_level
|
|
21
|
+
|
|
22
|
+
from pandas.core.dtypes.common import is_list_like
|
|
23
|
+
from pandas.core.dtypes.dtypes import register_extension_dtype
|
|
24
|
+
from pandas.core.dtypes.missing import isna
|
|
25
|
+
|
|
26
|
+
from pandas.core import ops
|
|
27
|
+
from pandas.core.array_algos import masked_accumulations
|
|
28
|
+
from pandas.core.arrays import ExtensionArray
|
|
29
|
+
from pandas.core.arrays.masked import (
|
|
30
|
+
BaseMaskedArray,
|
|
31
|
+
BaseMaskedDtype,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
if TYPE_CHECKING:
|
|
35
|
+
import pyarrow
|
|
36
|
+
|
|
37
|
+
from pandas._typing import (
|
|
38
|
+
DtypeObj,
|
|
39
|
+
npt,
|
|
40
|
+
type_t,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
from pandas.core.dtypes.dtypes import ExtensionDtype
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@register_extension_dtype
|
|
47
|
+
@set_module("pandas")
|
|
48
|
+
class BooleanDtype(BaseMaskedDtype):
|
|
49
|
+
"""
|
|
50
|
+
Extension dtype for boolean data.
|
|
51
|
+
|
|
52
|
+
This is a pandas Extension dtype for boolean data with support for
|
|
53
|
+
missing values. BooleanDtype is the dtype companion to :class:`.BooleanArray`,
|
|
54
|
+
which implements Kleene logic (sometimes called three-value logic) for
|
|
55
|
+
logical operations. See :ref:`boolean.kleene` for more.
|
|
56
|
+
|
|
57
|
+
.. warning::
|
|
58
|
+
|
|
59
|
+
BooleanDtype is considered experimental. The implementation and
|
|
60
|
+
parts of the API may change without warning.
|
|
61
|
+
|
|
62
|
+
Attributes
|
|
63
|
+
----------
|
|
64
|
+
None
|
|
65
|
+
|
|
66
|
+
Methods
|
|
67
|
+
-------
|
|
68
|
+
None
|
|
69
|
+
|
|
70
|
+
See Also
|
|
71
|
+
--------
|
|
72
|
+
arrays.BooleanArray : Array of boolean (True/False) data with missing values.
|
|
73
|
+
Int64Dtype : Extension dtype for int64 integer data.
|
|
74
|
+
StringDtype : Extension dtype for string data.
|
|
75
|
+
|
|
76
|
+
Examples
|
|
77
|
+
--------
|
|
78
|
+
>>> pd.BooleanDtype()
|
|
79
|
+
BooleanDtype
|
|
80
|
+
|
|
81
|
+
>>> pd.array([True, False, None], dtype=pd.BooleanDtype())
|
|
82
|
+
<BooleanArray>
|
|
83
|
+
[True, False, <NA>]
|
|
84
|
+
Length: 3, dtype: boolean
|
|
85
|
+
|
|
86
|
+
>>> pd.array([True, False, None], dtype="boolean")
|
|
87
|
+
<BooleanArray>
|
|
88
|
+
[True, False, <NA>]
|
|
89
|
+
Length: 3, dtype: boolean
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
name: ClassVar[str] = "boolean"
|
|
93
|
+
|
|
94
|
+
# The value used to fill '_data' to avoid upcasting
|
|
95
|
+
_internal_fill_value = False
|
|
96
|
+
|
|
97
|
+
# https://github.com/python/mypy/issues/4125
|
|
98
|
+
# error: Signature of "type" incompatible with supertype "BaseMaskedDtype"
|
|
99
|
+
@property
|
|
100
|
+
def type(self) -> type: # type: ignore[override]
|
|
101
|
+
return np.bool_
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
def kind(self) -> str:
|
|
105
|
+
return "b"
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def numpy_dtype(self) -> np.dtype:
|
|
109
|
+
return np.dtype("bool")
|
|
110
|
+
|
|
111
|
+
def construct_array_type(self) -> type_t[BooleanArray]:
|
|
112
|
+
"""
|
|
113
|
+
Return the array type associated with this dtype.
|
|
114
|
+
|
|
115
|
+
Returns
|
|
116
|
+
-------
|
|
117
|
+
type
|
|
118
|
+
"""
|
|
119
|
+
return BooleanArray
|
|
120
|
+
|
|
121
|
+
def __repr__(self) -> str:
|
|
122
|
+
return "BooleanDtype"
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def _is_boolean(self) -> bool:
|
|
126
|
+
return True
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def _is_numeric(self) -> bool:
|
|
130
|
+
return True
|
|
131
|
+
|
|
132
|
+
def __from_arrow__(
|
|
133
|
+
self, array: pyarrow.Array | pyarrow.ChunkedArray
|
|
134
|
+
) -> BooleanArray:
|
|
135
|
+
"""
|
|
136
|
+
Construct BooleanArray from pyarrow Array/ChunkedArray.
|
|
137
|
+
"""
|
|
138
|
+
import pyarrow
|
|
139
|
+
|
|
140
|
+
if array.type != pyarrow.bool_() and not pyarrow.types.is_null(array.type):
|
|
141
|
+
raise TypeError(f"Expected array of boolean type, got {array.type} instead")
|
|
142
|
+
|
|
143
|
+
if isinstance(array, pyarrow.Array):
|
|
144
|
+
chunks = [array]
|
|
145
|
+
length = len(array)
|
|
146
|
+
else:
|
|
147
|
+
# pyarrow.ChunkedArray
|
|
148
|
+
chunks = array.chunks
|
|
149
|
+
length = array.length()
|
|
150
|
+
|
|
151
|
+
if pyarrow.types.is_null(array.type):
|
|
152
|
+
mask = np.ones(length, dtype=bool)
|
|
153
|
+
# No need to init data, since all null
|
|
154
|
+
data = np.empty(length, dtype=bool)
|
|
155
|
+
return BooleanArray(data, mask)
|
|
156
|
+
|
|
157
|
+
results = []
|
|
158
|
+
for arr in chunks:
|
|
159
|
+
buflist = arr.buffers()
|
|
160
|
+
data = pyarrow.BooleanArray.from_buffers(
|
|
161
|
+
arr.type, len(arr), [None, buflist[1]], offset=arr.offset
|
|
162
|
+
).to_numpy(zero_copy_only=False)
|
|
163
|
+
if arr.null_count != 0:
|
|
164
|
+
mask = pyarrow.BooleanArray.from_buffers(
|
|
165
|
+
arr.type, len(arr), [None, buflist[0]], offset=arr.offset
|
|
166
|
+
).to_numpy(zero_copy_only=False)
|
|
167
|
+
mask = ~mask
|
|
168
|
+
else:
|
|
169
|
+
mask = np.zeros(len(arr), dtype=bool)
|
|
170
|
+
|
|
171
|
+
bool_arr = BooleanArray(data, mask)
|
|
172
|
+
results.append(bool_arr)
|
|
173
|
+
|
|
174
|
+
if not results:
|
|
175
|
+
return BooleanArray(
|
|
176
|
+
np.array([], dtype=np.bool_), np.array([], dtype=np.bool_)
|
|
177
|
+
)
|
|
178
|
+
else:
|
|
179
|
+
return BooleanArray._concat_same_type(results)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def coerce_to_array(
|
|
183
|
+
values, mask=None, copy: bool = False
|
|
184
|
+
) -> tuple[np.ndarray, np.ndarray]:
|
|
185
|
+
"""
|
|
186
|
+
Coerce the input values array to numpy arrays with a mask.
|
|
187
|
+
|
|
188
|
+
Parameters
|
|
189
|
+
----------
|
|
190
|
+
values : 1D list-like
|
|
191
|
+
mask : bool 1D array, optional
|
|
192
|
+
copy : bool, default False
|
|
193
|
+
if True, copy the input
|
|
194
|
+
|
|
195
|
+
Returns
|
|
196
|
+
-------
|
|
197
|
+
tuple of (values, mask)
|
|
198
|
+
"""
|
|
199
|
+
if isinstance(values, BooleanArray):
|
|
200
|
+
if mask is not None:
|
|
201
|
+
raise ValueError("cannot pass mask for BooleanArray input")
|
|
202
|
+
values, mask = values._data, values._mask
|
|
203
|
+
if copy:
|
|
204
|
+
values = values.copy()
|
|
205
|
+
mask = mask.copy()
|
|
206
|
+
return values, mask
|
|
207
|
+
|
|
208
|
+
mask_values = None
|
|
209
|
+
if isinstance(values, np.ndarray) and values.dtype == np.bool_:
|
|
210
|
+
if copy:
|
|
211
|
+
values = values.copy()
|
|
212
|
+
elif isinstance(values, np.ndarray) and values.dtype.kind in "iufcb":
|
|
213
|
+
mask_values = isna(values)
|
|
214
|
+
|
|
215
|
+
values_bool = np.zeros(len(values), dtype=bool)
|
|
216
|
+
values_bool[~mask_values] = values[~mask_values].astype(bool)
|
|
217
|
+
|
|
218
|
+
if not np.all(
|
|
219
|
+
values_bool[~mask_values].astype(values.dtype) == values[~mask_values]
|
|
220
|
+
):
|
|
221
|
+
raise TypeError("Need to pass bool-like values")
|
|
222
|
+
|
|
223
|
+
values = values_bool
|
|
224
|
+
else:
|
|
225
|
+
values_object = np.asarray(values, dtype=object)
|
|
226
|
+
|
|
227
|
+
inferred_dtype = lib.infer_dtype(values_object, skipna=True)
|
|
228
|
+
integer_like = ("floating", "integer", "mixed-integer-float")
|
|
229
|
+
if inferred_dtype not in ("boolean", "empty", *integer_like):
|
|
230
|
+
raise TypeError("Need to pass bool-like values")
|
|
231
|
+
|
|
232
|
+
# mypy does not narrow the type of mask_values to npt.NDArray[np.bool_]
|
|
233
|
+
# within this branch, it assumes it can also be None
|
|
234
|
+
mask_values = cast("npt.NDArray[np.bool_]", isna(values_object))
|
|
235
|
+
values = np.zeros(len(values), dtype=bool)
|
|
236
|
+
values[~mask_values] = values_object[~mask_values].astype(bool)
|
|
237
|
+
|
|
238
|
+
# if the values were integer-like, validate it were actually 0/1's
|
|
239
|
+
if (inferred_dtype in integer_like) and not (
|
|
240
|
+
np.all(
|
|
241
|
+
values[~mask_values].astype(float)
|
|
242
|
+
== values_object[~mask_values].astype(float)
|
|
243
|
+
)
|
|
244
|
+
):
|
|
245
|
+
raise TypeError("Need to pass bool-like values")
|
|
246
|
+
|
|
247
|
+
if mask is None and mask_values is None:
|
|
248
|
+
mask = np.zeros(values.shape, dtype=bool)
|
|
249
|
+
elif mask is None:
|
|
250
|
+
mask = mask_values
|
|
251
|
+
elif isinstance(mask, np.ndarray) and mask.dtype == np.bool_:
|
|
252
|
+
if mask_values is not None:
|
|
253
|
+
mask = mask | mask_values
|
|
254
|
+
elif copy:
|
|
255
|
+
mask = mask.copy()
|
|
256
|
+
else:
|
|
257
|
+
mask = np.array(mask, dtype=bool)
|
|
258
|
+
if mask_values is not None:
|
|
259
|
+
mask = mask | mask_values
|
|
260
|
+
|
|
261
|
+
if values.shape != mask.shape:
|
|
262
|
+
raise ValueError("values.shape and mask.shape must match")
|
|
263
|
+
|
|
264
|
+
return values, mask
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
@set_module("pandas.arrays")
|
|
268
|
+
class BooleanArray(BaseMaskedArray):
|
|
269
|
+
"""
|
|
270
|
+
Array of boolean (True/False) data with missing values.
|
|
271
|
+
|
|
272
|
+
This is a pandas Extension array for boolean data, under the hood
|
|
273
|
+
represented by 2 numpy arrays: a boolean array with the data and
|
|
274
|
+
a boolean array with the mask (True indicating missing).
|
|
275
|
+
|
|
276
|
+
BooleanArray implements Kleene logic (sometimes called three-value
|
|
277
|
+
logic) for logical operations. See :ref:`boolean.kleene` for more.
|
|
278
|
+
|
|
279
|
+
To construct a BooleanArray from generic array-like input, use
|
|
280
|
+
:func:`pandas.array` specifying ``dtype="boolean"`` (see examples
|
|
281
|
+
below).
|
|
282
|
+
|
|
283
|
+
.. warning::
|
|
284
|
+
|
|
285
|
+
BooleanArray is considered experimental. The implementation and
|
|
286
|
+
parts of the API may change without warning.
|
|
287
|
+
|
|
288
|
+
Parameters
|
|
289
|
+
----------
|
|
290
|
+
values : numpy.ndarray
|
|
291
|
+
A 1-d boolean-dtype array with the data.
|
|
292
|
+
mask : numpy.ndarray
|
|
293
|
+
A 1-d boolean-dtype array indicating missing values (True
|
|
294
|
+
indicates missing).
|
|
295
|
+
copy : bool, default False
|
|
296
|
+
Whether to copy the `values` and `mask` arrays.
|
|
297
|
+
|
|
298
|
+
Attributes
|
|
299
|
+
----------
|
|
300
|
+
None
|
|
301
|
+
|
|
302
|
+
Methods
|
|
303
|
+
-------
|
|
304
|
+
None
|
|
305
|
+
|
|
306
|
+
Returns
|
|
307
|
+
-------
|
|
308
|
+
BooleanArray
|
|
309
|
+
|
|
310
|
+
See Also
|
|
311
|
+
--------
|
|
312
|
+
array : Create an array from data with the appropriate dtype.
|
|
313
|
+
BooleanDtype : Extension dtype for boolean data.
|
|
314
|
+
Series : One-dimensional ndarray with axis labels (including time series).
|
|
315
|
+
DataFrame : Two-dimensional, size-mutable, potentially heterogeneous tabular data.
|
|
316
|
+
|
|
317
|
+
Examples
|
|
318
|
+
--------
|
|
319
|
+
Create a BooleanArray with :func:`pandas.array`:
|
|
320
|
+
|
|
321
|
+
>>> pd.array([True, False, None], dtype="boolean")
|
|
322
|
+
<BooleanArray>
|
|
323
|
+
[True, False, <NA>]
|
|
324
|
+
Length: 3, dtype: boolean
|
|
325
|
+
"""
|
|
326
|
+
|
|
327
|
+
_TRUE_VALUES = {"True", "TRUE", "true", "1", "1.0"}
|
|
328
|
+
_FALSE_VALUES = {"False", "FALSE", "false", "0", "0.0"}
|
|
329
|
+
|
|
330
|
+
@classmethod
|
|
331
|
+
def _simple_new(cls, values: np.ndarray, mask: npt.NDArray[np.bool_]) -> Self:
|
|
332
|
+
result = super()._simple_new(values, mask)
|
|
333
|
+
result._dtype = BooleanDtype()
|
|
334
|
+
return result
|
|
335
|
+
|
|
336
|
+
def __init__(
|
|
337
|
+
self, values: np.ndarray, mask: np.ndarray, copy: bool = False
|
|
338
|
+
) -> None:
|
|
339
|
+
if not (isinstance(values, np.ndarray) and values.dtype == np.bool_):
|
|
340
|
+
raise TypeError(
|
|
341
|
+
"values should be boolean numpy array. Use "
|
|
342
|
+
"the 'pd.array' function instead"
|
|
343
|
+
)
|
|
344
|
+
self._dtype = BooleanDtype()
|
|
345
|
+
super().__init__(values, mask, copy=copy)
|
|
346
|
+
|
|
347
|
+
@property
|
|
348
|
+
def dtype(self) -> BooleanDtype:
|
|
349
|
+
return self._dtype
|
|
350
|
+
|
|
351
|
+
@classmethod
|
|
352
|
+
def _from_sequence_of_strings(
|
|
353
|
+
cls,
|
|
354
|
+
strings: list[str],
|
|
355
|
+
*,
|
|
356
|
+
dtype: ExtensionDtype,
|
|
357
|
+
copy: bool = False,
|
|
358
|
+
true_values: list[str] | None = None,
|
|
359
|
+
false_values: list[str] | None = None,
|
|
360
|
+
none_values: list[str] | None = None,
|
|
361
|
+
) -> BooleanArray:
|
|
362
|
+
true_values_union = cls._TRUE_VALUES.union(true_values or [])
|
|
363
|
+
false_values_union = cls._FALSE_VALUES.union(false_values or [])
|
|
364
|
+
|
|
365
|
+
if none_values is None:
|
|
366
|
+
none_values = []
|
|
367
|
+
|
|
368
|
+
def map_string(s) -> bool | None:
|
|
369
|
+
if s in true_values_union:
|
|
370
|
+
return True
|
|
371
|
+
elif s in false_values_union:
|
|
372
|
+
return False
|
|
373
|
+
elif s in none_values:
|
|
374
|
+
return None
|
|
375
|
+
else:
|
|
376
|
+
raise ValueError(f"{s} cannot be cast to bool")
|
|
377
|
+
|
|
378
|
+
scalars = np.array(strings, dtype=object)
|
|
379
|
+
mask = isna(scalars)
|
|
380
|
+
scalars[~mask] = list(map(map_string, scalars[~mask]))
|
|
381
|
+
return cls._from_sequence(scalars, dtype=dtype, copy=copy)
|
|
382
|
+
|
|
383
|
+
_HANDLED_TYPES = (np.ndarray, numbers.Number, bool, np.bool_)
|
|
384
|
+
|
|
385
|
+
@classmethod
|
|
386
|
+
def _coerce_to_array(
|
|
387
|
+
cls, value, *, dtype: DtypeObj, copy: bool = False
|
|
388
|
+
) -> tuple[np.ndarray, np.ndarray]:
|
|
389
|
+
if dtype:
|
|
390
|
+
assert dtype == "boolean"
|
|
391
|
+
return coerce_to_array(value, copy=copy)
|
|
392
|
+
|
|
393
|
+
def _logical_method(self, other, op):
|
|
394
|
+
assert op.__name__ in {"or_", "ror_", "and_", "rand_", "xor", "rxor"}
|
|
395
|
+
other_is_scalar = lib.is_scalar(other)
|
|
396
|
+
mask = None
|
|
397
|
+
|
|
398
|
+
if isinstance(other, BooleanArray):
|
|
399
|
+
other, mask = other._data, other._mask
|
|
400
|
+
elif is_list_like(other):
|
|
401
|
+
if not isinstance(
|
|
402
|
+
other, (list, ExtensionArray, np.ndarray)
|
|
403
|
+
) and not ops.has_castable_attr(other):
|
|
404
|
+
warnings.warn(
|
|
405
|
+
f"Operation with {type(other).__name__} is deprecated. "
|
|
406
|
+
"In a future version these will be treated as scalar-like. "
|
|
407
|
+
"To retain the old behavior, explicitly wrap in a Series "
|
|
408
|
+
"instead.",
|
|
409
|
+
Pandas4Warning,
|
|
410
|
+
stacklevel=find_stack_level(),
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
other = np.asarray(other, dtype="bool")
|
|
414
|
+
if other.ndim > 1:
|
|
415
|
+
return NotImplemented
|
|
416
|
+
other, mask = coerce_to_array(other, copy=False)
|
|
417
|
+
elif isinstance(other, np.bool_):
|
|
418
|
+
other = other.item()
|
|
419
|
+
|
|
420
|
+
if other_is_scalar and other is not libmissing.NA and not lib.is_bool(other):
|
|
421
|
+
raise TypeError(
|
|
422
|
+
"'other' should be pandas.NA or a bool. "
|
|
423
|
+
f"Got {type(other).__name__} instead."
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
if not other_is_scalar and len(self) != len(other):
|
|
427
|
+
raise ValueError("Lengths must match")
|
|
428
|
+
|
|
429
|
+
if op.__name__ in {"or_", "ror_"}:
|
|
430
|
+
result, mask = ops.kleene_or(self._data, other, self._mask, mask)
|
|
431
|
+
elif op.__name__ in {"and_", "rand_"}:
|
|
432
|
+
result, mask = ops.kleene_and(self._data, other, self._mask, mask)
|
|
433
|
+
else:
|
|
434
|
+
# i.e. xor, rxor
|
|
435
|
+
result, mask = ops.kleene_xor(self._data, other, self._mask, mask)
|
|
436
|
+
|
|
437
|
+
# i.e. BooleanArray
|
|
438
|
+
return self._maybe_mask_result(result, mask)
|
|
439
|
+
|
|
440
|
+
def _accumulate(
|
|
441
|
+
self, name: str, *, skipna: bool = True, **kwargs
|
|
442
|
+
) -> BaseMaskedArray:
|
|
443
|
+
data = self._data
|
|
444
|
+
mask = self._mask
|
|
445
|
+
if name in ("cummin", "cummax"):
|
|
446
|
+
op = getattr(masked_accumulations, name)
|
|
447
|
+
data, mask = op(data, mask, skipna=skipna, **kwargs)
|
|
448
|
+
return self._simple_new(data, mask)
|
|
449
|
+
else:
|
|
450
|
+
from pandas.core.arrays import IntegerArray
|
|
451
|
+
|
|
452
|
+
return IntegerArray(data.astype(int), mask)._accumulate(
|
|
453
|
+
name, skipna=skipna, **kwargs
|
|
454
|
+
)
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import (
|
|
4
|
+
TYPE_CHECKING,
|
|
5
|
+
Any,
|
|
6
|
+
ClassVar,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
|
|
11
|
+
from pandas.util._decorators import set_module
|
|
12
|
+
|
|
13
|
+
from pandas.core.dtypes.base import register_extension_dtype
|
|
14
|
+
from pandas.core.dtypes.common import is_float_dtype
|
|
15
|
+
|
|
16
|
+
from pandas.core.arrays.numeric import (
|
|
17
|
+
NumericArray,
|
|
18
|
+
NumericDtype,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
if TYPE_CHECKING:
|
|
22
|
+
from collections.abc import Callable
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class FloatingDtype(NumericDtype):
|
|
26
|
+
"""
|
|
27
|
+
An ExtensionDtype to hold a single size of floating dtype.
|
|
28
|
+
|
|
29
|
+
These specific implementations are subclasses of the non-public
|
|
30
|
+
FloatingDtype. For example we have Float32Dtype to represent float32.
|
|
31
|
+
|
|
32
|
+
The attributes name & type are set when these subclasses are created.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
# The value used to fill '_data' to avoid upcasting
|
|
36
|
+
_internal_fill_value = np.nan
|
|
37
|
+
_default_np_dtype = np.dtype(np.float64)
|
|
38
|
+
_checker: Callable[[Any], bool] = is_float_dtype
|
|
39
|
+
|
|
40
|
+
def construct_array_type(self) -> type[FloatingArray]:
|
|
41
|
+
"""
|
|
42
|
+
Return the array type associated with this dtype.
|
|
43
|
+
|
|
44
|
+
Returns
|
|
45
|
+
-------
|
|
46
|
+
type
|
|
47
|
+
"""
|
|
48
|
+
return FloatingArray
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def _get_dtype_mapping(cls) -> dict[np.dtype, FloatingDtype]:
|
|
52
|
+
return NUMPY_FLOAT_TO_DTYPE
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def _safe_cast(cls, values: np.ndarray, dtype: np.dtype, copy: bool) -> np.ndarray:
|
|
56
|
+
"""
|
|
57
|
+
Safely cast the values to the given dtype.
|
|
58
|
+
|
|
59
|
+
"safe" in this context means the casting is lossless.
|
|
60
|
+
"""
|
|
61
|
+
# This is really only here for compatibility with IntegerDtype
|
|
62
|
+
# Here for compat with IntegerDtype
|
|
63
|
+
return values.astype(dtype, copy=copy)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@set_module("pandas.arrays")
|
|
67
|
+
class FloatingArray(NumericArray):
|
|
68
|
+
"""
|
|
69
|
+
Array of floating (optional missing) values.
|
|
70
|
+
|
|
71
|
+
.. warning::
|
|
72
|
+
|
|
73
|
+
FloatingArray is currently experimental, and its API or internal
|
|
74
|
+
implementation may change without warning. Especially the behaviour
|
|
75
|
+
regarding NaN (distinct from NA missing values) is subject to change.
|
|
76
|
+
|
|
77
|
+
We represent a FloatingArray with 2 numpy arrays:
|
|
78
|
+
|
|
79
|
+
- data: contains a numpy float array of the appropriate dtype
|
|
80
|
+
- mask: a boolean array holding a mask on the data, True is missing
|
|
81
|
+
|
|
82
|
+
To construct a FloatingArray from generic array-like input, use
|
|
83
|
+
:func:`pandas.array` with one of the float dtypes (see examples).
|
|
84
|
+
|
|
85
|
+
See :ref:`integer_na` for more.
|
|
86
|
+
|
|
87
|
+
Parameters
|
|
88
|
+
----------
|
|
89
|
+
values : numpy.ndarray
|
|
90
|
+
A 1-d float-dtype array.
|
|
91
|
+
mask : numpy.ndarray
|
|
92
|
+
A 1-d boolean-dtype array indicating missing values.
|
|
93
|
+
copy : bool, default False
|
|
94
|
+
Whether to copy the `values` and `mask`.
|
|
95
|
+
|
|
96
|
+
Attributes
|
|
97
|
+
----------
|
|
98
|
+
None
|
|
99
|
+
|
|
100
|
+
Methods
|
|
101
|
+
-------
|
|
102
|
+
None
|
|
103
|
+
|
|
104
|
+
Returns
|
|
105
|
+
-------
|
|
106
|
+
FloatingArray
|
|
107
|
+
|
|
108
|
+
See Also
|
|
109
|
+
--------
|
|
110
|
+
array : Create an array.
|
|
111
|
+
Float32Dtype : Float32 dtype for FloatingArray.
|
|
112
|
+
Float64Dtype : Float64 dtype for FloatingArray.
|
|
113
|
+
Series : One-dimensional labeled array capable of holding data.
|
|
114
|
+
DataFrame : Two-dimensional, size-mutable, potentially heterogeneous tabular data.
|
|
115
|
+
|
|
116
|
+
Examples
|
|
117
|
+
--------
|
|
118
|
+
Create a FloatingArray with :func:`pandas.array`:
|
|
119
|
+
|
|
120
|
+
>>> pd.array([0.1, None, 0.3], dtype=pd.Float32Dtype())
|
|
121
|
+
<FloatingArray>
|
|
122
|
+
[0.1, <NA>, 0.3]
|
|
123
|
+
Length: 3, dtype: Float32
|
|
124
|
+
|
|
125
|
+
String aliases for the dtypes are also available. They are capitalized.
|
|
126
|
+
|
|
127
|
+
>>> pd.array([0.1, None, 0.3], dtype="Float32")
|
|
128
|
+
<FloatingArray>
|
|
129
|
+
[0.1, <NA>, 0.3]
|
|
130
|
+
Length: 3, dtype: Float32
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
_dtype_cls = FloatingDtype
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
_dtype_docstring = """
|
|
137
|
+
An ExtensionDtype for {dtype} data.
|
|
138
|
+
|
|
139
|
+
This dtype uses ``pd.NA`` as missing value indicator.
|
|
140
|
+
|
|
141
|
+
Attributes
|
|
142
|
+
----------
|
|
143
|
+
None
|
|
144
|
+
|
|
145
|
+
Methods
|
|
146
|
+
-------
|
|
147
|
+
None
|
|
148
|
+
|
|
149
|
+
See Also
|
|
150
|
+
--------
|
|
151
|
+
CategoricalDtype : Type for categorical data with the categories and orderedness.
|
|
152
|
+
IntegerDtype : An ExtensionDtype to hold a single size & kind of integer dtype.
|
|
153
|
+
StringDtype : An ExtensionDtype for string data.
|
|
154
|
+
|
|
155
|
+
Examples
|
|
156
|
+
--------
|
|
157
|
+
For Float32Dtype:
|
|
158
|
+
|
|
159
|
+
>>> ser = pd.Series([2.25, pd.NA], dtype=pd.Float32Dtype())
|
|
160
|
+
>>> ser.dtype
|
|
161
|
+
Float32Dtype()
|
|
162
|
+
|
|
163
|
+
For Float64Dtype:
|
|
164
|
+
|
|
165
|
+
>>> ser = pd.Series([2.25, pd.NA], dtype=pd.Float64Dtype())
|
|
166
|
+
>>> ser.dtype
|
|
167
|
+
Float64Dtype()
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
# create the Dtype
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
@register_extension_dtype
|
|
174
|
+
@set_module("pandas")
|
|
175
|
+
class Float32Dtype(FloatingDtype):
|
|
176
|
+
type = np.float32
|
|
177
|
+
name: ClassVar[str] = "Float32"
|
|
178
|
+
__doc__ = _dtype_docstring.format(dtype="float32")
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
@register_extension_dtype
|
|
182
|
+
@set_module("pandas")
|
|
183
|
+
class Float64Dtype(FloatingDtype):
|
|
184
|
+
type = np.float64
|
|
185
|
+
name: ClassVar[str] = "Float64"
|
|
186
|
+
__doc__ = _dtype_docstring.format(dtype="float64")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
NUMPY_FLOAT_TO_DTYPE: dict[np.dtype, FloatingDtype] = {
|
|
190
|
+
np.dtype(np.float32): Float32Dtype(),
|
|
191
|
+
np.dtype(np.float64): Float64Dtype(),
|
|
192
|
+
}
|