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,586 @@
1
+ # Disable type checking for this module since numba's internals
2
+ # are not typed, and we use numba's internals via its extension API
3
+ # mypy: ignore-errors
4
+ """
5
+ Utility classes/functions to let numba recognize
6
+ pandas Index/Series/DataFrame
7
+
8
+ Mostly vendored from https://github.com/numba/numba/blob/main/numba/tests/pdlike_usecase.py
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from contextlib import contextmanager
14
+ import operator
15
+ from typing import Self
16
+
17
+ import numba
18
+ from numba import types
19
+ from numba.core import cgutils
20
+ from numba.core.datamodel import models
21
+ from numba.core.extending import (
22
+ NativeValue,
23
+ box,
24
+ lower_builtin,
25
+ make_attribute_wrapper,
26
+ overload,
27
+ overload_attribute,
28
+ overload_method,
29
+ register_model,
30
+ type_callable,
31
+ typeof_impl,
32
+ unbox,
33
+ )
34
+ from numba.core.imputils import impl_ret_borrowed
35
+ import numpy as np
36
+
37
+ from pandas._libs import lib
38
+
39
+ from pandas.core.indexes.base import Index
40
+ from pandas.core.indexing import _iLocIndexer
41
+ from pandas.core.internals import SingleBlockManager
42
+ from pandas.core.series import Series
43
+
44
+
45
+ # Helper function to hack around fact that Index casts numpy string dtype to object
46
+ #
47
+ # Idea is to set an attribute on an Index called _numba_data
48
+ # that is the original data, or the object data casted to numpy string dtype,
49
+ # with a context manager that is unset afterwards
50
+ @contextmanager
51
+ def set_numba_data(index: Index):
52
+ numba_data = index._data
53
+ if numba_data.dtype in (object, "string"):
54
+ numba_data = np.asarray(numba_data)
55
+ if not lib.is_string_array(numba_data):
56
+ raise ValueError(
57
+ "The numba engine only supports using string or numeric column names"
58
+ )
59
+ numba_data = numba_data.astype("U")
60
+ try:
61
+ index._numba_data = numba_data
62
+ yield index
63
+ finally:
64
+ del index._numba_data
65
+
66
+
67
+ # TODO: Range index support
68
+ # (this currently lowers OK, but does not round-trip)
69
+ class IndexType(types.Type):
70
+ """
71
+ The type class for Index objects.
72
+ """
73
+
74
+ def __init__(self, dtype, layout, pyclass: any) -> None:
75
+ self.pyclass = pyclass
76
+ name = f"index({dtype}, {layout})"
77
+ self.dtype = dtype
78
+ self.layout = layout
79
+ super().__init__(name)
80
+
81
+ @property
82
+ def key(self):
83
+ return self.pyclass, self.dtype, self.layout
84
+
85
+ @property
86
+ def as_array(self):
87
+ return types.Array(self.dtype, 1, self.layout)
88
+
89
+ def copy(self, dtype=None, ndim: int = 1, layout=None) -> Self:
90
+ assert ndim == 1
91
+ if dtype is None:
92
+ dtype = self.dtype
93
+ layout = layout or self.layout
94
+ return type(self)(dtype, layout, self.pyclass)
95
+
96
+
97
+ class SeriesType(types.Type):
98
+ """
99
+ The type class for Series objects.
100
+ """
101
+
102
+ def __init__(self, dtype, index, namety) -> None:
103
+ assert isinstance(index, IndexType)
104
+ self.dtype = dtype
105
+ self.index = index
106
+ self.values = types.Array(self.dtype, 1, "C")
107
+ self.namety = namety
108
+ name = f"series({dtype}, {index}, {namety})"
109
+ super().__init__(name)
110
+
111
+ @property
112
+ def key(self):
113
+ return self.dtype, self.index, self.namety
114
+
115
+ @property
116
+ def as_array(self):
117
+ return self.values
118
+
119
+ def copy(self, dtype=None, ndim: int = 1, layout: str = "C") -> Self:
120
+ assert ndim == 1
121
+ assert layout == "C"
122
+ if dtype is None:
123
+ dtype = self.dtype
124
+ return type(self)(dtype, self.index, self.namety)
125
+
126
+
127
+ @typeof_impl.register(Index)
128
+ def typeof_index(val, c) -> IndexType:
129
+ """
130
+ This will assume that only strings are in object dtype
131
+ index.
132
+ (you should check this before this gets lowered down to numba)
133
+ """
134
+ # arrty = typeof_impl(val._data, c)
135
+ arrty = typeof_impl(val._numba_data, c)
136
+ assert arrty.ndim == 1
137
+ return IndexType(arrty.dtype, arrty.layout, type(val))
138
+
139
+
140
+ @typeof_impl.register(Series)
141
+ def typeof_series(val, c) -> SeriesType:
142
+ index = typeof_impl(val.index, c)
143
+ arrty = typeof_impl(val.values, c)
144
+ namety = typeof_impl(val.name, c)
145
+ assert arrty.ndim == 1
146
+ assert arrty.layout == "C"
147
+ return SeriesType(arrty.dtype, index, namety)
148
+
149
+
150
+ @type_callable(Series)
151
+ def type_series_constructor(context):
152
+ def typer(data, index, name=None):
153
+ if isinstance(index, IndexType) and isinstance(data, types.Array):
154
+ assert data.ndim == 1
155
+ if name is None:
156
+ name = types.intp
157
+ return SeriesType(data.dtype, index, name)
158
+
159
+ return typer
160
+
161
+
162
+ @type_callable(Index)
163
+ def type_index_constructor(context):
164
+ def typer(data, hashmap=None):
165
+ if isinstance(data, types.Array):
166
+ assert data.layout == "C"
167
+ assert data.ndim == 1
168
+ assert hashmap is None or isinstance(hashmap, types.DictType)
169
+ return IndexType(data.dtype, layout=data.layout, pyclass=Index)
170
+
171
+ return typer
172
+
173
+
174
+ # Backend extensions for Index and Series and Frame
175
+ @register_model(IndexType)
176
+ class IndexModel(models.StructModel):
177
+ def __init__(self, dmm, fe_type) -> None:
178
+ # We don't want the numpy string scalar type in our hashmap
179
+ members = [
180
+ ("data", fe_type.as_array),
181
+ # This is an attempt to emulate our hashtable code with a numba
182
+ # typed dict
183
+ # It maps from values in the index to their integer positions in the array
184
+ ("hashmap", types.DictType(fe_type.dtype, types.intp)),
185
+ # Pointer to the Index object this was created from, or that it
186
+ # boxes to
187
+ # https://numba.discourse.group/t/qst-how-to-cache-the-boxing-of-an-object/2128/2?u=lithomas1
188
+ ("parent", types.pyobject),
189
+ ]
190
+ models.StructModel.__init__(self, dmm, fe_type, members)
191
+
192
+
193
+ @register_model(SeriesType)
194
+ class SeriesModel(models.StructModel):
195
+ def __init__(self, dmm, fe_type) -> None:
196
+ members = [
197
+ ("index", fe_type.index),
198
+ ("values", fe_type.as_array),
199
+ ("name", fe_type.namety),
200
+ ]
201
+ models.StructModel.__init__(self, dmm, fe_type, members)
202
+
203
+
204
+ make_attribute_wrapper(IndexType, "data", "_data")
205
+ make_attribute_wrapper(IndexType, "hashmap", "hashmap")
206
+
207
+ make_attribute_wrapper(SeriesType, "index", "index")
208
+ make_attribute_wrapper(SeriesType, "values", "values")
209
+ make_attribute_wrapper(SeriesType, "name", "name")
210
+
211
+
212
+ @lower_builtin(Series, types.Array, IndexType)
213
+ def pdseries_constructor(context, builder, sig, args):
214
+ data, index = args
215
+ series = cgutils.create_struct_proxy(sig.return_type)(context, builder)
216
+ series.index = index
217
+ series.values = data
218
+ series.name = context.get_constant(types.intp, 0)
219
+ return impl_ret_borrowed(context, builder, sig.return_type, series._getvalue())
220
+
221
+
222
+ @lower_builtin(Series, types.Array, IndexType, types.intp)
223
+ @lower_builtin(Series, types.Array, IndexType, types.float64)
224
+ @lower_builtin(Series, types.Array, IndexType, types.unicode_type)
225
+ def pdseries_constructor_with_name(context, builder, sig, args):
226
+ data, index, name = args
227
+ series = cgutils.create_struct_proxy(sig.return_type)(context, builder)
228
+ series.index = index
229
+ series.values = data
230
+ series.name = name
231
+ return impl_ret_borrowed(context, builder, sig.return_type, series._getvalue())
232
+
233
+
234
+ @lower_builtin(Index, types.Array, types.DictType, types.pyobject)
235
+ def index_constructor_2arg(context, builder, sig, args):
236
+ (data, hashmap, parent) = args
237
+ index = cgutils.create_struct_proxy(sig.return_type)(context, builder)
238
+
239
+ index.data = data
240
+ index.hashmap = hashmap
241
+ index.parent = parent
242
+ return impl_ret_borrowed(context, builder, sig.return_type, index._getvalue())
243
+
244
+
245
+ @lower_builtin(Index, types.Array, types.DictType)
246
+ def index_constructor_2arg_parent(context, builder, sig, args):
247
+ # Basically same as index_constructor_1arg, but also lets you specify the
248
+ # parent object
249
+ (data, hashmap) = args
250
+ index = cgutils.create_struct_proxy(sig.return_type)(context, builder)
251
+
252
+ index.data = data
253
+ index.hashmap = hashmap
254
+ return impl_ret_borrowed(context, builder, sig.return_type, index._getvalue())
255
+
256
+
257
+ @lower_builtin(Index, types.Array)
258
+ def index_constructor_1arg(context, builder, sig, args):
259
+ from numba.typed import Dict
260
+
261
+ key_type = sig.return_type.dtype
262
+ value_type = types.intp
263
+
264
+ def index_impl(data):
265
+ return Index(data, Dict.empty(key_type, value_type))
266
+
267
+ return context.compile_internal(builder, index_impl, sig, args)
268
+
269
+
270
+ # Helper to convert the unicodecharseq (numpy string scalar) into a unicode_type
271
+ # (regular string)
272
+ def maybe_cast_str(x):
273
+ # Dummy function that numba can overload
274
+ pass
275
+
276
+
277
+ @overload(maybe_cast_str)
278
+ def maybe_cast_str_impl(x):
279
+ """Converts numba UnicodeCharSeq (numpy string scalar) -> unicode type (string).
280
+ Is a no-op for other types."""
281
+ if isinstance(x, types.UnicodeCharSeq):
282
+ return lambda x: str(x)
283
+ else:
284
+ return lambda x: x
285
+
286
+
287
+ @unbox(IndexType)
288
+ def unbox_index(typ, obj, c):
289
+ """
290
+ Convert an Index object to a native structure.
291
+
292
+ Note: Object dtype is not allowed here
293
+ """
294
+ data_obj = c.pyapi.object_getattr_string(obj, "_numba_data")
295
+ index = cgutils.create_struct_proxy(typ)(c.context, c.builder)
296
+ # If we see an object array, assume its been validated as only containing strings
297
+ # We still need to do the conversion though
298
+ index.data = c.unbox(typ.as_array, data_obj).value
299
+ typed_dict_obj = c.pyapi.unserialize(c.pyapi.serialize_object(numba.typed.Dict))
300
+ # Create an empty typed dict in numba for the hashmap for indexing
301
+ # equiv of numba.typed.Dict.empty(typ.dtype, types.intp)
302
+ arr_type_obj = c.pyapi.unserialize(c.pyapi.serialize_object(typ.dtype))
303
+ intp_type_obj = c.pyapi.unserialize(c.pyapi.serialize_object(types.intp))
304
+ hashmap_obj = c.pyapi.call_method(
305
+ typed_dict_obj, "empty", (arr_type_obj, intp_type_obj)
306
+ )
307
+ index.hashmap = c.unbox(types.DictType(typ.dtype, types.intp), hashmap_obj).value
308
+ # Set the parent for speedy boxing.
309
+ index.parent = obj
310
+
311
+ # Decrefs
312
+ c.pyapi.decref(data_obj)
313
+ c.pyapi.decref(arr_type_obj)
314
+ c.pyapi.decref(intp_type_obj)
315
+ c.pyapi.decref(typed_dict_obj)
316
+
317
+ return NativeValue(index._getvalue())
318
+
319
+
320
+ @unbox(SeriesType)
321
+ def unbox_series(typ, obj, c):
322
+ """
323
+ Convert a Series object to a native structure.
324
+ """
325
+ index_obj = c.pyapi.object_getattr_string(obj, "index")
326
+ values_obj = c.pyapi.object_getattr_string(obj, "values")
327
+ name_obj = c.pyapi.object_getattr_string(obj, "name")
328
+
329
+ series = cgutils.create_struct_proxy(typ)(c.context, c.builder)
330
+ series.index = c.unbox(typ.index, index_obj).value
331
+ series.values = c.unbox(typ.values, values_obj).value
332
+ series.name = c.unbox(typ.namety, name_obj).value
333
+
334
+ # Decrefs
335
+ c.pyapi.decref(index_obj)
336
+ c.pyapi.decref(values_obj)
337
+ c.pyapi.decref(name_obj)
338
+
339
+ return NativeValue(series._getvalue())
340
+
341
+
342
+ @box(IndexType)
343
+ def box_index(typ, val, c):
344
+ """
345
+ Convert a native index structure to an Index object.
346
+
347
+ If our native index is of a numpy string dtype, we'll cast it to
348
+ object.
349
+ """
350
+ # First build a Numpy array object, then wrap it in an Index
351
+ index = cgutils.create_struct_proxy(typ)(c.context, c.builder, value=val)
352
+
353
+ res = cgutils.alloca_once_value(c.builder, index.parent)
354
+
355
+ # Does parent exist?
356
+ # (it means already boxed once, or Index same as original df.index or df.columns)
357
+ # xref https://github.com/numba/numba/blob/596e8a55334cc46854e3192766e643767bd7c934/numba/core/boxing.py#L593C17-L593C17
358
+ with c.builder.if_else(cgutils.is_not_null(c.builder, index.parent)) as (
359
+ has_parent,
360
+ otherwise,
361
+ ):
362
+ with has_parent:
363
+ c.pyapi.incref(index.parent)
364
+ with otherwise:
365
+ # TODO: preserve the original class for the index
366
+ # Also need preserve the name of the Index
367
+ # class_obj = c.pyapi.unserialize(c.pyapi.serialize_object(typ.pyclass))
368
+ class_obj = c.pyapi.unserialize(c.pyapi.serialize_object(Index))
369
+ array_obj = c.box(typ.as_array, index.data)
370
+ if isinstance(typ.dtype, types.UnicodeCharSeq):
371
+ # We converted to numpy string dtype, convert back
372
+ # to object since _simple_new won't do that for uss
373
+ object_str_obj = c.pyapi.unserialize(c.pyapi.serialize_object("object"))
374
+ array_obj = c.pyapi.call_method(array_obj, "astype", (object_str_obj,))
375
+ c.pyapi.decref(object_str_obj)
376
+ # this is basically Index._simple_new(array_obj, name_obj) in python
377
+ index_obj = c.pyapi.call_method(class_obj, "_simple_new", (array_obj,))
378
+ index.parent = index_obj
379
+ c.builder.store(index_obj, res)
380
+
381
+ # Decrefs
382
+ c.pyapi.decref(class_obj)
383
+ c.pyapi.decref(array_obj)
384
+ return c.builder.load(res)
385
+
386
+
387
+ @box(SeriesType)
388
+ def box_series(typ, val, c):
389
+ """
390
+ Convert a native series structure to a Series object.
391
+ """
392
+ series = cgutils.create_struct_proxy(typ)(c.context, c.builder, value=val)
393
+ series_const_obj = c.pyapi.unserialize(c.pyapi.serialize_object(Series._from_mgr))
394
+ mgr_const_obj = c.pyapi.unserialize(
395
+ c.pyapi.serialize_object(SingleBlockManager.from_array)
396
+ )
397
+ index_obj = c.box(typ.index, series.index)
398
+ array_obj = c.box(typ.as_array, series.values)
399
+ name_obj = c.box(typ.namety, series.name)
400
+ # This is basically equivalent of
401
+ # pd.Series(data=array_obj, index=index_obj)
402
+ # To improve perf, we will construct the Series from a manager
403
+ # object to avoid checks.
404
+ # We'll also set the name attribute manually to avoid validation
405
+ mgr_obj = c.pyapi.call_function_objargs(
406
+ mgr_const_obj,
407
+ (
408
+ array_obj,
409
+ index_obj,
410
+ ),
411
+ )
412
+ mgr_axes_obj = c.pyapi.object_getattr_string(mgr_obj, "axes")
413
+ # Series._constructor_from_mgr(mgr, axes)
414
+ series_obj = c.pyapi.call_function_objargs(
415
+ series_const_obj, (mgr_obj, mgr_axes_obj)
416
+ )
417
+ c.pyapi.object_setattr_string(series_obj, "_name", name_obj)
418
+
419
+ # Decrefs
420
+ c.pyapi.decref(series_const_obj)
421
+ c.pyapi.decref(mgr_axes_obj)
422
+ c.pyapi.decref(mgr_obj)
423
+ c.pyapi.decref(mgr_const_obj)
424
+ c.pyapi.decref(index_obj)
425
+ c.pyapi.decref(array_obj)
426
+ c.pyapi.decref(name_obj)
427
+
428
+ return series_obj
429
+
430
+
431
+ # Add common series reductions (e.g. mean, sum),
432
+ # and also add common binops (e.g. add, sub, mul, div)
433
+ def generate_series_reduction(ser_reduction, ser_method):
434
+ @overload_method(SeriesType, ser_reduction)
435
+ def series_reduction(series):
436
+ def series_reduction_impl(series):
437
+ return ser_method(series.values)
438
+
439
+ return series_reduction_impl
440
+
441
+ return series_reduction
442
+
443
+
444
+ def generate_series_binop(binop):
445
+ @overload(binop)
446
+ def series_binop(series1, value):
447
+ if isinstance(series1, SeriesType):
448
+ if isinstance(value, SeriesType):
449
+
450
+ def series_binop_impl(series1, series2):
451
+ # TODO: Check index matching?
452
+ return Series(
453
+ binop(series1.values, series2.values),
454
+ series1.index,
455
+ series1.name,
456
+ )
457
+
458
+ return series_binop_impl
459
+ else:
460
+
461
+ def series_binop_impl(series1, value):
462
+ return Series(
463
+ binop(series1.values, value), series1.index, series1.name
464
+ )
465
+
466
+ return series_binop_impl
467
+
468
+ return series_binop
469
+
470
+
471
+ series_reductions = [
472
+ ("sum", np.sum),
473
+ ("mean", np.mean),
474
+ # Disabled due to discrepancies between numba std. dev
475
+ # and pandas std. dev (no way to specify dof)
476
+ # ("std", np.std),
477
+ # ("var", np.var),
478
+ ("min", np.min),
479
+ ("max", np.max),
480
+ ]
481
+ for reduction, reduction_method in series_reductions:
482
+ generate_series_reduction(reduction, reduction_method)
483
+
484
+ series_binops = [operator.add, operator.sub, operator.mul, operator.truediv]
485
+
486
+ for ser_binop in series_binops:
487
+ generate_series_binop(ser_binop)
488
+
489
+
490
+ # get_loc on Index
491
+ @overload_method(IndexType, "get_loc")
492
+ def index_get_loc(index, item):
493
+ def index_get_loc_impl(index, item):
494
+ # Initialize the hash table if not initialized
495
+ if len(index.hashmap) == 0:
496
+ for i, val in enumerate(index._data):
497
+ index.hashmap[val] = i
498
+ return index.hashmap[item]
499
+
500
+ return index_get_loc_impl
501
+
502
+
503
+ # Indexing for Series/Index
504
+ @overload(operator.getitem)
505
+ def series_indexing(series, item):
506
+ if isinstance(series, SeriesType):
507
+
508
+ def series_getitem(series, item):
509
+ loc = series.index.get_loc(item)
510
+ return series.iloc[loc]
511
+
512
+ return series_getitem
513
+
514
+
515
+ @overload(operator.getitem)
516
+ def index_indexing(index, idx):
517
+ if isinstance(index, IndexType):
518
+
519
+ def index_getitem(index, idx):
520
+ return index._data[idx]
521
+
522
+ return index_getitem
523
+
524
+
525
+ class IlocType(types.Type):
526
+ def __init__(self, obj_type) -> None:
527
+ self.obj_type = obj_type
528
+ name = f"iLocIndexer({obj_type})"
529
+ super().__init__(name=name)
530
+
531
+ @property
532
+ def key(self):
533
+ return self.obj_type
534
+
535
+
536
+ @typeof_impl.register(_iLocIndexer)
537
+ def typeof_iloc(val, c) -> IlocType:
538
+ objtype = typeof_impl(val.obj, c)
539
+ return IlocType(objtype)
540
+
541
+
542
+ @type_callable(_iLocIndexer)
543
+ def type_iloc_constructor(context):
544
+ def typer(obj):
545
+ if isinstance(obj, SeriesType):
546
+ return IlocType(obj)
547
+
548
+ return typer
549
+
550
+
551
+ @lower_builtin(_iLocIndexer, SeriesType)
552
+ def iloc_constructor(context, builder, sig, args):
553
+ (obj,) = args
554
+ iloc_indexer = cgutils.create_struct_proxy(sig.return_type)(context, builder)
555
+ iloc_indexer.obj = obj
556
+ return impl_ret_borrowed(
557
+ context, builder, sig.return_type, iloc_indexer._getvalue()
558
+ )
559
+
560
+
561
+ @register_model(IlocType)
562
+ class ILocModel(models.StructModel):
563
+ def __init__(self, dmm, fe_type) -> None:
564
+ members = [("obj", fe_type.obj_type)]
565
+ models.StructModel.__init__(self, dmm, fe_type, members)
566
+
567
+
568
+ make_attribute_wrapper(IlocType, "obj", "obj")
569
+
570
+
571
+ @overload_attribute(SeriesType, "iloc")
572
+ def series_iloc(series):
573
+ def get(series):
574
+ return _iLocIndexer(series)
575
+
576
+ return get
577
+
578
+
579
+ @overload(operator.getitem)
580
+ def iloc_getitem(iloc_indexer, i):
581
+ if isinstance(iloc_indexer, IlocType):
582
+
583
+ def getitem_impl(iloc_indexer, i):
584
+ return iloc_indexer.obj.values[i]
585
+
586
+ return getitem_impl