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,520 @@
|
|
|
1
|
+
"""
|
|
2
|
+
|
|
3
|
+
accessor.py contains base classes for implementing accessor properties
|
|
4
|
+
that can be mixed into or pinned onto other pandas classes.
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import functools
|
|
11
|
+
from typing import (
|
|
12
|
+
TYPE_CHECKING,
|
|
13
|
+
final,
|
|
14
|
+
)
|
|
15
|
+
import warnings
|
|
16
|
+
|
|
17
|
+
from pandas.util._decorators import (
|
|
18
|
+
set_module,
|
|
19
|
+
)
|
|
20
|
+
from pandas.util._exceptions import find_stack_level
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from collections.abc import Callable
|
|
24
|
+
|
|
25
|
+
from pandas._typing import TypeT
|
|
26
|
+
|
|
27
|
+
from pandas import Index
|
|
28
|
+
from pandas.core.generic import NDFrame
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class DirNamesMixin:
|
|
32
|
+
_accessors: set[str] = set()
|
|
33
|
+
_hidden_attrs: frozenset[str] = frozenset()
|
|
34
|
+
|
|
35
|
+
@final
|
|
36
|
+
def _dir_deletions(self) -> set[str]:
|
|
37
|
+
"""
|
|
38
|
+
Delete unwanted __dir__ for this object.
|
|
39
|
+
"""
|
|
40
|
+
return self._accessors | self._hidden_attrs
|
|
41
|
+
|
|
42
|
+
def _dir_additions(self) -> set[str]:
|
|
43
|
+
"""
|
|
44
|
+
Add additional __dir__ for this object.
|
|
45
|
+
"""
|
|
46
|
+
return {accessor for accessor in self._accessors if hasattr(self, accessor)}
|
|
47
|
+
|
|
48
|
+
def __dir__(self) -> list[str]:
|
|
49
|
+
"""
|
|
50
|
+
Provide method name lookup and completion.
|
|
51
|
+
|
|
52
|
+
Notes
|
|
53
|
+
-----
|
|
54
|
+
Only provide 'public' methods.
|
|
55
|
+
"""
|
|
56
|
+
rv = set(super().__dir__())
|
|
57
|
+
rv = (rv - self._dir_deletions()) | self._dir_additions()
|
|
58
|
+
return sorted(rv)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class PandasDelegate:
|
|
62
|
+
"""
|
|
63
|
+
Abstract base class for delegating methods/properties.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
def _delegate_property_get(self, name: str, *args, **kwargs):
|
|
67
|
+
raise TypeError(f"You cannot access the property {name}")
|
|
68
|
+
|
|
69
|
+
def _delegate_property_set(self, name: str, value, *args, **kwargs) -> None:
|
|
70
|
+
raise TypeError(f"The property {name} cannot be set")
|
|
71
|
+
|
|
72
|
+
def _delegate_method(self, name: str, *args, **kwargs):
|
|
73
|
+
raise TypeError(f"You cannot call method {name}")
|
|
74
|
+
|
|
75
|
+
@classmethod
|
|
76
|
+
def _add_delegate_accessors(
|
|
77
|
+
cls,
|
|
78
|
+
delegate,
|
|
79
|
+
accessors: list[str],
|
|
80
|
+
typ: str,
|
|
81
|
+
overwrite: bool = False,
|
|
82
|
+
accessor_mapping: Callable[[str], str] = lambda x: x,
|
|
83
|
+
raise_on_missing: bool = True,
|
|
84
|
+
) -> None:
|
|
85
|
+
"""
|
|
86
|
+
Add accessors to cls from the delegate class.
|
|
87
|
+
|
|
88
|
+
Parameters
|
|
89
|
+
----------
|
|
90
|
+
cls
|
|
91
|
+
Class to add the methods/properties to.
|
|
92
|
+
delegate
|
|
93
|
+
Class to get methods/properties and docstrings.
|
|
94
|
+
accessors : list of str
|
|
95
|
+
List of accessors to add.
|
|
96
|
+
typ : {'property', 'method'}
|
|
97
|
+
overwrite : bool, default False
|
|
98
|
+
Overwrite the method/property in the target class if it exists.
|
|
99
|
+
accessor_mapping: Callable, default lambda x: x
|
|
100
|
+
Callable to map the delegate's function to the cls' function.
|
|
101
|
+
raise_on_missing: bool, default True
|
|
102
|
+
Raise if an accessor does not exist on delegate.
|
|
103
|
+
False skips the missing accessor.
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
def _create_delegator_property(name: str):
|
|
107
|
+
def _getter(self):
|
|
108
|
+
return self._delegate_property_get(name)
|
|
109
|
+
|
|
110
|
+
def _setter(self, new_values):
|
|
111
|
+
return self._delegate_property_set(name, new_values)
|
|
112
|
+
|
|
113
|
+
_getter.__name__ = name
|
|
114
|
+
_setter.__name__ = name
|
|
115
|
+
|
|
116
|
+
return property(
|
|
117
|
+
fget=_getter,
|
|
118
|
+
fset=_setter,
|
|
119
|
+
doc=getattr(delegate, accessor_mapping(name)).__doc__,
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
def _create_delegator_method(name: str):
|
|
123
|
+
method = getattr(delegate, accessor_mapping(name))
|
|
124
|
+
|
|
125
|
+
@functools.wraps(method)
|
|
126
|
+
def f(self, *args, **kwargs):
|
|
127
|
+
return self._delegate_method(name, *args, **kwargs)
|
|
128
|
+
|
|
129
|
+
return f
|
|
130
|
+
|
|
131
|
+
for name in accessors:
|
|
132
|
+
if (
|
|
133
|
+
not raise_on_missing
|
|
134
|
+
and getattr(delegate, accessor_mapping(name), None) is None
|
|
135
|
+
):
|
|
136
|
+
continue
|
|
137
|
+
|
|
138
|
+
if typ == "property":
|
|
139
|
+
f = _create_delegator_property(name)
|
|
140
|
+
else:
|
|
141
|
+
f = _create_delegator_method(name)
|
|
142
|
+
|
|
143
|
+
# don't overwrite existing methods/properties
|
|
144
|
+
if overwrite or not hasattr(cls, name):
|
|
145
|
+
setattr(cls, name, f)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def delegate_names(
|
|
149
|
+
delegate,
|
|
150
|
+
accessors: list[str],
|
|
151
|
+
typ: str,
|
|
152
|
+
overwrite: bool = False,
|
|
153
|
+
accessor_mapping: Callable[[str], str] = lambda x: x,
|
|
154
|
+
raise_on_missing: bool = True,
|
|
155
|
+
):
|
|
156
|
+
"""
|
|
157
|
+
Add delegated names to a class using a class decorator. This provides
|
|
158
|
+
an alternative usage to directly calling `_add_delegate_accessors`
|
|
159
|
+
below a class definition.
|
|
160
|
+
|
|
161
|
+
Parameters
|
|
162
|
+
----------
|
|
163
|
+
delegate : object
|
|
164
|
+
The class to get methods/properties & docstrings.
|
|
165
|
+
accessors : Sequence[str]
|
|
166
|
+
List of accessor to add.
|
|
167
|
+
typ : {'property', 'method'}
|
|
168
|
+
overwrite : bool, default False
|
|
169
|
+
Overwrite the method/property in the target class if it exists.
|
|
170
|
+
accessor_mapping: Callable, default lambda x: x
|
|
171
|
+
Callable to map the delegate's function to the cls' function.
|
|
172
|
+
raise_on_missing: bool, default True
|
|
173
|
+
Raise if an accessor does not exist on delegate.
|
|
174
|
+
False skips the missing accessor.
|
|
175
|
+
|
|
176
|
+
Returns
|
|
177
|
+
-------
|
|
178
|
+
callable
|
|
179
|
+
A class decorator.
|
|
180
|
+
|
|
181
|
+
Examples
|
|
182
|
+
--------
|
|
183
|
+
@delegate_names(Categorical, ["categories", "ordered"], "property")
|
|
184
|
+
class CategoricalAccessor(PandasDelegate):
|
|
185
|
+
[...]
|
|
186
|
+
"""
|
|
187
|
+
|
|
188
|
+
def add_delegate_accessors(cls):
|
|
189
|
+
cls._add_delegate_accessors(
|
|
190
|
+
delegate,
|
|
191
|
+
accessors,
|
|
192
|
+
typ,
|
|
193
|
+
overwrite=overwrite,
|
|
194
|
+
accessor_mapping=accessor_mapping,
|
|
195
|
+
raise_on_missing=raise_on_missing,
|
|
196
|
+
)
|
|
197
|
+
return cls
|
|
198
|
+
|
|
199
|
+
return add_delegate_accessors
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
class Accessor:
|
|
203
|
+
"""
|
|
204
|
+
Custom property-like object.
|
|
205
|
+
|
|
206
|
+
A descriptor for accessors.
|
|
207
|
+
|
|
208
|
+
Parameters
|
|
209
|
+
----------
|
|
210
|
+
name : str
|
|
211
|
+
Namespace that will be accessed under, e.g. ``df.foo``.
|
|
212
|
+
accessor : cls
|
|
213
|
+
Class with the extension methods.
|
|
214
|
+
|
|
215
|
+
Notes
|
|
216
|
+
-----
|
|
217
|
+
For accessor, The class's __init__ method assumes that one of
|
|
218
|
+
``Series``, ``DataFrame`` or ``Index`` as the
|
|
219
|
+
single argument ``data``.
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
def __init__(self, name: str, accessor) -> None:
|
|
223
|
+
self._name = name
|
|
224
|
+
self._accessor = accessor
|
|
225
|
+
|
|
226
|
+
def __get__(self, obj, cls):
|
|
227
|
+
if obj is None:
|
|
228
|
+
# we're accessing the attribute of the class, i.e., Dataset.geo
|
|
229
|
+
return self._accessor
|
|
230
|
+
return self._accessor(obj)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
# Alias kept for downstream libraries
|
|
234
|
+
# TODO: Deprecate as name is now misleading
|
|
235
|
+
CachedAccessor = Accessor
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def _register_accessor(
|
|
239
|
+
name: str, cls: type[NDFrame | Index]
|
|
240
|
+
) -> Callable[[TypeT], TypeT]:
|
|
241
|
+
"""
|
|
242
|
+
Register a custom accessor on objects.
|
|
243
|
+
|
|
244
|
+
Parameters
|
|
245
|
+
----------
|
|
246
|
+
name : str
|
|
247
|
+
Name under which the accessor should be registered. A warning is issued
|
|
248
|
+
if this name conflicts with a preexisting attribute.
|
|
249
|
+
|
|
250
|
+
Returns
|
|
251
|
+
-------
|
|
252
|
+
callable
|
|
253
|
+
A class decorator.
|
|
254
|
+
|
|
255
|
+
See Also
|
|
256
|
+
--------
|
|
257
|
+
register_dataframe_accessor : Register a custom accessor on DataFrame objects.
|
|
258
|
+
register_series_accessor : Register a custom accessor on Series objects.
|
|
259
|
+
register_index_accessor : Register a custom accessor on Index objects.
|
|
260
|
+
|
|
261
|
+
Notes
|
|
262
|
+
-----
|
|
263
|
+
This function allows you to register a custom-defined accessor class
|
|
264
|
+
for pandas objects (DataFrame, Series, or Index).
|
|
265
|
+
The requirements for the accessor class are as follows:
|
|
266
|
+
|
|
267
|
+
* Must contain an init method that:
|
|
268
|
+
|
|
269
|
+
* accepts a single object
|
|
270
|
+
|
|
271
|
+
* raises an AttributeError if the object does not have correctly
|
|
272
|
+
matching inputs for the accessor
|
|
273
|
+
|
|
274
|
+
* Must contain a method for each access pattern.
|
|
275
|
+
|
|
276
|
+
* The methods should be able to take any argument signature.
|
|
277
|
+
|
|
278
|
+
* Accessible using the @property decorator if no additional arguments are
|
|
279
|
+
needed.
|
|
280
|
+
|
|
281
|
+
"""
|
|
282
|
+
|
|
283
|
+
def decorator(accessor: TypeT) -> TypeT:
|
|
284
|
+
if hasattr(cls, name):
|
|
285
|
+
warnings.warn(
|
|
286
|
+
f"registration of accessor {accessor!r} under name "
|
|
287
|
+
f"{name!r} for type {cls!r} is overriding a preexisting "
|
|
288
|
+
f"attribute with the same name.",
|
|
289
|
+
UserWarning,
|
|
290
|
+
stacklevel=find_stack_level(),
|
|
291
|
+
)
|
|
292
|
+
setattr(cls, name, Accessor(name, accessor))
|
|
293
|
+
cls._accessors.add(name)
|
|
294
|
+
return accessor
|
|
295
|
+
|
|
296
|
+
return decorator
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
@set_module("pandas.api.extensions")
|
|
300
|
+
def register_dataframe_accessor(name: str) -> Callable[[TypeT], TypeT]:
|
|
301
|
+
"""
|
|
302
|
+
Register a custom accessor on DataFrame objects.
|
|
303
|
+
|
|
304
|
+
Use as a decorator to add a custom namespace accessor to DataFrame,
|
|
305
|
+
allowing domain-specific methods to be called via ``df.<name>``.
|
|
306
|
+
|
|
307
|
+
Parameters
|
|
308
|
+
----------
|
|
309
|
+
name : str
|
|
310
|
+
Name under which the accessor should be registered. A warning is issued
|
|
311
|
+
if this name conflicts with a preexisting attribute.
|
|
312
|
+
|
|
313
|
+
Returns
|
|
314
|
+
-------
|
|
315
|
+
callable
|
|
316
|
+
A class decorator.
|
|
317
|
+
|
|
318
|
+
See Also
|
|
319
|
+
--------
|
|
320
|
+
register_dataframe_accessor : Register a custom accessor on DataFrame objects.
|
|
321
|
+
register_series_accessor : Register a custom accessor on Series objects.
|
|
322
|
+
register_index_accessor : Register a custom accessor on Index objects.
|
|
323
|
+
|
|
324
|
+
Notes
|
|
325
|
+
-----
|
|
326
|
+
This function allows you to register a custom-defined accessor class for DataFrame.
|
|
327
|
+
The requirements for the accessor class are as follows:
|
|
328
|
+
|
|
329
|
+
* Must contain an init method that:
|
|
330
|
+
|
|
331
|
+
* accepts a single DataFrame object
|
|
332
|
+
|
|
333
|
+
* raises an AttributeError if the DataFrame object does not have correctly
|
|
334
|
+
matching inputs for the accessor
|
|
335
|
+
|
|
336
|
+
* Must contain a method for each access pattern.
|
|
337
|
+
|
|
338
|
+
* The methods should be able to take any argument signature.
|
|
339
|
+
|
|
340
|
+
* Accessible using the @property decorator if no additional arguments are
|
|
341
|
+
needed.
|
|
342
|
+
|
|
343
|
+
Examples
|
|
344
|
+
--------
|
|
345
|
+
An accessor that only accepts integers could
|
|
346
|
+
have a class defined like this:
|
|
347
|
+
|
|
348
|
+
>>> @pd.api.extensions.register_dataframe_accessor("int_accessor")
|
|
349
|
+
... class IntAccessor:
|
|
350
|
+
... def __init__(self, pandas_obj):
|
|
351
|
+
... if not all(
|
|
352
|
+
... pandas_obj[col].dtype == "int64" for col in pandas_obj.columns
|
|
353
|
+
... ):
|
|
354
|
+
... raise AttributeError("All columns must contain integer values only")
|
|
355
|
+
... self._obj = pandas_obj
|
|
356
|
+
...
|
|
357
|
+
... def sum(self):
|
|
358
|
+
... return self._obj.sum()
|
|
359
|
+
>>> df = pd.DataFrame([[1, 2], ["x", "y"]])
|
|
360
|
+
>>> df.int_accessor
|
|
361
|
+
Traceback (most recent call last):
|
|
362
|
+
...
|
|
363
|
+
AttributeError: All columns must contain integer values only.
|
|
364
|
+
>>> df = pd.DataFrame([[1, 2], [3, 4]])
|
|
365
|
+
>>> df.int_accessor.sum()
|
|
366
|
+
0 4
|
|
367
|
+
1 6
|
|
368
|
+
dtype: int64
|
|
369
|
+
"""
|
|
370
|
+
from pandas import DataFrame
|
|
371
|
+
|
|
372
|
+
return _register_accessor(name, DataFrame)
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
@set_module("pandas.api.extensions")
|
|
376
|
+
def register_series_accessor(name: str) -> Callable[[TypeT], TypeT]:
|
|
377
|
+
"""
|
|
378
|
+
Register a custom accessor on Series objects.
|
|
379
|
+
|
|
380
|
+
Use as a decorator to add a custom namespace accessor to Series,
|
|
381
|
+
allowing domain-specific methods to be called via ``ser.<name>``.
|
|
382
|
+
|
|
383
|
+
Parameters
|
|
384
|
+
----------
|
|
385
|
+
name : str
|
|
386
|
+
Name under which the accessor should be registered. A warning is issued
|
|
387
|
+
if this name conflicts with a preexisting attribute.
|
|
388
|
+
|
|
389
|
+
Returns
|
|
390
|
+
-------
|
|
391
|
+
callable
|
|
392
|
+
A class decorator.
|
|
393
|
+
|
|
394
|
+
See Also
|
|
395
|
+
--------
|
|
396
|
+
register_dataframe_accessor : Register a custom accessor on DataFrame objects.
|
|
397
|
+
register_series_accessor : Register a custom accessor on Series objects.
|
|
398
|
+
register_index_accessor : Register a custom accessor on Index objects.
|
|
399
|
+
|
|
400
|
+
Notes
|
|
401
|
+
-----
|
|
402
|
+
This function allows you to register a custom-defined accessor class for Series.
|
|
403
|
+
The requirements for the accessor class are as follows:
|
|
404
|
+
|
|
405
|
+
* Must contain an init method that:
|
|
406
|
+
|
|
407
|
+
* accepts a single Series object
|
|
408
|
+
|
|
409
|
+
* raises an AttributeError if the Series object does not have correctly
|
|
410
|
+
matching inputs for the accessor
|
|
411
|
+
|
|
412
|
+
* Must contain a method for each access pattern.
|
|
413
|
+
|
|
414
|
+
* The methods should be able to take any argument signature.
|
|
415
|
+
|
|
416
|
+
* Accessible using the @property decorator if no additional arguments are
|
|
417
|
+
needed.
|
|
418
|
+
|
|
419
|
+
Examples
|
|
420
|
+
--------
|
|
421
|
+
An accessor that only accepts integers could
|
|
422
|
+
have a class defined like this:
|
|
423
|
+
|
|
424
|
+
>>> @pd.api.extensions.register_series_accessor("int_accessor")
|
|
425
|
+
... class IntAccessor:
|
|
426
|
+
... def __init__(self, pandas_obj):
|
|
427
|
+
... if not pandas_obj.dtype == "int64":
|
|
428
|
+
... raise AttributeError("The series must contain integer data only")
|
|
429
|
+
... self._obj = pandas_obj
|
|
430
|
+
...
|
|
431
|
+
... def sum(self):
|
|
432
|
+
... return self._obj.sum()
|
|
433
|
+
>>> df = pd.Series([1, 2, "x"])
|
|
434
|
+
>>> df.int_accessor
|
|
435
|
+
Traceback (most recent call last):
|
|
436
|
+
...
|
|
437
|
+
AttributeError: The series must contain integer data only.
|
|
438
|
+
>>> df = pd.Series([1, 2, 3])
|
|
439
|
+
>>> df.int_accessor.sum()
|
|
440
|
+
6
|
|
441
|
+
"""
|
|
442
|
+
from pandas import Series
|
|
443
|
+
|
|
444
|
+
return _register_accessor(name, Series)
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
@set_module("pandas.api.extensions")
|
|
448
|
+
def register_index_accessor(name: str) -> Callable[[TypeT], TypeT]:
|
|
449
|
+
"""
|
|
450
|
+
Register a custom accessor on Index objects.
|
|
451
|
+
|
|
452
|
+
Use as a decorator to add a custom namespace accessor to Index,
|
|
453
|
+
allowing domain-specific methods to be called via ``idx.<name>``.
|
|
454
|
+
|
|
455
|
+
Parameters
|
|
456
|
+
----------
|
|
457
|
+
name : str
|
|
458
|
+
Name under which the accessor should be registered. A warning is issued
|
|
459
|
+
if this name conflicts with a preexisting attribute.
|
|
460
|
+
|
|
461
|
+
Returns
|
|
462
|
+
-------
|
|
463
|
+
callable
|
|
464
|
+
A class decorator.
|
|
465
|
+
|
|
466
|
+
See Also
|
|
467
|
+
--------
|
|
468
|
+
register_dataframe_accessor : Register a custom accessor on DataFrame objects.
|
|
469
|
+
register_series_accessor : Register a custom accessor on Series objects.
|
|
470
|
+
register_index_accessor : Register a custom accessor on Index objects.
|
|
471
|
+
|
|
472
|
+
Notes
|
|
473
|
+
-----
|
|
474
|
+
This function allows you to register a custom-defined accessor class for Index.
|
|
475
|
+
The requirements for the accessor class are as follows:
|
|
476
|
+
|
|
477
|
+
* Must contain an init method that:
|
|
478
|
+
|
|
479
|
+
* accepts a single Index object
|
|
480
|
+
|
|
481
|
+
* raises an AttributeError if the Index object does not have correctly
|
|
482
|
+
matching inputs for the accessor
|
|
483
|
+
|
|
484
|
+
* Must contain a method for each access pattern.
|
|
485
|
+
|
|
486
|
+
* The methods should be able to take any argument signature.
|
|
487
|
+
|
|
488
|
+
* Accessible using the @property decorator if no additional arguments are
|
|
489
|
+
needed.
|
|
490
|
+
|
|
491
|
+
Examples
|
|
492
|
+
--------
|
|
493
|
+
An accessor that only accepts integers could
|
|
494
|
+
have a class defined like this:
|
|
495
|
+
|
|
496
|
+
>>> @pd.api.extensions.register_index_accessor("int_accessor")
|
|
497
|
+
... class IntAccessor:
|
|
498
|
+
... def __init__(self, pandas_obj):
|
|
499
|
+
... if not all(isinstance(x, int) for x in pandas_obj):
|
|
500
|
+
... raise AttributeError("The index must only be an integer value")
|
|
501
|
+
... self._obj = pandas_obj
|
|
502
|
+
...
|
|
503
|
+
... def even(self):
|
|
504
|
+
... return [x for x in self._obj if x % 2 == 0]
|
|
505
|
+
>>> df = pd.DataFrame.from_dict(
|
|
506
|
+
... {"row1": {"1": 1, "2": "a"}, "row2": {"1": 2, "2": "b"}}, orient="index"
|
|
507
|
+
... )
|
|
508
|
+
>>> df.index.int_accessor
|
|
509
|
+
Traceback (most recent call last):
|
|
510
|
+
...
|
|
511
|
+
AttributeError: The index must only be an integer value.
|
|
512
|
+
>>> df = pd.DataFrame(
|
|
513
|
+
... {"col1": [1, 2, 3, 4], "col2": ["a", "b", "c", "d"]}, index=[1, 2, 5, 8]
|
|
514
|
+
... )
|
|
515
|
+
>>> df.index.int_accessor.even()
|
|
516
|
+
[2, 8]
|
|
517
|
+
"""
|
|
518
|
+
from pandas import Index
|
|
519
|
+
|
|
520
|
+
return _register_accessor(name, Index)
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
from pandas._libs import (
|
|
2
|
+
NaT,
|
|
3
|
+
Period,
|
|
4
|
+
Timedelta,
|
|
5
|
+
Timestamp,
|
|
6
|
+
)
|
|
7
|
+
from pandas._libs.missing import NA
|
|
8
|
+
|
|
9
|
+
from pandas.core.dtypes.dtypes import (
|
|
10
|
+
ArrowDtype,
|
|
11
|
+
CategoricalDtype,
|
|
12
|
+
DatetimeTZDtype,
|
|
13
|
+
IntervalDtype,
|
|
14
|
+
PeriodDtype,
|
|
15
|
+
)
|
|
16
|
+
from pandas.core.dtypes.missing import (
|
|
17
|
+
isna,
|
|
18
|
+
isnull,
|
|
19
|
+
notna,
|
|
20
|
+
notnull,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
from pandas.core.algorithms import (
|
|
24
|
+
factorize,
|
|
25
|
+
unique,
|
|
26
|
+
)
|
|
27
|
+
from pandas.core.arrays import Categorical
|
|
28
|
+
from pandas.core.arrays.boolean import BooleanDtype
|
|
29
|
+
from pandas.core.arrays.floating import (
|
|
30
|
+
Float32Dtype,
|
|
31
|
+
Float64Dtype,
|
|
32
|
+
)
|
|
33
|
+
from pandas.core.arrays.integer import (
|
|
34
|
+
Int8Dtype,
|
|
35
|
+
Int16Dtype,
|
|
36
|
+
Int32Dtype,
|
|
37
|
+
Int64Dtype,
|
|
38
|
+
UInt8Dtype,
|
|
39
|
+
UInt16Dtype,
|
|
40
|
+
UInt32Dtype,
|
|
41
|
+
UInt64Dtype,
|
|
42
|
+
)
|
|
43
|
+
from pandas.core.arrays.string_ import StringDtype
|
|
44
|
+
from pandas.core.construction import array # noqa: ICN001
|
|
45
|
+
from pandas.core.flags import Flags
|
|
46
|
+
from pandas.core.groupby import (
|
|
47
|
+
Grouper,
|
|
48
|
+
NamedAgg,
|
|
49
|
+
)
|
|
50
|
+
from pandas.core.indexes.api import (
|
|
51
|
+
CategoricalIndex,
|
|
52
|
+
DatetimeIndex,
|
|
53
|
+
Index,
|
|
54
|
+
IntervalIndex,
|
|
55
|
+
MultiIndex,
|
|
56
|
+
PeriodIndex,
|
|
57
|
+
RangeIndex,
|
|
58
|
+
TimedeltaIndex,
|
|
59
|
+
)
|
|
60
|
+
from pandas.core.indexes.datetimes import (
|
|
61
|
+
bdate_range,
|
|
62
|
+
date_range,
|
|
63
|
+
)
|
|
64
|
+
from pandas.core.indexes.interval import (
|
|
65
|
+
Interval,
|
|
66
|
+
interval_range,
|
|
67
|
+
)
|
|
68
|
+
from pandas.core.indexes.period import period_range
|
|
69
|
+
from pandas.core.indexes.timedeltas import timedelta_range
|
|
70
|
+
from pandas.core.indexing import IndexSlice
|
|
71
|
+
from pandas.core.series import Series
|
|
72
|
+
from pandas.core.tools.datetimes import to_datetime
|
|
73
|
+
from pandas.core.tools.numeric import to_numeric
|
|
74
|
+
from pandas.core.tools.timedeltas import to_timedelta
|
|
75
|
+
|
|
76
|
+
from pandas.io.formats.format import set_eng_float_format
|
|
77
|
+
from pandas.tseries.offsets import DateOffset
|
|
78
|
+
|
|
79
|
+
# DataFrame needs to be imported after NamedAgg to avoid a circular import
|
|
80
|
+
from pandas.core.frame import DataFrame # isort:skip
|
|
81
|
+
|
|
82
|
+
__all__ = [
|
|
83
|
+
"NA",
|
|
84
|
+
"ArrowDtype",
|
|
85
|
+
"BooleanDtype",
|
|
86
|
+
"Categorical",
|
|
87
|
+
"CategoricalDtype",
|
|
88
|
+
"CategoricalIndex",
|
|
89
|
+
"DataFrame",
|
|
90
|
+
"DateOffset",
|
|
91
|
+
"DatetimeIndex",
|
|
92
|
+
"DatetimeTZDtype",
|
|
93
|
+
"Flags",
|
|
94
|
+
"Float32Dtype",
|
|
95
|
+
"Float64Dtype",
|
|
96
|
+
"Grouper",
|
|
97
|
+
"Index",
|
|
98
|
+
"IndexSlice",
|
|
99
|
+
"Int8Dtype",
|
|
100
|
+
"Int16Dtype",
|
|
101
|
+
"Int32Dtype",
|
|
102
|
+
"Int64Dtype",
|
|
103
|
+
"Interval",
|
|
104
|
+
"IntervalDtype",
|
|
105
|
+
"IntervalIndex",
|
|
106
|
+
"MultiIndex",
|
|
107
|
+
"NaT",
|
|
108
|
+
"NamedAgg",
|
|
109
|
+
"Period",
|
|
110
|
+
"PeriodDtype",
|
|
111
|
+
"PeriodIndex",
|
|
112
|
+
"RangeIndex",
|
|
113
|
+
"Series",
|
|
114
|
+
"StringDtype",
|
|
115
|
+
"Timedelta",
|
|
116
|
+
"TimedeltaIndex",
|
|
117
|
+
"Timestamp",
|
|
118
|
+
"UInt8Dtype",
|
|
119
|
+
"UInt16Dtype",
|
|
120
|
+
"UInt32Dtype",
|
|
121
|
+
"UInt64Dtype",
|
|
122
|
+
"array",
|
|
123
|
+
"bdate_range",
|
|
124
|
+
"date_range",
|
|
125
|
+
"factorize",
|
|
126
|
+
"interval_range",
|
|
127
|
+
"isna",
|
|
128
|
+
"isnull",
|
|
129
|
+
"notna",
|
|
130
|
+
"notnull",
|
|
131
|
+
"period_range",
|
|
132
|
+
"set_eng_float_format",
|
|
133
|
+
"timedelta_range",
|
|
134
|
+
"to_datetime",
|
|
135
|
+
"to_numeric",
|
|
136
|
+
"to_timedelta",
|
|
137
|
+
"unique",
|
|
138
|
+
]
|