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.
Files changed (499) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +39 -0
  3. package/.claude-plugin/plugin.json +36 -0
  4. package/.codex/agents/README.md +9 -0
  5. package/.codex/agents/ashlr-explorer.md +36 -0
  6. package/.codex/agents/ashlr-worker.md +38 -0
  7. package/.codex-plugin/plugin.json +45 -0
  8. package/.mcp.json +14 -0
  9. package/LICENSE +21 -0
  10. package/README.md +311 -0
  11. package/agents/ashlr-code.md +69 -0
  12. package/agents/ashlr-explore.md +44 -0
  13. package/agents/ashlr-plan.md +54 -0
  14. package/bench/fixtures/notebook-large.ipynb +660 -0
  15. package/bench/fixtures/notebook-small.ipynb +39 -0
  16. package/bench/fixtures/tasklist-closed.json +62 -0
  17. package/bench/fixtures/tasklist-large-mixed.json +27 -0
  18. package/bench/fixtures/tasklist-sprint-open.json +79 -0
  19. package/bench/fixtures/websearch-bun-runtime.json +32 -0
  20. package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
  21. package/bench/fixtures/websearch-typescript-generics.json +38 -0
  22. package/bench/refs/node-sdk/.refrev +1 -0
  23. package/bench/refs/node-sdk/README.md +17 -0
  24. package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
  25. package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
  26. package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
  27. package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
  28. package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
  29. package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
  30. package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
  31. package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
  32. package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
  33. package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
  34. package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
  35. package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
  36. package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
  37. package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
  38. package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
  39. package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
  40. package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
  41. package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
  42. package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
  43. package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
  44. package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
  45. package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
  46. package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
  47. package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
  48. package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
  49. package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
  50. package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
  51. package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
  52. package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
  53. package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
  54. package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
  55. package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
  56. package/bench/refs/python-lib/.refrev +1 -0
  57. package/bench/refs/python-lib/README.md +18 -0
  58. package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
  59. package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
  60. package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
  61. package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
  62. package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
  63. package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
  64. package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
  65. package/bench/refs/python-lib/pandas/core/api.py +138 -0
  66. package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
  67. package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
  68. package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
  69. package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
  70. package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
  71. package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
  72. package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
  73. package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
  74. package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
  75. package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
  76. package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
  77. package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
  78. package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
  79. package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
  80. package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
  81. package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
  82. package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
  83. package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
  84. package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
  85. package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
  86. package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
  87. package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
  88. package/bench/refs/rust-project/.refrev +1 -0
  89. package/bench/refs/rust-project/README.md +17 -0
  90. package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
  91. package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
  92. package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
  93. package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
  94. package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
  95. package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
  96. package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
  97. package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
  98. package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
  99. package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
  100. package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
  101. package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
  102. package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
  103. package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
  104. package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
  105. package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
  106. package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
  107. package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
  108. package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
  109. package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
  110. package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
  111. package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
  112. package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
  113. package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
  114. package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
  115. package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
  116. package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
  117. package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
  118. package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
  119. package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
  120. package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
  121. package/commands/_spawn-patterns.json +32 -0
  122. package/commands/ashlr-allow.md +21 -0
  123. package/commands/ashlr-benchmark.md +53 -0
  124. package/commands/ashlr-brief.md +97 -0
  125. package/commands/ashlr-budget.md +76 -0
  126. package/commands/ashlr-compact.md +54 -0
  127. package/commands/ashlr-dashboard.md +37 -0
  128. package/commands/ashlr-doctor.md +56 -0
  129. package/commands/ashlr-eco-mode.md +92 -0
  130. package/commands/ashlr-genome-init.md +24 -0
  131. package/commands/ashlr-genome-keygen.md +36 -0
  132. package/commands/ashlr-genome-loop.md +118 -0
  133. package/commands/ashlr-genome-push.md +36 -0
  134. package/commands/ashlr-genome-rewrap.md +48 -0
  135. package/commands/ashlr-genome-team-init.md +67 -0
  136. package/commands/ashlr-handoff.md +23 -0
  137. package/commands/ashlr-help.md +86 -0
  138. package/commands/ashlr-hook-timings.md +30 -0
  139. package/commands/ashlr-leaderboard.md +50 -0
  140. package/commands/ashlr-ollama-setup.md +39 -0
  141. package/commands/ashlr-orchestrate-status.md +72 -0
  142. package/commands/ashlr-orchestrate.md +83 -0
  143. package/commands/ashlr-parallelize.md +63 -0
  144. package/commands/ashlr-report-crash.md +33 -0
  145. package/commands/ashlr-resume.md +72 -0
  146. package/commands/ashlr-savings.md +24 -0
  147. package/commands/ashlr-settings.md +50 -0
  148. package/commands/ashlr-spawn.md +61 -0
  149. package/commands/ashlr-start.md +60 -0
  150. package/commands/ashlr-status.md +64 -0
  151. package/commands/ashlr-team-invite.md +47 -0
  152. package/commands/ashlr-tier.md +122 -0
  153. package/commands/ashlr-tour.md +60 -0
  154. package/commands/ashlr-update.md +155 -0
  155. package/commands/ashlr-upgrade.md +96 -0
  156. package/commands/goal.md +58 -0
  157. package/commands/loop.md +40 -0
  158. package/docs/CNAME +1 -0
  159. package/docs/PRO_TIER.md +104 -0
  160. package/docs/README.md +21 -0
  161. package/docs/architecture.md +415 -0
  162. package/docs/ashlr-pipe.md +161 -0
  163. package/docs/assets/logo.svg +19 -0
  164. package/docs/assets/og.png +0 -0
  165. package/docs/assets/og.svg +41 -0
  166. package/docs/benchmarks-v2.json +355 -0
  167. package/docs/benchmarks.json +102 -0
  168. package/docs/benchmarks.md +211 -0
  169. package/docs/billing.md +185 -0
  170. package/docs/cloud-genome.md +155 -0
  171. package/docs/competitive-wozcode.md +92 -0
  172. package/docs/deploy.md +325 -0
  173. package/docs/email-templates.md +113 -0
  174. package/docs/embed-tuning.md +103 -0
  175. package/docs/genome.md +120 -0
  176. package/docs/github-oauth-onboarding.md +127 -0
  177. package/docs/hero-video-script.md +129 -0
  178. package/docs/index.html +2262 -0
  179. package/docs/install-prompt.md +78 -0
  180. package/docs/install-windows.md +132 -0
  181. package/docs/install.ps1 +171 -0
  182. package/docs/install.sh +146 -0
  183. package/docs/launch/README.md +114 -0
  184. package/docs/launch/hn.md +49 -0
  185. package/docs/launch/reddit.md +45 -0
  186. package/docs/launch/x.md +65 -0
  187. package/docs/launch-post.md +112 -0
  188. package/docs/legal.md +78 -0
  189. package/docs/llm-providers.md +99 -0
  190. package/docs/multi-host-mcp.md +217 -0
  191. package/docs/multi-turn-architecture.md +108 -0
  192. package/docs/operations/deployment.md +108 -0
  193. package/docs/operations/error-monitoring.md +70 -0
  194. package/docs/operations/weekly-digest.md +70 -0
  195. package/docs/operations.md +494 -0
  196. package/docs/platform-support.md +133 -0
  197. package/docs/policy-packs.md +188 -0
  198. package/docs/press-kit/fact-sheet.md +78 -0
  199. package/docs/press-kit/founder-bio.md +3 -0
  200. package/docs/press-kit/logo.svg +33 -0
  201. package/docs/press-kit/screenshots.md +146 -0
  202. package/docs/pricing.md +251 -0
  203. package/docs/pro-backend-architecture.md +523 -0
  204. package/docs/producthunt.md +52 -0
  205. package/docs/router-migration.md +110 -0
  206. package/docs/session-log-schema.md +68 -0
  207. package/docs/social.md +95 -0
  208. package/docs/team-genome.md +528 -0
  209. package/docs/telemetry.md +194 -0
  210. package/docs/test-isolation.md +100 -0
  211. package/docs/upgrade.md +159 -0
  212. package/hooks/_hook-errors.ts +87 -0
  213. package/hooks/_hook-perf-emit.ts +113 -0
  214. package/hooks/_hook-timing-ledger.ts +1133 -0
  215. package/hooks/_nudge-throttle.ts +127 -0
  216. package/hooks/_recent-blocks.ts +127 -0
  217. package/hooks/audit-upload.ts +86 -0
  218. package/hooks/codex-hooks.json +171 -0
  219. package/hooks/commit-attribution.ts +179 -0
  220. package/hooks/edit-batching-nudge.ts +154 -0
  221. package/hooks/genome-scribe-hook.ts +219 -0
  222. package/hooks/hooks.json +294 -0
  223. package/hooks/orient-nudge-hook.ts +242 -0
  224. package/hooks/policy-enforce.ts +214 -0
  225. package/hooks/post-tool-use-embedding.ts +93 -0
  226. package/hooks/post-tool-use-genome.sh +37 -0
  227. package/hooks/post-tool-use-genome.ts +69 -0
  228. package/hooks/posttooluse-correlate.ts +122 -0
  229. package/hooks/posttooluse-dedupe-output.ts +241 -0
  230. package/hooks/posttooluse-genome-refresh.ts +223 -0
  231. package/hooks/posttooluse-native-nudge.ts +205 -0
  232. package/hooks/posttooluse-stale-result.ts +277 -0
  233. package/hooks/pretooluse-bash.ts +63 -0
  234. package/hooks/pretooluse-budget-guard.ts +318 -0
  235. package/hooks/pretooluse-common.ts +985 -0
  236. package/hooks/pretooluse-eco-router.ts +196 -0
  237. package/hooks/pretooluse-edit.sh +93 -0
  238. package/hooks/pretooluse-edit.ts +197 -0
  239. package/hooks/pretooluse-glob.ts +70 -0
  240. package/hooks/pretooluse-grep.sh +85 -0
  241. package/hooks/pretooluse-grep.ts +96 -0
  242. package/hooks/pretooluse-notebookedit.ts +121 -0
  243. package/hooks/pretooluse-read.sh +118 -0
  244. package/hooks/pretooluse-read.ts +118 -0
  245. package/hooks/pretooluse-task.ts +130 -0
  246. package/hooks/pretooluse-webfetch.ts +66 -0
  247. package/hooks/pretooluse-websearch.ts +85 -0
  248. package/hooks/pretooluse-write.ts +128 -0
  249. package/hooks/pulse-emit.ts +197 -0
  250. package/hooks/session-end-consolidate.sh +35 -0
  251. package/hooks/session-end-consolidate.ts +188 -0
  252. package/hooks/session-end-stats-gc.ts +80 -0
  253. package/hooks/session-log-append.sh +94 -0
  254. package/hooks/session-log-append.ts +116 -0
  255. package/hooks/session-start.ts +993 -0
  256. package/hooks/sessionend-hook-health-nudge.ts +451 -0
  257. package/hooks/sessionend-savings-nudge.ts +318 -0
  258. package/hooks/sessionend-status-line-nudge.ts +296 -0
  259. package/hooks/sessionstart-brief.ts +140 -0
  260. package/hooks/sessionstart-cost-refactor.ts +95 -0
  261. package/hooks/sessionstart-efficient.ts +110 -0
  262. package/hooks/sessionstart-genome-author.ts +93 -0
  263. package/hooks/sessionstart-lean-tools.ts +98 -0
  264. package/hooks/sessionstart-search.ts +97 -0
  265. package/hooks/stop-accounting.ts +152 -0
  266. package/hooks/subagent-stop-rollup.ts +162 -0
  267. package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
  268. package/package.json +56 -0
  269. package/ports/README.md +108 -0
  270. package/ports/cursor/mcp.json +11 -0
  271. package/ports/goose/recipe.yaml +26 -0
  272. package/scripts/ashlr-mcp.ts +40 -0
  273. package/scripts/auto-update.ts +177 -0
  274. package/scripts/baseline-scan.ts +831 -0
  275. package/scripts/bench-orchestrate.ts +377 -0
  276. package/scripts/benchmark-refs.ts +292 -0
  277. package/scripts/bootstrap.mjs +100 -0
  278. package/scripts/brief-eval.ts +234 -0
  279. package/scripts/bump-version.ts +82 -0
  280. package/scripts/bun-resolve.d.mts +11 -0
  281. package/scripts/bun-resolve.mjs +59 -0
  282. package/scripts/calibrate-grep.ts +467 -0
  283. package/scripts/capture-grep-workload.ts +260 -0
  284. package/scripts/check-tier.ts +61 -0
  285. package/scripts/check-version-sync.ts +97 -0
  286. package/scripts/cli-orchestrate-status.ts +386 -0
  287. package/scripts/cli-orchestrate.ts +303 -0
  288. package/scripts/cli.ts +478 -0
  289. package/scripts/cloud-smoke-test.ts +313 -0
  290. package/scripts/coach-report.ts +373 -0
  291. package/scripts/context-db-migrate.ts +137 -0
  292. package/scripts/context-status.ts +43 -0
  293. package/scripts/demo-run.ts +255 -0
  294. package/scripts/deploy-smoke.sh +140 -0
  295. package/scripts/doctor.ts +992 -0
  296. package/scripts/embed-file-worker.ts +104 -0
  297. package/scripts/embed-tune.ts +308 -0
  298. package/scripts/errors-report.ts +428 -0
  299. package/scripts/find-test-leak.ts +69 -0
  300. package/scripts/generate-badge.ts +357 -0
  301. package/scripts/genome-auto-consolidate.ts +533 -0
  302. package/scripts/genome-auto-propose.ts +578 -0
  303. package/scripts/genome-cloud-pull.ts +363 -0
  304. package/scripts/genome-cloud-push.ts +382 -0
  305. package/scripts/genome-cloud-sync.ts +587 -0
  306. package/scripts/genome-commit-watcher.ts +295 -0
  307. package/scripts/genome-init.ts +986 -0
  308. package/scripts/genome-key.ts +233 -0
  309. package/scripts/genome-keygen.ts +168 -0
  310. package/scripts/genome-link.ts +59 -0
  311. package/scripts/genome-refresh-worker.ts +364 -0
  312. package/scripts/genome-rewrap.ts +90 -0
  313. package/scripts/genome-synthesizer.ts +679 -0
  314. package/scripts/genome-team-init.ts +312 -0
  315. package/scripts/handoff-pack.ts +438 -0
  316. package/scripts/hook-bootstrap.mjs +75 -0
  317. package/scripts/hook-timing-reader.ts +371 -0
  318. package/scripts/hook-timings-report.ts +554 -0
  319. package/scripts/install-genome-hooks.ts +196 -0
  320. package/scripts/install-onnx-model.ts +154 -0
  321. package/scripts/install-permissions.ts +276 -0
  322. package/scripts/install-status-line.ts +150 -0
  323. package/scripts/mcp-entrypoint.sh +78 -0
  324. package/scripts/mcp-entrypoint.ts +130 -0
  325. package/scripts/mdx-angle-bracket-lint.ts +152 -0
  326. package/scripts/measure-cold-start.ts +126 -0
  327. package/scripts/migrate-stats-to-sqlite.ts +86 -0
  328. package/scripts/ollama-setup.ts +498 -0
  329. package/scripts/onboarding-wizard.ts +1691 -0
  330. package/scripts/orchestrate-emit-telemetry.ts +177 -0
  331. package/scripts/orchestrate-expand.ts +517 -0
  332. package/scripts/orchestrate-run.ts +744 -0
  333. package/scripts/print-legend.ts +50 -0
  334. package/scripts/product-metadata.ts +38 -0
  335. package/scripts/prune-old-memories.ts +208 -0
  336. package/scripts/publish.sh +88 -0
  337. package/scripts/read-calibration.ts +122 -0
  338. package/scripts/report-crash.ts +226 -0
  339. package/scripts/run-benchmark.ts +750 -0
  340. package/scripts/run-root-tests.ts +28 -0
  341. package/scripts/savings-dashboard.ts +1258 -0
  342. package/scripts/savings-report-extras.ts +447 -0
  343. package/scripts/savings-status-line.ts +873 -0
  344. package/scripts/session-event-emit.ts +266 -0
  345. package/scripts/session-greet.ts +686 -0
  346. package/scripts/session-log-report.ts +551 -0
  347. package/scripts/session-resume.ts +614 -0
  348. package/scripts/set-hook-mode.ts +83 -0
  349. package/scripts/smoke-cross-platform.ts +117 -0
  350. package/scripts/smoke-realtime.ts +257 -0
  351. package/scripts/smoke-tools.ts +21 -0
  352. package/scripts/stats-cloud-pull.ts +213 -0
  353. package/scripts/stats-cloud-sync.ts +261 -0
  354. package/scripts/telemetry-flush.ts +160 -0
  355. package/scripts/telemetry-status.ts +266 -0
  356. package/scripts/timing-budget.ts +35 -0
  357. package/scripts/ui-animation.ts +120 -0
  358. package/scripts/ui.ts +431 -0
  359. package/scripts/upgrade-flow.ts +775 -0
  360. package/scripts/weekly-digest.ts +394 -0
  361. package/servers/_accounting.ts +78 -0
  362. package/servers/_ask-router.ts +84 -0
  363. package/servers/_ast-chunker.ts +434 -0
  364. package/servers/_ast-helpers.ts +183 -0
  365. package/servers/_ast-languages.ts +153 -0
  366. package/servers/_ast-refactor/_shared.ts +221 -0
  367. package/servers/_ast-refactor/cross-file-rename.ts +560 -0
  368. package/servers/_ast-refactor/extract-function.ts +357 -0
  369. package/servers/_ast-refactor/file-local-rename.ts +172 -0
  370. package/servers/_ast-refactor.ts +41 -0
  371. package/servers/_ast-skeleton.ts +107 -0
  372. package/servers/_bash-summarizers-registry.ts +1096 -0
  373. package/servers/_crash-dump.ts +210 -0
  374. package/servers/_cwd-clamp.ts +342 -0
  375. package/servers/_edit-log.ts +28 -0
  376. package/servers/_edit-match.ts +236 -0
  377. package/servers/_edit-validate.ts +196 -0
  378. package/servers/_embed-calibration.ts +123 -0
  379. package/servers/_embedding-cache.ts +401 -0
  380. package/servers/_embedding-model.ts +329 -0
  381. package/servers/_events.ts +113 -0
  382. package/servers/_genome-cache.ts +154 -0
  383. package/servers/_genome-commits.ts +172 -0
  384. package/servers/_genome-crypto-v2.ts +242 -0
  385. package/servers/_genome-crypto.ts +259 -0
  386. package/servers/_genome-discoveries.ts +140 -0
  387. package/servers/_genome-embed-populator.ts +216 -0
  388. package/servers/_genome-freshness.ts +134 -0
  389. package/servers/_genome-issues.ts +171 -0
  390. package/servers/_genome-live.ts +263 -0
  391. package/servers/_genome-prs.ts +188 -0
  392. package/servers/_genome-search.ts +479 -0
  393. package/servers/_genome-sync.ts +297 -0
  394. package/servers/_history-tracker.ts +279 -0
  395. package/servers/_http-helpers.ts +151 -0
  396. package/servers/_identity-hash.ts +151 -0
  397. package/servers/_llm-providers/anthropic.ts +132 -0
  398. package/servers/_llm-providers/cloud.ts +195 -0
  399. package/servers/_llm-providers/index.ts +350 -0
  400. package/servers/_llm-providers/local.ts +127 -0
  401. package/servers/_llm-providers/onnx.ts +393 -0
  402. package/servers/_llm-providers/types.ts +27 -0
  403. package/servers/_manifest-v2.ts +447 -0
  404. package/servers/_mcp-host.ts +93 -0
  405. package/servers/_nudge-events.ts +451 -0
  406. package/servers/_orchestrate-executor.ts +316 -0
  407. package/servers/_prefetch.ts +435 -0
  408. package/servers/_pricing.ts +256 -0
  409. package/servers/_pro.ts +381 -0
  410. package/servers/_read-cache.ts +44 -0
  411. package/servers/_router-handlers.ts +46 -0
  412. package/servers/_router.ts +55 -0
  413. package/servers/_run-with-timeout.ts +173 -0
  414. package/servers/_savings-render.ts +214 -0
  415. package/servers/_stats-sqlite.ts +640 -0
  416. package/servers/_stats.ts +1183 -0
  417. package/servers/_status-line-cells.ts +469 -0
  418. package/servers/_streaks.ts +162 -0
  419. package/servers/_summarize.ts +208 -0
  420. package/servers/_task-graph-render.ts +217 -0
  421. package/servers/_task-graph.ts +545 -0
  422. package/servers/_telemetry.ts +719 -0
  423. package/servers/_test-parsers.ts +530 -0
  424. package/servers/_test-watch.ts +626 -0
  425. package/servers/_text-helpers.ts +37 -0
  426. package/servers/_token-measure.ts +160 -0
  427. package/servers/_tool-base.ts +248 -0
  428. package/servers/_weekly-digest.ts +391 -0
  429. package/servers/ask-server-handlers.ts +49 -0
  430. package/servers/ask-server.ts +174 -0
  431. package/servers/bash-server-handlers.ts +138 -0
  432. package/servers/bash-server.ts +1136 -0
  433. package/servers/bench.ts +186 -0
  434. package/servers/diff-semantic-server-handlers.ts +39 -0
  435. package/servers/diff-semantic-server.ts +566 -0
  436. package/servers/diff-server-handlers.ts +317 -0
  437. package/servers/diff-server.ts +20 -0
  438. package/servers/edit-server-handlers.ts +31 -0
  439. package/servers/edit-server.ts +209 -0
  440. package/servers/edit-structural-server-handlers.ts +322 -0
  441. package/servers/efficiency-server-handlers.ts +161 -0
  442. package/servers/efficiency-server.ts +1135 -0
  443. package/servers/flush-server-handlers.ts +21 -0
  444. package/servers/flush-server.ts +19 -0
  445. package/servers/genome-server-handlers.ts +118 -0
  446. package/servers/genome-server.ts +397 -0
  447. package/servers/github-server-handlers.ts +187 -0
  448. package/servers/github-server.ts +856 -0
  449. package/servers/glob-server-handlers.ts +233 -0
  450. package/servers/glob-server.ts +20 -0
  451. package/servers/grep-server-handlers.ts +61 -0
  452. package/servers/grep-server.ts +564 -0
  453. package/servers/http-server-handlers.ts +36 -0
  454. package/servers/http-server.ts +149 -0
  455. package/servers/logs-server-handlers.ts +42 -0
  456. package/servers/logs-server.ts +359 -0
  457. package/servers/ls-server-handlers.ts +166 -0
  458. package/servers/ls-server.ts +20 -0
  459. package/servers/multi-edit-server-handlers.ts +51 -0
  460. package/servers/multi-edit-server.ts +422 -0
  461. package/servers/notebook-edit-server-handlers.ts +34 -0
  462. package/servers/notebook-edit-server.ts +181 -0
  463. package/servers/orient-server-handlers.ts +52 -0
  464. package/servers/orient-server.ts +436 -0
  465. package/servers/pipe-server-handlers.ts +68 -0
  466. package/servers/pipe-server.ts +300 -0
  467. package/servers/read-server-handlers.ts +42 -0
  468. package/servers/read-server.ts +206 -0
  469. package/servers/rename-file-server-handlers.ts +67 -0
  470. package/servers/rename-file-server.ts +699 -0
  471. package/servers/savings-server-handlers.ts +27 -0
  472. package/servers/savings-server.ts +54 -0
  473. package/servers/search-replace-regex-server-handlers.ts +96 -0
  474. package/servers/search-replace-regex-server.ts +751 -0
  475. package/servers/sql-server-handlers.ts +58 -0
  476. package/servers/sql-server.ts +505 -0
  477. package/servers/task-server-handlers.ts +358 -0
  478. package/servers/task-server.ts +24 -0
  479. package/servers/test-server-handlers.ts +351 -0
  480. package/servers/test-server.ts +20 -0
  481. package/servers/tree-server-handlers.ts +503 -0
  482. package/servers/tree-server.ts +20 -0
  483. package/servers/webfetch-server-handlers.ts +166 -0
  484. package/servers/webfetch-server.ts +20 -0
  485. package/servers/websearch-server-handlers.ts +215 -0
  486. package/servers/websearch-server.ts +19 -0
  487. package/servers/write-server-handlers.ts +27 -0
  488. package/servers/write-server.ts +97 -0
  489. package/skills/ashlr-brief/SKILL.md +80 -0
  490. package/skills/ashlr-codex-doctor/SKILL.md +21 -0
  491. package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
  492. package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
  493. package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
  494. package/skills/ashlr-codex-savings/SKILL.md +17 -0
  495. package/skills/ashlr-cost-refactor/SKILL.md +50 -0
  496. package/skills/ashlr-efficient/SKILL.md +64 -0
  497. package/skills/ashlr-genome-author/SKILL.md +43 -0
  498. package/skills/ashlr-lean-tools/SKILL.md +43 -0
  499. package/skills/ashlr-search/SKILL.md +46 -0
