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