@@ -0,0 +1,630 @@
1
+ from __future__ import annotations
2
+
3
+ from functools import wraps
4
+ from typing import (
5
+ TYPE_CHECKING,
6
+ Any,
7
+ Literal,
8
+ Self,
9
+ cast,
10
+ overload,
11
+ )
12
+
13
+ import numpy as np
14
+
15
+ from pandas._libs import lib
16
+ from pandas._libs.arrays import NDArrayBacked
17
+ from pandas._libs.tslibs import is_supported_dtype
18
+ from pandas.errors import AbstractMethodError
19
+ from pandas.util._validators import (
20
+ validate_bool_kwarg,
21
+ validate_insert_loc,
22
+ )
23
+
24
+ from pandas.core.dtypes.cast import construct_1d_object_array_from_listlike
25
+ from pandas.core.dtypes.common import pandas_dtype
26
+ from pandas.core.dtypes.dtypes import (
27
+ DatetimeTZDtype,
28
+ ExtensionDtype,
29
+ PeriodDtype,
30
+ )
31
+ from pandas.core.dtypes.missing import array_equivalent
32
+
33
+ from pandas.core import missing
34
+ from pandas.core.algorithms import (
35
+ take,
36
+ unique,
37
+ value_counts_internal as value_counts,
38
+ )
39
+ from pandas.core.array_algos.quantile import quantile_with_mask
40
+ from pandas.core.array_algos.transforms import shift
41
+ from pandas.core.arrays.base import ExtensionArray
42
+ from pandas.core.construction import extract_array
43
+ from pandas.core.indexers import (
44
+ check_array_indexer,
45
+ getitem_returns_view,
46
+ )
47
+ from pandas.core.sorting import nargminmax
48
+
49
+ if TYPE_CHECKING:
50
+ from collections.abc import Sequence
51
+
52
+ from pandas._typing import (
53
+ ArrayLike,
54
+ AxisInt,
55
+ Dtype,
56
+ F,
57
+ FillnaOptions,
58
+ NumpySorter,
59
+ NumpyValueArrayLike,
60
+ PositionalIndexer2D,
61
+ PositionalIndexerTuple,
62
+ ScalarIndexer,
63
+ SequenceIndexer,
64
+ Shape,
65
+ TakeIndexer,
66
+ npt,
67
+ )
68
+
69
+ from pandas import Series
70
+
71
+
72
+ def ravel_compat(meth: F) -> F:
73
+ """
74
+ Decorator to ravel a 2D array before passing it to a cython operation,
75
+ then reshape the result to our own shape.
76
+ """
77
+
78
+ @wraps(meth)
79
+ def method(self, *args, **kwargs):
80
+ if self.ndim == 1:
81
+ return meth(self, *args, **kwargs)
82
+
83
+ flags = self._ndarray.flags
84
+ flat = self.ravel("K")
85
+ result = meth(flat, *args, **kwargs)
86
+ order = "F" if flags.f_contiguous else "C"
87
+ return result.reshape(self.shape, order=order)
88
+
89
+ return cast("F", method)
90
+
91
+
92
+ class NDArrayBackedExtensionArray(NDArrayBacked, ExtensionArray):
93
+ """
94
+ ExtensionArray that is backed by a single NumPy ndarray.
95
+ """
96
+
97
+ _ndarray: np.ndarray
98
+
99
+ # scalar used to denote NA value inside our self._ndarray, e.g. -1
100
+ # for Categorical, iNaT for Period. Outside of object dtype,
101
+ # self.isna() should be exactly locations in self._ndarray with
102
+ # _internal_fill_value.
103
+ _internal_fill_value: Any
104
+
105
+ def _box_func(self, x):
106
+ """
107
+ Wrap numpy type in our dtype.type if necessary.
108
+ """
109
+ return x
110
+
111
+ def _validate_scalar(self, value):
112
+ # used by NDArrayBackedExtensionIndex.insert
113
+ raise AbstractMethodError(self)
114
+
115
+ # ------------------------------------------------------------------------
116
+
117
+ @overload
118
+ def view(self, dtype: None = ...) -> Self: ...
119
+
120
+ @overload
121
+ def view(self, dtype: Dtype | None = ...) -> ArrayLike: ...
122
+
123
+ def view(self, dtype: Dtype | None = None) -> ArrayLike:
124
+ # We handle datetime64, datetime64tz, timedelta64, and period
125
+ # dtypes here. Everything else we pass through to the underlying
126
+ # ndarray.
127
+ if dtype is None or dtype is self.dtype:
128
+ return self._from_backing_data(self._ndarray)
129
+
130
+ if isinstance(dtype, type):
131
+ # we sometimes pass non-dtype objects, e.g np.ndarray;
132
+ # pass those through to the underlying ndarray
133
+ return self._ndarray.view(dtype)
134
+
135
+ dtype = pandas_dtype(dtype)
136
+ arr = self._ndarray
137
+
138
+ if isinstance(dtype, PeriodDtype):
139
+ cls = dtype.construct_array_type()
140
+ return cls(arr.view("i8"), dtype=dtype)
141
+ elif isinstance(dtype, DatetimeTZDtype):
142
+ dt_cls = dtype.construct_array_type()
143
+ dt64_values = arr.view(f"M8[{dtype.unit}]")
144
+ return dt_cls._simple_new(dt64_values, dtype=dtype)
145
+ elif lib.is_np_dtype(dtype, "M") and is_supported_dtype(dtype):
146
+ from pandas.core.arrays import DatetimeArray
147
+
148
+ dt64_values = arr.view(dtype)
149
+ return DatetimeArray._simple_new(dt64_values, dtype=dtype)
150
+ elif lib.is_np_dtype(dtype, "m") and is_supported_dtype(dtype):
151
+ from pandas.core.arrays import TimedeltaArray
152
+
153
+ td64_values = arr.view(dtype)
154
+ return TimedeltaArray._simple_new(td64_values, dtype=dtype)
155
+ # error: Argument "dtype" to "view" of "ndarray" has incompatible type
156
+ # "ExtensionDtype | dtype[Any]"; expected "dtype[Any] | _HasDType[dtype[Any]]"
157
+ return arr.view(dtype=dtype) # type: ignore[arg-type]
158
+
159
+ def take(
160
+ self,
161
+ indices: TakeIndexer,
162
+ *,
163
+ allow_fill: bool = False,
164
+ fill_value: Any = None,
165
+ axis: AxisInt = 0,
166
+ ) -> Self:
167
+ if allow_fill:
168
+ fill_value = self._validate_scalar(fill_value)
169
+
170
+ new_data = take(
171
+ self._ndarray,
172
+ indices,
173
+ allow_fill=allow_fill,
174
+ fill_value=fill_value,
175
+ axis=axis,
176
+ )
177
+ return self._from_backing_data(new_data)
178
+
179
+ # ------------------------------------------------------------------------
180
+
181
+ def equals(self, other) -> bool:
182
+ if type(self) is not type(other):
183
+ return False
184
+ if self.dtype != other.dtype:
185
+ return False
186
+ return bool(array_equivalent(self._ndarray, other._ndarray, dtype_equal=True))
187
+
188
+ @classmethod
189
+ def _from_factorized(cls, values, original):
190
+ assert values.dtype == original._ndarray.dtype
191
+ return original._from_backing_data(values)
192
+
193
+ def _values_for_argsort(self) -> np.ndarray:
194
+ return self._ndarray
195
+
196
+ def _values_for_factorize(self):
197
+ return self._ndarray, self._internal_fill_value
198
+
199
+ def _hash_pandas_object(
200
+ self, *, encoding: str, hash_key: str, categorize: bool
201
+ ) -> npt.NDArray[np.uint64]:
202
+ from pandas.core.util.hashing import hash_array
203
+
204
+ values = self._ndarray
205
+ return hash_array(
206
+ values, encoding=encoding, hash_key=hash_key, categorize=categorize
207
+ )
208
+
209
+ def _cast_pointwise_result(self, values: ArrayLike) -> ArrayLike:
210
+ if not (isinstance(values, np.ndarray) and values.dtype == object):
211
+ values = construct_1d_object_array_from_listlike(values) # type: ignore[arg-type]
212
+ return lib.maybe_convert_objects(values, convert_non_numeric=True)
213
+
214
+ # Signature of "argmin" incompatible with supertype "ExtensionArray"
215
+ def argmin(self, axis: AxisInt = 0, skipna: bool = True): # type: ignore[override]
216
+ # override base class by adding axis keyword
217
+ validate_bool_kwarg(skipna, "skipna")
218
+ if not skipna and self._hasna:
219
+ raise ValueError("Encountered an NA value with skipna=False")
220
+ return nargminmax(self, "argmin", axis=axis)
221
+
222
+ # Signature of "argmax" incompatible with supertype "ExtensionArray"
223
+ def argmax(self, axis: AxisInt = 0, skipna: bool = True): # type: ignore[override]
224
+ # override base class by adding axis keyword
225
+ validate_bool_kwarg(skipna, "skipna")
226
+ if not skipna and self._hasna:
227
+ raise ValueError("Encountered an NA value with skipna=False")
228
+ return nargminmax(self, "argmax", axis=axis)
229
+
230
+ def unique(self) -> Self:
231
+ new_data = unique(self._ndarray)
232
+ return self._from_backing_data(new_data)
233
+
234
+ @classmethod
235
+ def _concat_same_type(
236
+ cls,
237
+ to_concat: Sequence[Self],
238
+ axis: AxisInt = 0,
239
+ ) -> Self:
240
+ """
241
+ Concatenate multiple arrays of this dtype.
242
+
243
+ Parameters
244
+ ----------
245
+ to_concat : sequence of this type
246
+
247
+ Returns
248
+ -------
249
+ ExtensionArray
250
+ """
251
+ if not lib.dtypes_all_equal([x.dtype for x in to_concat]):
252
+ dtypes = {str(x.dtype) for x in to_concat}
253
+ raise ValueError("to_concat must have the same dtype", dtypes)
254
+
255
+ return super()._concat_same_type(to_concat, axis=axis)
256
+
257
+ def searchsorted(
258
+ self,
259
+ value: NumpyValueArrayLike | ExtensionArray,
260
+ side: Literal["left", "right"] = "left",
261
+ sorter: NumpySorter | None = None,
262
+ ) -> npt.NDArray[np.intp] | np.intp:
263
+ """
264
+ Find indices where elements should be inserted to maintain order.
265
+
266
+ Find the indices into a sorted array `self` (a) such that, if the
267
+ corresponding elements in `value` were inserted before the indices,
268
+ the order of `self` would be preserved.
269
+
270
+ Assuming that `self` is sorted:
271
+
272
+ ====== ================================
273
+ `side` returned index `i` satisfies
274
+ ====== ================================
275
+ left ``self[i-1] < value <= self[i]``
276
+ right ``self[i-1] <= value < self[i]``
277
+ ====== ================================
278
+
279
+ Parameters
280
+ ----------
281
+ value : array-like, list or scalar
282
+ Value(s) to insert into `self`.
283
+ side : {'left', 'right'}, optional
284
+ If 'left', the index of the first suitable location found is given.
285
+ If 'right', return the last such index. If there is no suitable
286
+ index, return either 0 or N (where N is the length of `self`).
287
+ sorter : 1-D array-like, optional
288
+ Optional array of integer indices that sort array a into ascending
289
+ order. They are typically the result of argsort.
290
+
291
+ Returns
292
+ -------
293
+ array of ints or int
294
+ If value is array-like, array of insertion points.
295
+ If value is scalar, a single integer.
296
+
297
+ See Also
298
+ --------
299
+ numpy.searchsorted : Similar method from NumPy.
300
+ """
301
+ npvalue = self._validate_setitem_value(value)
302
+ return self._ndarray.searchsorted(npvalue, side=side, sorter=sorter)
303
+
304
+ def shift(self, periods: int = 1, fill_value=None) -> Self:
305
+ """
306
+ Shift values by desired number.
307
+
308
+ Newly introduced missing values are filled with
309
+ ``self.dtype.na_value``.
310
+
311
+ Parameters
312
+ ----------
313
+ periods : int, default 1
314
+ The number of periods to shift. Negative values are allowed
315
+ for shifting backwards.
316
+
317
+ fill_value : object, optional
318
+ The scalar value to use for newly introduced missing values.
319
+ The default is ``self.dtype.na_value``.
320
+
321
+ Returns
322
+ -------
323
+ ExtensionArray
324
+ Shifted.
325
+
326
+ Notes
327
+ -----
328
+ If ``self`` is empty or ``periods`` is 0, a copy of ``self`` is
329
+ returned.
330
+
331
+ If ``periods > len(self)``, then an array of size
332
+ len(self) is returned, with all values filled with
333
+ ``self.dtype.na_value``.
334
+ """
335
+ # NB: shift is always along axis=self.ndim-1
336
+ fill_value = self._validate_scalar(fill_value)
337
+ new_values = shift(self._ndarray, periods, fill_value)
338
+
339
+ return self._from_backing_data(new_values)
340
+
341
+ def __setitem__(self, key, value) -> None:
342
+ if self._readonly:
343
+ raise ValueError("Cannot modify read-only array")
344
+
345
+ key = check_array_indexer(self, key)
346
+ value = self._validate_setitem_value(value)
347
+ self._ndarray[key] = value
348
+
349
+ def _validate_setitem_value(self, value):
350
+ return value
351
+
352
+ @overload
353
+ def __getitem__(self, key: ScalarIndexer) -> Any: ...
354
+
355
+ @overload
356
+ def __getitem__(
357
+ self,
358
+ key: SequenceIndexer | PositionalIndexerTuple,
359
+ ) -> Self: ...
360
+
361
+ def __getitem__(
362
+ self,
363
+ key: PositionalIndexer2D,
364
+ ) -> Self | Any:
365
+ if lib.is_integer(key):
366
+ # fast-path
367
+ result = self._ndarray[key]
368
+ if self.ndim == 1:
369
+ return self._box_func(result)
370
+ result = self._from_backing_data(result)
371
+ if getitem_returns_view(self, key):
372
+ result._readonly = self._readonly
373
+ return result
374
+
375
+ # error: Incompatible types in assignment (expression has type "ExtensionArray",
376
+ # variable has type "Union[int, slice, ndarray]")
377
+ key = extract_array(key, extract_numpy=True) # type: ignore[assignment]
378
+ key = check_array_indexer(self, key)
379
+ result = self._ndarray[key]
380
+ if lib.is_scalar(result):
381
+ return self._box_func(result)
382
+
383
+ result = self._from_backing_data(result)
384
+ if getitem_returns_view(self, key):
385
+ result._readonly = self._readonly
386
+ return result
387
+
388
+ def _pad_or_backfill(
389
+ self,
390
+ *,
391
+ method: FillnaOptions,
392
+ limit: int | None = None,
393
+ limit_area: Literal["inside", "outside"] | None = None,
394
+ copy: bool = True,
395
+ ) -> Self:
396
+ mask = self.isna()
397
+ if mask.any():
398
+ # (for now) when self.ndim == 2, we assume axis=0
399
+ func = missing.get_fill_func(method, ndim=self.ndim)
400
+
401
+ npvalues = self._ndarray.T
402
+ if copy:
403
+ npvalues = npvalues.copy()
404
+ func(npvalues, limit=limit, limit_area=limit_area, mask=mask.T)
405
+ npvalues = npvalues.T
406
+
407
+ if copy:
408
+ new_values = self._from_backing_data(npvalues)
409
+ else:
410
+ new_values = self
411
+
412
+ elif copy:
413
+ new_values = self.copy()
414
+ else:
415
+ new_values = self
416
+ return new_values
417
+
418
+ def fillna(self, value, limit: int | None = None, copy: bool = True) -> Self:
419
+ """
420
+ Fill NA/NaN values using the specified method.
421
+
422
+ Parameters
423
+ ----------
424
+ value : scalar, array-like
425
+ If a scalar value is passed it is used to fill all missing values.
426
+ Alternatively, an array-like 'value' can be given. It's expected
427
+ that the array-like have the same length as 'self'.
428
+ limit : int, default None
429
+ The maximum number of entries along the entire axis where NaNs will be
430
+ filled.
431
+
432
+ Returns
433
+ -------
434
+ ExtensionArray
435
+ With NA/NaN filled.
436
+ """
437
+ mask = self.isna()
438
+ if limit is not None and limit < len(self):
439
+ # mypy doesn't like that mask can be an EA which need not have `cumsum`
440
+ modify = mask.cumsum() > limit # type: ignore[union-attr]
441
+ if modify.any():
442
+ # Only copy mask if necessary
443
+ mask = mask.copy()
444
+ mask[modify] = False
445
+ # error: Argument 2 to "check_value_size" has incompatible type
446
+ # "ExtensionArray"; expected "ndarray"
447
+ value = missing.check_value_size(
448
+ value,
449
+ mask, # type: ignore[arg-type]
450
+ len(self),
451
+ )
452
+
453
+ if mask.any():
454
+ # fill with value
455
+ if copy:
456
+ new_values = self.copy()
457
+ else:
458
+ new_values = self[:]
459
+ new_values[mask] = value
460
+ else:
461
+ # We validate the fill_value even if there is nothing to fill
462
+ self._validate_setitem_value(value)
463
+
464
+ if not copy:
465
+ new_values = self[:]
466
+ else:
467
+ new_values = self.copy()
468
+ return new_values
469
+
470
+ # ------------------------------------------------------------------------
471
+ # Reductions
472
+
473
+ def _wrap_reduction_result(self, axis: AxisInt | None, result) -> Any:
474
+ if axis is None or self.ndim == 1:
475
+ return self._box_func(result)
476
+ return self._from_backing_data(result)
477
+
478
+ # ------------------------------------------------------------------------
479
+ # __array_function__ methods
480
+
481
+ def _putmask(self, mask: npt.NDArray[np.bool_], value) -> None:
482
+ """
483
+ Analogue to np.putmask(self, mask, value)
484
+
485
+ Parameters
486
+ ----------
487
+ mask : np.ndarray[bool]
488
+ value : scalar or listlike
489
+
490
+ Raises
491
+ ------
492
+ TypeError
493
+ If value cannot be cast to self.dtype.
494
+ """
495
+ value = self._validate_setitem_value(value)
496
+
497
+ np.putmask(self._ndarray, mask, value)
498
+
499
+ def _where(self: Self, mask: npt.NDArray[np.bool_], value) -> Self:
500
+ """
501
+ Analogue to np.where(mask, self, value)
502
+
503
+ Parameters
504
+ ----------
505
+ mask : np.ndarray[bool]
506
+ value : scalar or listlike
507
+
508
+ Raises
509
+ ------
510
+ TypeError
511
+ If value cannot be cast to self.dtype.
512
+ """
513
+ value = self._validate_setitem_value(value)
514
+
515
+ res_values = np.where(mask, self._ndarray, value)
516
+ if res_values.dtype != self._ndarray.dtype:
517
+ raise AssertionError(
518
+ # GH#56410
519
+ "Something has gone wrong, please report a bug at "
520
+ "github.com/pandas-dev/pandas/"
521
+ )
522
+ return self._from_backing_data(res_values)
523
+
524
+ # ------------------------------------------------------------------------
525
+ # Index compat methods
526
+
527
+ def insert(self, loc: int, item) -> Self:
528
+ """
529
+ Make new ExtensionArray inserting new item at location. Follows
530
+ Python list.append semantics for negative values.
531
+
532
+ Parameters
533
+ ----------
534
+ loc : int
535
+ item : object
536
+
537
+ Returns
538
+ -------
539
+ type(self)
540
+ """
541
+ loc = validate_insert_loc(loc, len(self))
542
+
543
+ code = self._validate_scalar(item)
544
+
545
+ new_vals = np.concatenate(
546
+ (
547
+ self._ndarray[:loc],
548
+ np.asarray([code], dtype=self._ndarray.dtype),
549
+ self._ndarray[loc:],
550
+ )
551
+ )
552
+ return self._from_backing_data(new_vals)
553
+
554
+ # ------------------------------------------------------------------------
555
+ # Additional array methods
556
+ # These are not part of the EA API, but we implement them because
557
+ # pandas assumes they're there.
558
+
559
+ def value_counts(self, dropna: bool = True) -> Series:
560
+ """
561
+ Return a Series containing counts of unique values.
562
+
563
+ Parameters
564
+ ----------
565
+ dropna : bool, default True
566
+ Don't include counts of NA values.
567
+
568
+ Returns
569
+ -------
570
+ Series
571
+ """
572
+ if self.ndim != 1:
573
+ raise NotImplementedError
574
+
575
+ from pandas import (
576
+ Index,
577
+ Series,
578
+ )
579
+
580
+ if dropna:
581
+ # error: Invalid index type
582
+ values = self[~self.isna()]._ndarray # type: ignore[index]
583
+ else:
584
+ values = self._ndarray
585
+
586
+ result = value_counts(values, sort=False, dropna=dropna)
587
+
588
+ index_arr = self._from_backing_data(np.asarray(result.index._data))
589
+ index = Index(index_arr, name=result.index.name, copy=False)
590
+ return Series(result._values, index=index, name=result.name, copy=False)
591
+
592
+ def _quantile(
593
+ self,
594
+ qs: npt.NDArray[np.float64],
595
+ interpolation: str,
596
+ ) -> Self:
597
+ # TODO: disable for Categorical if not ordered?
598
+
599
+ mask = np.asarray(self.isna())
600
+ arr = self._ndarray
601
+ fill_value = self._internal_fill_value
602
+
603
+ res_values = quantile_with_mask(arr, mask, fill_value, qs, interpolation)
604
+ if res_values.dtype == self._ndarray.dtype:
605
+ return self._from_backing_data(res_values)
606
+ else:
607
+ # e.g. test_quantile_empty we are empty integer dtype and res_values
608
+ # has floating dtype
609
+ # TODO: technically __init__ isn't defined here.
610
+ # Should we raise NotImplementedError and handle this on NumpyEA?
611
+ return type(self)(res_values) # type: ignore[call-arg]
612
+
613
+ # ------------------------------------------------------------------------
614
+ # numpy-like methods
615
+
616
+ @classmethod
617
+ def _empty(cls, shape: Shape, dtype: ExtensionDtype) -> Self:
618
+ """
619
+ Analogous to np.empty(shape, dtype=dtype)
620
+
621
+ Parameters
622
+ ----------
623
+ shape : tuple[int]
624
+ dtype : ExtensionDtype
625
+ """
626
+ # The base implementation uses a naive approach to find the dtype
627
+ # for the backing ndarray
628
+ arr = cls._from_sequence([], dtype=dtype)
629
+ backing = np.empty(shape, dtype=arr._ndarray.dtype)
630
+ return arr._from_backing_data(backing)