research-copilot 0.1.0

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +190 -0
  3. package/app/build/icon.icns +0 -0
  4. package/app/build/icon.ico +0 -0
  5. package/app/build/icon.png +0 -0
  6. package/app/out/main/index.mjs +6719 -0
  7. package/app/out/preload/index.js +141 -0
  8. package/app/out/renderer/assets/Inter-Variable-Latin-8kRkwJBP.woff2 +0 -0
  9. package/app/out/renderer/assets/Inter-Variable-LatinExt-B_-bZUTo.woff2 +0 -0
  10. package/app/out/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  11. package/app/out/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  12. package/app/out/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  13. package/app/out/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  14. package/app/out/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  15. package/app/out/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  16. package/app/out/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  17. package/app/out/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  18. package/app/out/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  19. package/app/out/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  20. package/app/out/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  21. package/app/out/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  22. package/app/out/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  23. package/app/out/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  24. package/app/out/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  25. package/app/out/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  26. package/app/out/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  27. package/app/out/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  28. package/app/out/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  29. package/app/out/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  30. package/app/out/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  31. package/app/out/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  32. package/app/out/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  33. package/app/out/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  34. package/app/out/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  35. package/app/out/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  36. package/app/out/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  37. package/app/out/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  38. package/app/out/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  39. package/app/out/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  40. package/app/out/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  41. package/app/out/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  42. package/app/out/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  43. package/app/out/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  44. package/app/out/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  45. package/app/out/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  46. package/app/out/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  47. package/app/out/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  48. package/app/out/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  49. package/app/out/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  50. package/app/out/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  51. package/app/out/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  52. package/app/out/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  53. package/app/out/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  54. package/app/out/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  55. package/app/out/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  56. package/app/out/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  57. package/app/out/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  58. package/app/out/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  59. package/app/out/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  60. package/app/out/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  61. package/app/out/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  62. package/app/out/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  63. package/app/out/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  64. package/app/out/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  65. package/app/out/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  66. package/app/out/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  67. package/app/out/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  68. package/app/out/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  69. package/app/out/renderer/assets/MilkdownMarkdownEditor-bLPxrCVb.js +89821 -0
  70. package/app/out/renderer/assets/MilkdownMarkdownEditor-tTNRIB2K.css +2555 -0
  71. package/app/out/renderer/assets/Tableau10-BqnYsPR6.js +9 -0
  72. package/app/out/renderer/assets/apl-fqmucPXA.js +140 -0
  73. package/app/out/renderer/assets/arc-J47ePHZ2.js +132 -0
  74. package/app/out/renderer/assets/array-DgktLKBx.js +6 -0
  75. package/app/out/renderer/assets/asciiarmor-DucZyvP0.js +56 -0
  76. package/app/out/renderer/assets/asn1-BnOEsgAm.js +144 -0
  77. package/app/out/renderer/assets/asterisk-QAlztEwS.js +345 -0
  78. package/app/out/renderer/assets/blockDiagram-c4efeb88-5uRQXgQJ.js +1817 -0
  79. package/app/out/renderer/assets/brainfuck-DZVCuF_t.js +53 -0
  80. package/app/out/renderer/assets/c4Diagram-c83219d4-C4iCTPEL.js +2464 -0
  81. package/app/out/renderer/assets/channel-ZAmhHE3g.js +7 -0
  82. package/app/out/renderer/assets/classDiagram-beda092f-7NOZxq_W.js +357 -0
  83. package/app/out/renderer/assets/classDiagram-v2-2358418a-5fPT-cUH.js +291 -0
  84. package/app/out/renderer/assets/clike-xqXYL6ge.js +805 -0
  85. package/app/out/renderer/assets/clojure-BhXMqnxz.js +849 -0
  86. package/app/out/renderer/assets/clone-CsnzsYXQ.js +8 -0
  87. package/app/out/renderer/assets/cmake-BGaNd9E7.js +71 -0
  88. package/app/out/renderer/assets/cobol-4yqQntpt.js +120 -0
  89. package/app/out/renderer/assets/coffeescript-D2dXvhEc.js +308 -0
  90. package/app/out/renderer/assets/commonlisp-CF_VNHQR.js +130 -0
  91. package/app/out/renderer/assets/createText-1719965b-Cji7KN4K.js +4904 -0
  92. package/app/out/renderer/assets/crystal-DyuLTqLs.js +398 -0
  93. package/app/out/renderer/assets/css-c-jst79C.js +1783 -0
  94. package/app/out/renderer/assets/cypher-Dlu_3r4V.js +121 -0
  95. package/app/out/renderer/assets/d-UURgV0Ux.js +179 -0
  96. package/app/out/renderer/assets/diff-B_Bi2Crb.js +25 -0
  97. package/app/out/renderer/assets/dockerfile-Bvk733Ga.js +201 -0
  98. package/app/out/renderer/assets/dtd-Dy74G54E.js +114 -0
  99. package/app/out/renderer/assets/dylan-TSb-Nfix.js +314 -0
  100. package/app/out/renderer/assets/ebnf-DAomQUbD.js +139 -0
  101. package/app/out/renderer/assets/ecl-B59qGGVg.js +178 -0
  102. package/app/out/renderer/assets/edges-96097737-CD0EvAZQ.js +1844 -0
  103. package/app/out/renderer/assets/eiffel-Dze7nlu3.js +134 -0
  104. package/app/out/renderer/assets/elm-DG7jkhNZ.js +176 -0
  105. package/app/out/renderer/assets/erDiagram-0228fc6a-DRYXBpi7.js +1321 -0
  106. package/app/out/renderer/assets/erlang-BO6gOnGA.js +674 -0
  107. package/app/out/renderer/assets/factor-CMxFHDqz.js +65 -0
  108. package/app/out/renderer/assets/fcl-CDDUNjTj.js +141 -0
  109. package/app/out/renderer/assets/flowDb-c6c81e3f-CuoIN-Cy.js +1713 -0
  110. package/app/out/renderer/assets/flowDiagram-50d868cf-CPWPLOml.js +1272 -0
  111. package/app/out/renderer/assets/flowDiagram-v2-4f6560a1-C_R12s4S.js +33 -0
  112. package/app/out/renderer/assets/flowchart-elk-definition-6af322e1-BdKUSFpi.js +92921 -0
  113. package/app/out/renderer/assets/forth-B9D2JCeE.js +116 -0
  114. package/app/out/renderer/assets/fortran-CAG2BFbe.js +467 -0
  115. package/app/out/renderer/assets/ganttDiagram-a2739b55-ygqT5HlG.js +3399 -0
  116. package/app/out/renderer/assets/gas-d3KEcW3x.js +294 -0
  117. package/app/out/renderer/assets/gherkin-DhZlEZiy.js +115 -0
  118. package/app/out/renderer/assets/gitGraphDiagram-82fe8481-D97GT4iA.js +1791 -0
  119. package/app/out/renderer/assets/graph-DpC13d95.js +1237 -0
  120. package/app/out/renderer/assets/groovy-CpwJiBl7.js +223 -0
  121. package/app/out/renderer/assets/haskell-BlGBCCe3.js +459 -0
  122. package/app/out/renderer/assets/haxe-7MlzfeYV.js +514 -0
  123. package/app/out/renderer/assets/http-BqypyemW.js +79 -0
  124. package/app/out/renderer/assets/idl-4HIGJlDI.js +985 -0
  125. package/app/out/renderer/assets/index-4-ziknCv.js +292 -0
  126. package/app/out/renderer/assets/index-5325376f-Bbs7Fbqr.js +663 -0
  127. package/app/out/renderer/assets/index-B2jip-rk.js +2489 -0
  128. package/app/out/renderer/assets/index-BKTVfokE.js +312 -0
  129. package/app/out/renderer/assets/index-BiJbFgVG.js +118 -0
  130. package/app/out/renderer/assets/index-Bn433Fat.js +83 -0
  131. package/app/out/renderer/assets/index-BqDyyRCx.js +39679 -0
  132. package/app/out/renderer/assets/index-BzFMeMPn.js +158 -0
  133. package/app/out/renderer/assets/index-C-_uCjZJ.css +2701 -0
  134. package/app/out/renderer/assets/index-C1ithNW1.js +1765 -0
  135. package/app/out/renderer/assets/index-CAJkRYkO.js +407 -0
  136. package/app/out/renderer/assets/index-CleO0-yj.js +690 -0
  137. package/app/out/renderer/assets/index-Cq4MH3sY.js +1020 -0
  138. package/app/out/renderer/assets/index-CtA0Xj22.js +705 -0
  139. package/app/out/renderer/assets/index-CvAZkqBZ.js +83 -0
  140. package/app/out/renderer/assets/index-D3UDN-5c.js +152 -0
  141. package/app/out/renderer/assets/index-D4F9R5ao.js +179 -0
  142. package/app/out/renderer/assets/index-D6RguhZ5.js +328 -0
  143. package/app/out/renderer/assets/index-DnEowqXv.js +386 -0
  144. package/app/out/renderer/assets/index-K8c8Mqdy.js +98 -0
  145. package/app/out/renderer/assets/index-Kh14gO6K.js +62 -0
  146. package/app/out/renderer/assets/index-WFd2jRnA.js +333 -0
  147. package/app/out/renderer/assets/index-WgMfkRFp.js +313 -0
  148. package/app/out/renderer/assets/index-Y4lKyF6t.js +1042 -0
  149. package/app/out/renderer/assets/index-fx307_f1.js +643 -0
  150. package/app/out/renderer/assets/infoDiagram-8eee0895-ptaVSwzq.js +511 -0
  151. package/app/out/renderer/assets/init-ZxktEp_H.js +16 -0
  152. package/app/out/renderer/assets/javascript-C3MnDRiU.js +994 -0
  153. package/app/out/renderer/assets/journeyDiagram-c64418c1-aloEGOQp.js +1184 -0
  154. package/app/out/renderer/assets/julia-Bs6JJhYG.js +407 -0
  155. package/app/out/renderer/assets/layout-ZeuHE_aY.js +2217 -0
  156. package/app/out/renderer/assets/line-CAgaGl-S.js +45 -0
  157. package/app/out/renderer/assets/linear-DIg7lTe1.js +539 -0
  158. package/app/out/renderer/assets/livescript-DmzgM3Yt.js +296 -0
  159. package/app/out/renderer/assets/lua-8cJgIlqe.js +256 -0
  160. package/app/out/renderer/assets/mathematica-DNLOL9PQ.js +110 -0
  161. package/app/out/renderer/assets/mbox-Ga7d4MMN.js +117 -0
  162. package/app/out/renderer/assets/mindmap-definition-8da855dc-B8XVoUxz.js +36054 -0
  163. package/app/out/renderer/assets/mirc-Dma3B8rS.js +107 -0
  164. package/app/out/renderer/assets/mllike-DHn7xckP.js +334 -0
  165. package/app/out/renderer/assets/modelica-0d55jYY0.js +147 -0
  166. package/app/out/renderer/assets/mscgen-DdqZYINH.js +135 -0
  167. package/app/out/renderer/assets/mumps-Btr8VblO.js +93 -0
  168. package/app/out/renderer/assets/nginx-DTDtBDVN.js +141 -0
  169. package/app/out/renderer/assets/nsis-3zG7tgur.js +62 -0
  170. package/app/out/renderer/assets/ntriples-CvgOYMpL.js +153 -0
  171. package/app/out/renderer/assets/octave-DYBj3-tl.js +200 -0
  172. package/app/out/renderer/assets/ordinal-DSZU4PqD.js +76 -0
  173. package/app/out/renderer/assets/oz-R_e8WMIi.js +231 -0
  174. package/app/out/renderer/assets/pascal-GD8iposT.js +105 -0
  175. package/app/out/renderer/assets/path-Cp2qmpkd.js +109 -0
  176. package/app/out/renderer/assets/perl-DL9mHpoi.js +1105 -0
  177. package/app/out/renderer/assets/pieDiagram-a8764435-DlwoeBU2.js +770 -0
  178. package/app/out/renderer/assets/pig-C_4T4YIV.js +101 -0
  179. package/app/out/renderer/assets/powershell-B0suO7Vd.js +328 -0
  180. package/app/out/renderer/assets/properties-BR-vP1aU.js +58 -0
  181. package/app/out/renderer/assets/protobuf-BxgpyhoW.js +77 -0
  182. package/app/out/renderer/assets/pug-By0kVCfm.js +405 -0
  183. package/app/out/renderer/assets/puppet-Bdao66PW.js +137 -0
  184. package/app/out/renderer/assets/python-CvWbmiX4.js +427 -0
  185. package/app/out/renderer/assets/q-CrbCVq4a.js +131 -0
  186. package/app/out/renderer/assets/quadrantDiagram-1e28029f-BaSi1XB4.js +1200 -0
  187. package/app/out/renderer/assets/r-V7nswm59.js +170 -0
  188. package/app/out/renderer/assets/requirementDiagram-08caed73-D3EFyegZ.js +1092 -0
  189. package/app/out/renderer/assets/rpm-C-DLY-If.js +109 -0
  190. package/app/out/renderer/assets/ruby-JDKLJNK0.js +330 -0
  191. package/app/out/renderer/assets/sankeyDiagram-a04cb91d-Cv44AsnM.js +1174 -0
  192. package/app/out/renderer/assets/sas-D2UG-yhZ.js +207 -0
  193. package/app/out/renderer/assets/scheme-BKzrkGJD.js +222 -0
  194. package/app/out/renderer/assets/sequenceDiagram-c5b8d532-CuUBu-x4.js +3337 -0
  195. package/app/out/renderer/assets/shell-BlsXDxCn.js +222 -0
  196. package/app/out/renderer/assets/sieve-CjwBwOY5.js +135 -0
  197. package/app/out/renderer/assets/simple-mode-DMneyfDu.js +130 -0
  198. package/app/out/renderer/assets/smalltalk-BOIGQuhN.js +121 -0
  199. package/app/out/renderer/assets/solr-CwD7U71z.js +69 -0
  200. package/app/out/renderer/assets/sparql-DYskk2vE.js +249 -0
  201. package/app/out/renderer/assets/spreadsheet-Bgtt3oLP.js +87 -0
  202. package/app/out/renderer/assets/sql-BSrOzCRI.js +354 -0
  203. package/app/out/renderer/assets/stateDiagram-1ecb1508-BOU34Zp4.js +454 -0
  204. package/app/out/renderer/assets/stateDiagram-v2-c2b004d7-BgRoffou.js +326 -0
  205. package/app/out/renderer/assets/stex-B6LNC55o.js +231 -0
  206. package/app/out/renderer/assets/styles-b4e223ce-BMr9TPuj.js +1483 -0
  207. package/app/out/renderer/assets/styles-ca3715f6-DgbNw99p.js +1363 -0
  208. package/app/out/renderer/assets/styles-d45a18b0-DtRYKYKf.js +574 -0
  209. package/app/out/renderer/assets/stylus-BkS-boTH.js +565 -0
  210. package/app/out/renderer/assets/svgDrawCommon-b86b1483-Bein03PD.js +100 -0
  211. package/app/out/renderer/assets/swift-FRZi1uvB.js +291 -0
  212. package/app/out/renderer/assets/tcl-CUcaCdmq.js +114 -0
  213. package/app/out/renderer/assets/textile-BnFpjsrl.js +414 -0
  214. package/app/out/renderer/assets/tiddlywiki-CjprD-Qp.js +218 -0
  215. package/app/out/renderer/assets/tiki-B4EPSQ1G.js +265 -0
  216. package/app/out/renderer/assets/timeline-definition-faaaa080-BlWpLE_4.js +1212 -0
  217. package/app/out/renderer/assets/toml-BOuWGMcf.js +76 -0
  218. package/app/out/renderer/assets/troff-E1bJ0PPL.js +61 -0
  219. package/app/out/renderer/assets/ttcn-cfg-Dc39-fIP.js +133 -0
  220. package/app/out/renderer/assets/ttcn-tKd4HLu4.js +192 -0
  221. package/app/out/renderer/assets/turtle-Dq7-1WAf.js +124 -0
  222. package/app/out/renderer/assets/vb-Dp90gtsv.js +196 -0
  223. package/app/out/renderer/assets/vbscript-CI6_mxxU.js +479 -0
  224. package/app/out/renderer/assets/velocity-BwIZK1TH.js +149 -0
  225. package/app/out/renderer/assets/verilog-DDCYnHN8.js +430 -0
  226. package/app/out/renderer/assets/vhdl-DCkMIyT9.js +158 -0
  227. package/app/out/renderer/assets/webidl-BTLTThCm.js +204 -0
  228. package/app/out/renderer/assets/xquery-BgiOC5Ce.js +525 -0
  229. package/app/out/renderer/assets/xychartDiagram-f5964ef8-Bhga-YXm.js +1799 -0
  230. package/app/out/renderer/assets/yacas-b5lAVEIl.js +130 -0
  231. package/app/out/renderer/assets/z80-BZV19vqv.js +93 -0
  232. package/app/out/renderer/index.html +13 -0
  233. package/app/out/skills/community-builtin/README.md +29 -0
  234. package/app/out/skills/community-builtin/document-docx/SKILL.md +44 -0
  235. package/app/out/skills/community-builtin/document-docx/scripts/docx-to-markdown.sh +20 -0
  236. package/app/out/skills/community-builtin/document-docx/scripts/extract-docx-text.sh +28 -0
  237. package/app/out/skills/community-builtin/document-docx/scripts/init-docx-template.sh +32 -0
  238. package/app/out/skills/community-builtin/document-docx/scripts/setup-docx-tools.sh +10 -0
  239. package/app/out/skills/community-builtin/markitdown/SKILL.md +105 -0
  240. package/app/out/skills/community-builtin/markitdown/scripts/batch-convert.sh +40 -0
  241. package/app/out/skills/community-builtin/markitdown/scripts/convert-file.sh +24 -0
  242. package/app/out/skills/community-builtin/markitdown/scripts/setup-markitdown.sh +10 -0
  243. package/app/out/skills/community-builtin/repo-quick-audit/SKILL.md +27 -0
  244. package/app/out/skills/community-builtin/repo-quick-audit/scripts/audit-basics.sh +19 -0
  245. package/app/out/skills/research-pilot-default-project-skills/README.md +23 -0
  246. package/app/out/skills/research-pilot-default-project-skills/citation-management/SKILL.md +39 -0
  247. package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/doi-to-bibtex.sh +25 -0
  248. package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/normalize-bibtex-keys.sh +51 -0
  249. package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/setup-citation-tools.sh +10 -0
  250. package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/validate-bib.sh +31 -0
  251. package/app/out/skills/research-pilot-default-project-skills/matplotlib/SKILL.md +34 -0
  252. package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/api_reference.md +412 -0
  253. package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/common_issues.md +563 -0
  254. package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/plot_types.md +476 -0
  255. package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/styling_guide.md +589 -0
  256. package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/subagent_quickstart.md +30 -0
  257. package/app/out/skills/research-pilot-default-project-skills/matplotlib/scripts/plot_template.py +401 -0
  258. package/app/out/skills/research-pilot-default-project-skills/matplotlib/scripts/style_configurator.py +409 -0
  259. package/app/out/skills/research-pilot-default-project-skills/research-grants/SKILL.md +38 -0
  260. package/app/out/skills/research-pilot-default-project-skills/research-grants/scripts/check-grant-compliance.sh +40 -0
  261. package/app/out/skills/research-pilot-default-project-skills/research-grants/scripts/grant-summary-card.sh +32 -0
  262. package/app/out/skills/research-pilot-default-project-skills/research-grants/scripts/init-grant-structure.sh +70 -0
  263. package/app/package.json +77 -0
  264. package/bin/cli.mjs +56 -0
  265. package/lib/README.md +145 -0
  266. package/lib/skills/_generated.ts +13 -0
  267. package/lib/skills/builtin/brainstorming-research-ideas/SKILL.md +280 -0
  268. package/lib/skills/builtin/coding/SKILL.md +114 -0
  269. package/lib/skills/builtin/creative-thinking-for-research/SKILL.md +273 -0
  270. package/lib/skills/builtin/matplotlib/SKILL.md +361 -0
  271. package/lib/skills/builtin/matplotlib/references/api_reference.md +412 -0
  272. package/lib/skills/builtin/matplotlib/references/common_issues.md +563 -0
  273. package/lib/skills/builtin/matplotlib/references/plot_types.md +476 -0
  274. package/lib/skills/builtin/matplotlib/references/styling_guide.md +589 -0
  275. package/lib/skills/builtin/matplotlib/scripts/plot_template.py +401 -0
  276. package/lib/skills/builtin/matplotlib/scripts/style_configurator.py +409 -0
  277. package/lib/skills/builtin/paper-writing/SKILL.md +554 -0
  278. package/lib/skills/builtin/paper-writing/references/checklists.md +524 -0
  279. package/lib/skills/builtin/paper-writing/references/citation-workflow.md +562 -0
  280. package/lib/skills/builtin/paper-writing/references/reviewer-guidelines.md +462 -0
  281. package/lib/skills/builtin/paper-writing/references/sources.md +189 -0
  282. package/lib/skills/builtin/paper-writing/references/systems-conferences.md +260 -0
  283. package/lib/skills/builtin/paper-writing/references/writing-guide.md +476 -0
  284. package/lib/skills/builtin/paper-writing/templates/README.md +408 -0
  285. package/lib/skills/builtin/paper-writing/templates/aaai2026/README.md +534 -0
  286. package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026-unified-supp.tex +144 -0
  287. package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026-unified-template.tex +952 -0
  288. package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026.bib +111 -0
  289. package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026.bst +1493 -0
  290. package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026.sty +315 -0
  291. package/lib/skills/builtin/paper-writing/templates/acl/README.md +50 -0
  292. package/lib/skills/builtin/paper-writing/templates/acl/acl.sty +312 -0
  293. package/lib/skills/builtin/paper-writing/templates/acl/acl_latex.tex +377 -0
  294. package/lib/skills/builtin/paper-writing/templates/acl/acl_lualatex.tex +101 -0
  295. package/lib/skills/builtin/paper-writing/templates/acl/acl_natbib.bst +1940 -0
  296. package/lib/skills/builtin/paper-writing/templates/acl/anthology.bib.txt +26 -0
  297. package/lib/skills/builtin/paper-writing/templates/acl/custom.bib +70 -0
  298. package/lib/skills/builtin/paper-writing/templates/acl/formatting.md +326 -0
  299. package/lib/skills/builtin/paper-writing/templates/asplos2027/main.tex +459 -0
  300. package/lib/skills/builtin/paper-writing/templates/asplos2027/references.bib +135 -0
  301. package/lib/skills/builtin/paper-writing/templates/colm2025/README.md +3 -0
  302. package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.bib +11 -0
  303. package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.bst +1440 -0
  304. package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.pdf +0 -0
  305. package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.sty +218 -0
  306. package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.tex +305 -0
  307. package/lib/skills/builtin/paper-writing/templates/colm2025/fancyhdr.sty +485 -0
  308. package/lib/skills/builtin/paper-writing/templates/colm2025/math_commands.tex +508 -0
  309. package/lib/skills/builtin/paper-writing/templates/colm2025/natbib.sty +1246 -0
  310. package/lib/skills/builtin/paper-writing/templates/iclr2026/fancyhdr.sty +485 -0
  311. package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.bib +24 -0
  312. package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.bst +1440 -0
  313. package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.pdf +0 -0
  314. package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.sty +246 -0
  315. package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.tex +414 -0
  316. package/lib/skills/builtin/paper-writing/templates/iclr2026/math_commands.tex +508 -0
  317. package/lib/skills/builtin/paper-writing/templates/iclr2026/natbib.sty +1246 -0
  318. package/lib/skills/builtin/paper-writing/templates/icml2026/algorithm.sty +79 -0
  319. package/lib/skills/builtin/paper-writing/templates/icml2026/algorithmic.sty +201 -0
  320. package/lib/skills/builtin/paper-writing/templates/icml2026/example_paper.bib +75 -0
  321. package/lib/skills/builtin/paper-writing/templates/icml2026/example_paper.pdf +0 -0
  322. package/lib/skills/builtin/paper-writing/templates/icml2026/example_paper.tex +662 -0
  323. package/lib/skills/builtin/paper-writing/templates/icml2026/fancyhdr.sty +864 -0
  324. package/lib/skills/builtin/paper-writing/templates/icml2026/icml2026.bst +1443 -0
  325. package/lib/skills/builtin/paper-writing/templates/icml2026/icml2026.sty +767 -0
  326. package/lib/skills/builtin/paper-writing/templates/icml2026/icml_numpapers.pdf +0 -0
  327. package/lib/skills/builtin/paper-writing/templates/neurips2025/Makefile +36 -0
  328. package/lib/skills/builtin/paper-writing/templates/neurips2025/extra_pkgs.tex +53 -0
  329. package/lib/skills/builtin/paper-writing/templates/neurips2025/main.tex +38 -0
  330. package/lib/skills/builtin/paper-writing/templates/neurips2025/neurips.sty +382 -0
  331. package/lib/skills/builtin/paper-writing/templates/nsdi2027/main.tex +426 -0
  332. package/lib/skills/builtin/paper-writing/templates/nsdi2027/references.bib +151 -0
  333. package/lib/skills/builtin/paper-writing/templates/nsdi2027/usenix-2020-09.sty +83 -0
  334. package/lib/skills/builtin/paper-writing/templates/osdi2026/main.tex +429 -0
  335. package/lib/skills/builtin/paper-writing/templates/osdi2026/references.bib +150 -0
  336. package/lib/skills/builtin/paper-writing/templates/osdi2026/usenix-2020-09.sty +83 -0
  337. package/lib/skills/builtin/paper-writing/templates/sosp2026/main.tex +532 -0
  338. package/lib/skills/builtin/paper-writing/templates/sosp2026/references.bib +148 -0
  339. package/lib/skills/builtin/research-grants/SKILL.md +958 -0
  340. package/lib/skills/builtin/research-grants/assets/budget_justification_template.md +453 -0
  341. package/lib/skills/builtin/research-grants/assets/nih_specific_aims_template.md +166 -0
  342. package/lib/skills/builtin/research-grants/assets/nsf_project_summary_template.md +92 -0
  343. package/lib/skills/builtin/research-grants/references/README.md +285 -0
  344. package/lib/skills/builtin/research-grants/references/broader_impacts.md +392 -0
  345. package/lib/skills/builtin/research-grants/references/darpa_guidelines.md +636 -0
  346. package/lib/skills/builtin/research-grants/references/doe_guidelines.md +586 -0
  347. package/lib/skills/builtin/research-grants/references/nih_guidelines.md +851 -0
  348. package/lib/skills/builtin/research-grants/references/nsf_guidelines.md +570 -0
  349. package/lib/skills/builtin/research-grants/references/nstc_guidelines.md +733 -0
  350. package/lib/skills/builtin/research-grants/references/specific_aims_guide.md +458 -0
  351. package/lib/skills/builtin/rewrite-humanize/SKILL.md +116 -0
  352. package/lib/skills/builtin/rewrite-humanize/references/cs-venue-tone.md +57 -0
  353. package/lib/skills/builtin/rewrite-humanize/references/lexicon.md +50 -0
  354. package/lib/skills/builtin/scholar-evaluation/SKILL.md +300 -0
  355. package/lib/skills/builtin/scholar-evaluation/references/evaluation_framework.md +663 -0
  356. package/lib/skills/builtin/scholar-evaluation/scripts/calculate_scores.py +379 -0
  357. package/lib/skills/builtin/scientific-schematics/SKILL.md +603 -0
  358. package/lib/skills/builtin/scientific-schematics/references/QUICK_REFERENCE.md +182 -0
  359. package/lib/skills/builtin/scientific-schematics/references/README.md +292 -0
  360. package/lib/skills/builtin/scientific-schematics/references/best_practices.md +560 -0
  361. package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic.cpython-312.pyc +0 -0
  362. package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic_ai.cpython-312.pyc +0 -0
  363. package/lib/skills/builtin/scientific-schematics/scripts/example_usage.sh +85 -0
  364. package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic.py +141 -0
  365. package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic_ai.py +910 -0
  366. package/lib/skills/builtin/scientific-visualization/SKILL.md +749 -0
  367. package/lib/skills/builtin/scientific-visualization/assets/color_palettes.py +197 -0
  368. package/lib/skills/builtin/scientific-visualization/assets/nature.mplstyle +63 -0
  369. package/lib/skills/builtin/scientific-visualization/assets/presentation.mplstyle +61 -0
  370. package/lib/skills/builtin/scientific-visualization/assets/publication.mplstyle +68 -0
  371. package/lib/skills/builtin/scientific-visualization/references/color_palettes.md +348 -0
  372. package/lib/skills/builtin/scientific-visualization/references/journal_requirements.md +320 -0
  373. package/lib/skills/builtin/scientific-visualization/references/matplotlib_examples.md +620 -0
  374. package/lib/skills/builtin/scientific-visualization/references/publication_guidelines.md +205 -0
  375. package/lib/skills/builtin/scientific-visualization/scripts/figure_export.py +343 -0
  376. package/lib/skills/builtin/scientific-visualization/scripts/style_presets.py +416 -0
  377. package/lib/skills/builtin/scientific-writing/SKILL.md +745 -0
  378. package/lib/skills/builtin/scientific-writing/assets/REPORT_FORMATTING_GUIDE.md +574 -0
  379. package/lib/skills/builtin/scientific-writing/assets/scientific_report.sty +606 -0
  380. package/lib/skills/builtin/scientific-writing/assets/scientific_report_template.tex +449 -0
  381. package/lib/skills/builtin/scientific-writing/references/citation_styles.md +720 -0
  382. package/lib/skills/builtin/scientific-writing/references/figures_tables.md +806 -0
  383. package/lib/skills/builtin/scientific-writing/references/imrad_structure.md +686 -0
  384. package/lib/skills/builtin/scientific-writing/references/professional_report_formatting.md +664 -0
  385. package/lib/skills/builtin/scientific-writing/references/reporting_guidelines.md +748 -0
  386. package/lib/skills/builtin/scientific-writing/references/writing_principles.md +824 -0
  387. package/lib/skills/builtin/seaborn/SKILL.md +674 -0
  388. package/lib/skills/builtin/seaborn/references/examples.md +822 -0
  389. package/lib/skills/builtin/seaborn/references/function_reference.md +770 -0
  390. package/lib/skills/builtin/seaborn/references/objects_interface.md +964 -0
  391. package/lib/skills/data-analysis/SKILL.md +285 -0
  392. package/lib/skills/generate-skill-content.mjs +58 -0
  393. package/lib/skills/index.ts +34 -0
  394. package/lib/skills/loader.ts +452 -0
  395. package/package.json +62 -0
@@ -0,0 +1,964 @@
1
+ # Seaborn Objects Interface
2
+
3
+ The `seaborn.objects` interface provides a modern, declarative API for building visualizations through composition. This guide covers the complete objects interface introduced in seaborn 0.12+.
4
+
5
+ ## Core Concept
6
+
7
+ The objects interface separates **what you want to show** (data and mappings) from **how to show it** (marks, stats, and moves). Build plots by:
8
+
9
+ 1. Creating a `Plot` object with data and aesthetic mappings
10
+ 2. Adding layers with `.add()` combining marks and statistical transformations
11
+ 3. Customizing with `.scale()`, `.label()`, `.limit()`, `.theme()`, etc.
12
+ 4. Rendering with `.show()` or `.save()`
13
+
14
+ ## Basic Usage
15
+
16
+ ```python
17
+ from seaborn import objects as so
18
+ import pandas as pd
19
+
20
+ # Create plot with data and mappings
21
+ p = so.Plot(data=df, x='x_var', y='y_var')
22
+
23
+ # Add mark (visual representation)
24
+ p = p.add(so.Dot())
25
+
26
+ # Display (automatic in Jupyter)
27
+ p.show()
28
+ ```
29
+
30
+ ## Plot Class
31
+
32
+ The `Plot` class is the foundation of the objects interface.
33
+
34
+ ### Initialization
35
+
36
+ ```python
37
+ so.Plot(data=None, x=None, y=None, color=None, alpha=None,
38
+ fill=None, fillalpha=None, fillcolor=None, marker=None,
39
+ pointsize=None, stroke=None, text=None, **variables)
40
+ ```
41
+
42
+ **Parameters:**
43
+ - `data` - DataFrame or dict of data vectors
44
+ - `x, y` - Variables for position
45
+ - `color` - Variable for color encoding
46
+ - `alpha` - Variable for transparency
47
+ - `marker` - Variable for marker shape
48
+ - `pointsize` - Variable for point size
49
+ - `stroke` - Variable for line width
50
+ - `text` - Variable for text labels
51
+ - `**variables` - Additional mappings using property names
52
+
53
+ **Examples:**
54
+ ```python
55
+ # Basic mapping
56
+ so.Plot(df, x='total_bill', y='tip')
57
+
58
+ # Multiple mappings
59
+ so.Plot(df, x='total_bill', y='tip', color='day', pointsize='size')
60
+
61
+ # All variables in Plot
62
+ p = so.Plot(df, x='x', y='y', color='cat')
63
+ p.add(so.Dot()) # Uses all mappings
64
+
65
+ # Some variables in add()
66
+ p = so.Plot(df, x='x', y='y')
67
+ p.add(so.Dot(), color='cat') # Only this layer uses color
68
+ ```
69
+
70
+ ### Methods
71
+
72
+ #### add()
73
+
74
+ Add a layer to the plot with mark and optional stat/move.
75
+
76
+ ```python
77
+ Plot.add(mark, *transforms, orient=None, legend=True, data=None,
78
+ **variables)
79
+ ```
80
+
81
+ **Parameters:**
82
+ - `mark` - Mark object defining visual representation
83
+ - `*transforms` - Stat and/or Move objects for data transformation
84
+ - `orient` - "x", "y", or "v"/"h" for orientation
85
+ - `legend` - Include in legend (True/False)
86
+ - `data` - Override data for this layer
87
+ - `**variables` - Override or add variable mappings
88
+
89
+ **Examples:**
90
+ ```python
91
+ # Simple mark
92
+ p.add(so.Dot())
93
+
94
+ # Mark with stat
95
+ p.add(so.Line(), so.PolyFit(order=2))
96
+
97
+ # Mark with multiple transforms
98
+ p.add(so.Bar(), so.Agg(), so.Dodge())
99
+
100
+ # Layer-specific mappings
101
+ p.add(so.Dot(), color='category')
102
+ p.add(so.Line(), so.Agg(), color='category')
103
+
104
+ # Layer-specific data
105
+ p.add(so.Dot())
106
+ p.add(so.Line(), data=summary_df)
107
+ ```
108
+
109
+ #### facet()
110
+
111
+ Create subplots from categorical variables.
112
+
113
+ ```python
114
+ Plot.facet(col=None, row=None, order=None, wrap=None)
115
+ ```
116
+
117
+ **Parameters:**
118
+ - `col` - Variable for column facets
119
+ - `row` - Variable for row facets
120
+ - `order` - Dict with facet orders (keys: variable names)
121
+ - `wrap` - Wrap columns after this many
122
+
123
+ **Example:**
124
+ ```python
125
+ p.facet(col='time', row='sex')
126
+ p.facet(col='category', wrap=3)
127
+ p.facet(col='day', order={'day': ['Thur', 'Fri', 'Sat', 'Sun']})
128
+ ```
129
+
130
+ #### pair()
131
+
132
+ Create pairwise subplots for multiple variables.
133
+
134
+ ```python
135
+ Plot.pair(x=None, y=None, wrap=None, cross=True)
136
+ ```
137
+
138
+ **Parameters:**
139
+ - `x` - Variables for x-axis pairings
140
+ - `y` - Variables for y-axis pairings (if None, uses x)
141
+ - `wrap` - Wrap after this many columns
142
+ - `cross` - Include all x/y combinations (vs. only diagonal)
143
+
144
+ **Example:**
145
+ ```python
146
+ # Pairs of all variables
147
+ p = so.Plot(df).pair(x=['a', 'b', 'c'])
148
+ p.add(so.Dot())
149
+
150
+ # Rectangular grid
151
+ p = so.Plot(df).pair(x=['a', 'b'], y=['c', 'd'])
152
+ p.add(so.Dot(), alpha=0.5)
153
+ ```
154
+
155
+ #### scale()
156
+
157
+ Customize how data maps to visual properties.
158
+
159
+ ```python
160
+ Plot.scale(**scales)
161
+ ```
162
+
163
+ **Parameters:** Keyword arguments with property names and Scale objects
164
+
165
+ **Example:**
166
+ ```python
167
+ p.scale(
168
+ x=so.Continuous().tick(every=5),
169
+ y=so.Continuous().label(like='{x:.1f}'),
170
+ color=so.Nominal(['#1f77b4', '#ff7f0e', '#2ca02c']),
171
+ pointsize=(5, 10) # Shorthand for range
172
+ )
173
+ ```
174
+
175
+ #### limit()
176
+
177
+ Set axis limits.
178
+
179
+ ```python
180
+ Plot.limit(x=None, y=None)
181
+ ```
182
+
183
+ **Parameters:**
184
+ - `x` - Tuple of (min, max) for x-axis
185
+ - `y` - Tuple of (min, max) for y-axis
186
+
187
+ **Example:**
188
+ ```python
189
+ p.limit(x=(0, 100), y=(0, 50))
190
+ ```
191
+
192
+ #### label()
193
+
194
+ Set axis labels and titles.
195
+
196
+ ```python
197
+ Plot.label(x=None, y=None, color=None, title=None, **labels)
198
+ ```
199
+
200
+ **Parameters:** Keyword arguments with property names and label strings
201
+
202
+ **Example:**
203
+ ```python
204
+ p.label(
205
+ x='Total Bill ($)',
206
+ y='Tip Amount ($)',
207
+ color='Day of Week',
208
+ title='Restaurant Tips Analysis'
209
+ )
210
+ ```
211
+
212
+ #### theme()
213
+
214
+ Apply matplotlib style settings.
215
+
216
+ ```python
217
+ Plot.theme(config, **kwargs)
218
+ ```
219
+
220
+ **Parameters:**
221
+ - `config` - Dict of rcParams or seaborn theme dict
222
+ - `**kwargs` - Individual rcParams
223
+
224
+ **Example:**
225
+ ```python
226
+ # Seaborn theme
227
+ p.theme({**sns.axes_style('whitegrid'), **sns.plotting_context('talk')})
228
+
229
+ # Custom rcParams
230
+ p.theme({'axes.facecolor': 'white', 'axes.grid': True})
231
+
232
+ # Individual parameters
233
+ p.theme(axes_facecolor='white', font_scale=1.2)
234
+ ```
235
+
236
+ #### layout()
237
+
238
+ Configure subplot layout.
239
+
240
+ ```python
241
+ Plot.layout(size=None, extent=None, engine=None)
242
+ ```
243
+
244
+ **Parameters:**
245
+ - `size` - (width, height) in inches
246
+ - `extent` - (left, bottom, right, top) for subplots
247
+ - `engine` - "tight", "constrained", or None
248
+
249
+ **Example:**
250
+ ```python
251
+ p.layout(size=(10, 6), engine='constrained')
252
+ ```
253
+
254
+ #### share()
255
+
256
+ Control axis sharing across facets.
257
+
258
+ ```python
259
+ Plot.share(x=None, y=None)
260
+ ```
261
+
262
+ **Parameters:**
263
+ - `x` - Share x-axis: True, False, or "col"/"row"
264
+ - `y` - Share y-axis: True, False, or "col"/"row"
265
+
266
+ **Example:**
267
+ ```python
268
+ p.share(x=True, y=False) # Share x across all, independent y
269
+ p.share(x='col') # Share x within columns only
270
+ ```
271
+
272
+ #### on()
273
+
274
+ Plot on existing matplotlib figure or axes.
275
+
276
+ ```python
277
+ Plot.on(target)
278
+ ```
279
+
280
+ **Parameters:**
281
+ - `target` - matplotlib Figure or Axes object
282
+
283
+ **Example:**
284
+ ```python
285
+ import matplotlib.pyplot as plt
286
+
287
+ fig, axes = plt.subplots(2, 2, figsize=(10, 10))
288
+ so.Plot(df, x='x', y='y').add(so.Dot()).on(axes[0, 0])
289
+ so.Plot(df, x='x', y='z').add(so.Line()).on(axes[0, 1])
290
+ ```
291
+
292
+ #### show()
293
+
294
+ Render and display the plot.
295
+
296
+ ```python
297
+ Plot.show(**kwargs)
298
+ ```
299
+
300
+ **Parameters:** Passed to `matplotlib.pyplot.show()`
301
+
302
+ #### save()
303
+
304
+ Save the plot to file.
305
+
306
+ ```python
307
+ Plot.save(filename, **kwargs)
308
+ ```
309
+
310
+ **Parameters:**
311
+ - `filename` - Output filename
312
+ - `**kwargs` - Passed to `matplotlib.figure.Figure.savefig()`
313
+
314
+ **Example:**
315
+ ```python
316
+ p.save('plot.png', dpi=300, bbox_inches='tight')
317
+ p.save('plot.pdf')
318
+ ```
319
+
320
+ ## Mark Objects
321
+
322
+ Marks define how data is visually represented.
323
+
324
+ ### Dot
325
+
326
+ Points/markers for individual observations.
327
+
328
+ ```python
329
+ so.Dot(artist_kws=None, **kwargs)
330
+ ```
331
+
332
+ **Properties:**
333
+ - `color` - Fill color
334
+ - `alpha` - Transparency
335
+ - `fillcolor` - Alternate color property
336
+ - `fillalpha` - Alternate alpha property
337
+ - `edgecolor` - Edge color
338
+ - `edgealpha` - Edge transparency
339
+ - `edgewidth` - Edge line width
340
+ - `marker` - Marker style
341
+ - `pointsize` - Marker size
342
+ - `stroke` - Edge width
343
+
344
+ **Example:**
345
+ ```python
346
+ so.Plot(df, x='x', y='y').add(so.Dot(color='blue', pointsize=10))
347
+ so.Plot(df, x='x', y='y', color='cat').add(so.Dot(alpha=0.5))
348
+ ```
349
+
350
+ ### Line
351
+
352
+ Lines connecting observations.
353
+
354
+ ```python
355
+ so.Line(artist_kws=None, **kwargs)
356
+ ```
357
+
358
+ **Properties:**
359
+ - `color` - Line color
360
+ - `alpha` - Transparency
361
+ - `linewidth` - Line width
362
+ - `linestyle` - Line style ("-", "--", "-.", ":")
363
+ - `marker` - Marker at data points
364
+ - `pointsize` - Marker size
365
+ - `edgecolor` - Marker edge color
366
+ - `edgewidth` - Marker edge width
367
+
368
+ **Example:**
369
+ ```python
370
+ so.Plot(df, x='x', y='y').add(so.Line())
371
+ so.Plot(df, x='x', y='y', color='cat').add(so.Line(linewidth=2))
372
+ ```
373
+
374
+ ### Path
375
+
376
+ Like Line but connects points in data order (not sorted by x).
377
+
378
+ ```python
379
+ so.Path(artist_kws=None, **kwargs)
380
+ ```
381
+
382
+ Properties same as `Line`.
383
+
384
+ **Example:**
385
+ ```python
386
+ # For trajectories, loops, etc.
387
+ so.Plot(trajectory_df, x='x', y='y').add(so.Path())
388
+ ```
389
+
390
+ ### Bar
391
+
392
+ Rectangular bars.
393
+
394
+ ```python
395
+ so.Bar(artist_kws=None, **kwargs)
396
+ ```
397
+
398
+ **Properties:**
399
+ - `color` - Fill color
400
+ - `alpha` - Transparency
401
+ - `edgecolor` - Edge color
402
+ - `edgealpha` - Edge transparency
403
+ - `edgewidth` - Edge line width
404
+ - `width` - Bar width (data units)
405
+
406
+ **Example:**
407
+ ```python
408
+ so.Plot(df, x='category', y='value').add(so.Bar())
409
+ so.Plot(df, x='x', y='y').add(so.Bar(color='#1f77b4', width=0.5))
410
+ ```
411
+
412
+ ### Bars
413
+
414
+ Multiple bars (for aggregated data with error bars).
415
+
416
+ ```python
417
+ so.Bars(artist_kws=None, **kwargs)
418
+ ```
419
+
420
+ Properties same as `Bar`. Used with `Agg()` or `Est()` stats.
421
+
422
+ **Example:**
423
+ ```python
424
+ so.Plot(df, x='category', y='value').add(so.Bars(), so.Agg())
425
+ ```
426
+
427
+ ### Area
428
+
429
+ Filled area between line and baseline.
430
+
431
+ ```python
432
+ so.Area(artist_kws=None, **kwargs)
433
+ ```
434
+
435
+ **Properties:**
436
+ - `color` - Fill color
437
+ - `alpha` - Transparency
438
+ - `edgecolor` - Edge color
439
+ - `edgealpha` - Edge transparency
440
+ - `edgewidth` - Edge line width
441
+ - `baseline` - Baseline value (default: 0)
442
+
443
+ **Example:**
444
+ ```python
445
+ so.Plot(df, x='x', y='y').add(so.Area(alpha=0.3))
446
+ so.Plot(df, x='x', y='y', color='cat').add(so.Area())
447
+ ```
448
+
449
+ ### Band
450
+
451
+ Filled band between two lines (for ranges/intervals).
452
+
453
+ ```python
454
+ so.Band(artist_kws=None, **kwargs)
455
+ ```
456
+
457
+ Properties same as `Area`. Requires `ymin` and `ymax` mappings or used with `Est()` stat.
458
+
459
+ **Example:**
460
+ ```python
461
+ so.Plot(df, x='x', ymin='lower', ymax='upper').add(so.Band())
462
+ so.Plot(df, x='x', y='y').add(so.Band(), so.Est())
463
+ ```
464
+
465
+ ### Range
466
+
467
+ Line with markers at endpoints (for ranges).
468
+
469
+ ```python
470
+ so.Range(artist_kws=None, **kwargs)
471
+ ```
472
+
473
+ **Properties:**
474
+ - `color` - Line and marker color
475
+ - `alpha` - Transparency
476
+ - `linewidth` - Line width
477
+ - `marker` - Marker style at endpoints
478
+ - `pointsize` - Marker size
479
+ - `edgewidth` - Marker edge width
480
+
481
+ **Example:**
482
+ ```python
483
+ so.Plot(df, x='x', y='y').add(so.Range(), so.Est())
484
+ ```
485
+
486
+ ### Dash
487
+
488
+ Short horizontal/vertical lines (for distribution marks).
489
+
490
+ ```python
491
+ so.Dash(artist_kws=None, **kwargs)
492
+ ```
493
+
494
+ **Properties:**
495
+ - `color` - Line color
496
+ - `alpha` - Transparency
497
+ - `linewidth` - Line width
498
+ - `width` - Dash length (data units)
499
+
500
+ **Example:**
501
+ ```python
502
+ so.Plot(df, x='category', y='value').add(so.Dash())
503
+ ```
504
+
505
+ ### Text
506
+
507
+ Text labels at data points.
508
+
509
+ ```python
510
+ so.Text(artist_kws=None, **kwargs)
511
+ ```
512
+
513
+ **Properties:**
514
+ - `color` - Text color
515
+ - `alpha` - Transparency
516
+ - `fontsize` - Font size
517
+ - `halign` - Horizontal alignment: "left", "center", "right"
518
+ - `valign` - Vertical alignment: "bottom", "center", "top"
519
+ - `offset` - (x, y) offset from point
520
+
521
+ Requires `text` mapping.
522
+
523
+ **Example:**
524
+ ```python
525
+ so.Plot(df, x='x', y='y', text='label').add(so.Text())
526
+ so.Plot(df, x='x', y='y', text='value').add(so.Text(fontsize=10, offset=(0, 5)))
527
+ ```
528
+
529
+ ## Stat Objects
530
+
531
+ Stats transform data before rendering. Compose with marks in `.add()`.
532
+
533
+ ### Agg
534
+
535
+ Aggregate observations by group.
536
+
537
+ ```python
538
+ so.Agg(func='mean')
539
+ ```
540
+
541
+ **Parameters:**
542
+ - `func` - Aggregation function: "mean", "median", "sum", "min", "max", "count", or callable
543
+
544
+ **Example:**
545
+ ```python
546
+ so.Plot(df, x='category', y='value').add(so.Bar(), so.Agg('mean'))
547
+ so.Plot(df, x='x', y='y', color='group').add(so.Line(), so.Agg('median'))
548
+ ```
549
+
550
+ ### Est
551
+
552
+ Estimate central tendency with error intervals.
553
+
554
+ ```python
555
+ so.Est(func='mean', errorbar=('ci', 95), n_boot=1000, seed=None)
556
+ ```
557
+
558
+ **Parameters:**
559
+ - `func` - Estimator: "mean", "median", "sum", or callable
560
+ - `errorbar` - Error representation:
561
+ - `("ci", level)` - Confidence interval via bootstrap
562
+ - `("pi", level)` - Percentile interval
563
+ - `("se", scale)` - Standard error scaled by factor
564
+ - `"sd"` - Standard deviation
565
+ - `n_boot` - Bootstrap iterations
566
+ - `seed` - Random seed
567
+
568
+ **Example:**
569
+ ```python
570
+ so.Plot(df, x='category', y='value').add(so.Bar(), so.Est())
571
+ so.Plot(df, x='x', y='y').add(so.Line(), so.Est(errorbar='sd'))
572
+ so.Plot(df, x='x', y='y').add(so.Line(), so.Est(errorbar=('ci', 95)))
573
+ so.Plot(df, x='x', y='y').add(so.Band(), so.Est())
574
+ ```
575
+
576
+ ### Hist
577
+
578
+ Bin observations and count/aggregate.
579
+
580
+ ```python
581
+ so.Hist(stat='count', bins='auto', binwidth=None, binrange=None,
582
+ common_norm=True, common_bins=True, cumulative=False)
583
+ ```
584
+
585
+ **Parameters:**
586
+ - `stat` - "count", "density", "probability", "percent", "frequency"
587
+ - `bins` - Number of bins, bin method, or edges
588
+ - `binwidth` - Width of bins
589
+ - `binrange` - (min, max) range for binning
590
+ - `common_norm` - Normalize across groups together
591
+ - `common_bins` - Use same bins for all groups
592
+ - `cumulative` - Cumulative histogram
593
+
594
+ **Example:**
595
+ ```python
596
+ so.Plot(df, x='value').add(so.Bars(), so.Hist())
597
+ so.Plot(df, x='value').add(so.Bars(), so.Hist(bins=20, stat='density'))
598
+ so.Plot(df, x='value', color='group').add(so.Area(), so.Hist(cumulative=True))
599
+ ```
600
+
601
+ ### KDE
602
+
603
+ Kernel density estimate.
604
+
605
+ ```python
606
+ so.KDE(bw_method='scott', bw_adjust=1, gridsize=200,
607
+ cut=3, cumulative=False)
608
+ ```
609
+
610
+ **Parameters:**
611
+ - `bw_method` - Bandwidth method: "scott", "silverman", or scalar
612
+ - `bw_adjust` - Bandwidth multiplier
613
+ - `gridsize` - Resolution of density curve
614
+ - `cut` - Extension beyond data range (in bandwidth units)
615
+ - `cumulative` - Cumulative density
616
+
617
+ **Example:**
618
+ ```python
619
+ so.Plot(df, x='value').add(so.Line(), so.KDE())
620
+ so.Plot(df, x='value', color='group').add(so.Area(alpha=0.5), so.KDE())
621
+ so.Plot(df, x='x', y='y').add(so.Line(), so.KDE(bw_adjust=0.5))
622
+ ```
623
+
624
+ ### Count
625
+
626
+ Count observations per group.
627
+
628
+ ```python
629
+ so.Count()
630
+ ```
631
+
632
+ **Example:**
633
+ ```python
634
+ so.Plot(df, x='category').add(so.Bar(), so.Count())
635
+ ```
636
+
637
+ ### PolyFit
638
+
639
+ Polynomial regression fit.
640
+
641
+ ```python
642
+ so.PolyFit(order=1)
643
+ ```
644
+
645
+ **Parameters:**
646
+ - `order` - Polynomial order (1 = linear, 2 = quadratic, etc.)
647
+
648
+ **Example:**
649
+ ```python
650
+ so.Plot(df, x='x', y='y').add(so.Dot())
651
+ so.Plot(df, x='x', y='y').add(so.Line(), so.PolyFit(order=2))
652
+ ```
653
+
654
+ ### Perc
655
+
656
+ Compute percentiles.
657
+
658
+ ```python
659
+ so.Perc(k=5, method='linear')
660
+ ```
661
+
662
+ **Parameters:**
663
+ - `k` - Number of percentile intervals
664
+ - `method` - Interpolation method
665
+
666
+ **Example:**
667
+ ```python
668
+ so.Plot(df, x='x', y='y').add(so.Band(), so.Perc())
669
+ ```
670
+
671
+ ## Move Objects
672
+
673
+ Moves adjust positions to resolve overlaps or create specific layouts.
674
+
675
+ ### Dodge
676
+
677
+ Shift positions side-by-side.
678
+
679
+ ```python
680
+ so.Dodge(empty='keep', gap=0)
681
+ ```
682
+
683
+ **Parameters:**
684
+ - `empty` - How to handle empty groups: "keep", "drop", "fill"
685
+ - `gap` - Gap between dodged elements (proportion)
686
+
687
+ **Example:**
688
+ ```python
689
+ so.Plot(df, x='category', y='value', color='group').add(so.Bar(), so.Dodge())
690
+ so.Plot(df, x='cat', y='val', color='hue').add(so.Dot(), so.Dodge(gap=0.1))
691
+ ```
692
+
693
+ ### Stack
694
+
695
+ Stack marks vertically.
696
+
697
+ ```python
698
+ so.Stack()
699
+ ```
700
+
701
+ **Example:**
702
+ ```python
703
+ so.Plot(df, x='x', y='y', color='category').add(so.Bar(), so.Stack())
704
+ so.Plot(df, x='x', y='y', color='group').add(so.Area(), so.Stack())
705
+ ```
706
+
707
+ ### Jitter
708
+
709
+ Add random noise to positions.
710
+
711
+ ```python
712
+ so.Jitter(width=None, height=None, seed=None)
713
+ ```
714
+
715
+ **Parameters:**
716
+ - `width` - Jitter in x direction (data units or proportion)
717
+ - `height` - Jitter in y direction
718
+ - `seed` - Random seed
719
+
720
+ **Example:**
721
+ ```python
722
+ so.Plot(df, x='category', y='value').add(so.Dot(), so.Jitter())
723
+ so.Plot(df, x='cat', y='val').add(so.Dot(), so.Jitter(width=0.2))
724
+ ```
725
+
726
+ ### Shift
727
+
728
+ Shift positions by constant amount.
729
+
730
+ ```python
731
+ so.Shift(x=0, y=0)
732
+ ```
733
+
734
+ **Parameters:**
735
+ - `x` - Shift in x direction (data units)
736
+ - `y` - Shift in y direction
737
+
738
+ **Example:**
739
+ ```python
740
+ so.Plot(df, x='x', y='y').add(so.Dot(), so.Shift(x=1))
741
+ ```
742
+
743
+ ### Norm
744
+
745
+ Normalize values.
746
+
747
+ ```python
748
+ so.Norm(func='max', where=None, by=None, percent=False)
749
+ ```
750
+
751
+ **Parameters:**
752
+ - `func` - Normalization: "max", "sum", "area", or callable
753
+ - `where` - Apply to which axis: "x", "y", or None
754
+ - `by` - Grouping variables for separate normalization
755
+ - `percent` - Show as percentage
756
+
757
+ **Example:**
758
+ ```python
759
+ so.Plot(df, x='x', y='y', color='group').add(so.Area(), so.Norm())
760
+ ```
761
+
762
+ ## Scale Objects
763
+
764
+ Scales control how data values map to visual properties.
765
+
766
+ ### Continuous
767
+
768
+ For numeric data.
769
+
770
+ ```python
771
+ so.Continuous(values=None, norm=None, trans=None)
772
+ ```
773
+
774
+ **Methods:**
775
+ - `.tick(at=None, every=None, between=None, minor=None)` - Configure ticks
776
+ - `.label(like=None, base=None, unit=None)` - Format labels
777
+
778
+ **Parameters:**
779
+ - `values` - Explicit value range (min, max)
780
+ - `norm` - Normalization function
781
+ - `trans` - Transformation: "log", "sqrt", "symlog", "logit", "pow10", or callable
782
+
783
+ **Example:**
784
+ ```python
785
+ p.scale(
786
+ x=so.Continuous().tick(every=10),
787
+ y=so.Continuous(trans='log').tick(at=[1, 10, 100]),
788
+ color=so.Continuous(values=(0, 1)),
789
+ pointsize=(5, 20) # Shorthand for Continuous range
790
+ )
791
+ ```
792
+
793
+ ### Nominal
794
+
795
+ For categorical data.
796
+
797
+ ```python
798
+ so.Nominal(values=None, order=None)
799
+ ```
800
+
801
+ **Parameters:**
802
+ - `values` - Explicit values (e.g., colors, markers)
803
+ - `order` - Category order
804
+
805
+ **Example:**
806
+ ```python
807
+ p.scale(
808
+ color=so.Nominal(['#1f77b4', '#ff7f0e', '#2ca02c']),
809
+ marker=so.Nominal(['o', 's', '^']),
810
+ x=so.Nominal(order=['Low', 'Medium', 'High'])
811
+ )
812
+ ```
813
+
814
+ ### Temporal
815
+
816
+ For datetime data.
817
+
818
+ ```python
819
+ so.Temporal(values=None, trans=None)
820
+ ```
821
+
822
+ **Methods:**
823
+ - `.tick(every=None, between=None)` - Configure ticks
824
+ - `.label(concise=False)` - Format labels
825
+
826
+ **Example:**
827
+ ```python
828
+ p.scale(x=so.Temporal().tick(every=('month', 1)).label(concise=True))
829
+ ```
830
+
831
+ ## Complete Examples
832
+
833
+ ### Layered Plot with Statistics
834
+
835
+ ```python
836
+ (
837
+ so.Plot(df, x='total_bill', y='tip', color='time')
838
+ .add(so.Dot(), alpha=0.5)
839
+ .add(so.Line(), so.PolyFit(order=2))
840
+ .scale(color=so.Nominal(['#1f77b4', '#ff7f0e']))
841
+ .label(x='Total Bill ($)', y='Tip ($)', title='Tips Analysis')
842
+ .theme({**sns.axes_style('whitegrid')})
843
+ )
844
+ ```
845
+
846
+ ### Faceted Distribution
847
+
848
+ ```python
849
+ (
850
+ so.Plot(df, x='measurement', color='treatment')
851
+ .facet(col='timepoint', wrap=3)
852
+ .add(so.Area(alpha=0.5), so.KDE())
853
+ .add(so.Dot(), so.Jitter(width=0.1), y=0)
854
+ .scale(x=so.Continuous().tick(every=5))
855
+ .label(x='Measurement (units)', title='Treatment Effects Over Time')
856
+ .share(x=True, y=False)
857
+ )
858
+ ```
859
+
860
+ ### Grouped Bar Chart
861
+
862
+ ```python
863
+ (
864
+ so.Plot(df, x='category', y='value', color='group')
865
+ .add(so.Bar(), so.Agg('mean'), so.Dodge())
866
+ .add(so.Range(), so.Est(errorbar='se'), so.Dodge())
867
+ .scale(color=so.Nominal(order=['A', 'B', 'C']))
868
+ .label(y='Mean Value', title='Comparison by Category and Group')
869
+ )
870
+ ```
871
+
872
+ ### Complex Multi-Layer
873
+
874
+ ```python
875
+ (
876
+ so.Plot(df, x='date', y='value')
877
+ .add(so.Dot(color='gray', pointsize=3), alpha=0.3)
878
+ .add(so.Line(color='blue', linewidth=2), so.Agg('mean'))
879
+ .add(so.Band(color='blue', alpha=0.2), so.Est(errorbar=('ci', 95)))
880
+ .facet(col='sensor', row='location')
881
+ .scale(
882
+ x=so.Temporal().label(concise=True),
883
+ y=so.Continuous().tick(every=10)
884
+ )
885
+ .label(
886
+ x='Date',
887
+ y='Measurement',
888
+ title='Sensor Measurements by Location'
889
+ )
890
+ .layout(size=(12, 8), engine='constrained')
891
+ )
892
+ ```
893
+
894
+ ## Migration from Function Interface
895
+
896
+ ### Scatter Plot
897
+
898
+ **Function interface:**
899
+ ```python
900
+ sns.scatterplot(data=df, x='x', y='y', hue='category', size='value')
901
+ ```
902
+
903
+ **Objects interface:**
904
+ ```python
905
+ so.Plot(df, x='x', y='y', color='category', pointsize='value').add(so.Dot())
906
+ ```
907
+
908
+ ### Line Plot with CI
909
+
910
+ **Function interface:**
911
+ ```python
912
+ sns.lineplot(data=df, x='time', y='measurement', hue='group', errorbar='ci')
913
+ ```
914
+
915
+ **Objects interface:**
916
+ ```python
917
+ (
918
+ so.Plot(df, x='time', y='measurement', color='group')
919
+ .add(so.Line(), so.Est())
920
+ )
921
+ ```
922
+
923
+ ### Histogram
924
+
925
+ **Function interface:**
926
+ ```python
927
+ sns.histplot(data=df, x='value', hue='category', stat='density', kde=True)
928
+ ```
929
+
930
+ **Objects interface:**
931
+ ```python
932
+ (
933
+ so.Plot(df, x='value', color='category')
934
+ .add(so.Bars(), so.Hist(stat='density'))
935
+ .add(so.Line(), so.KDE())
936
+ )
937
+ ```
938
+
939
+ ### Bar Plot with Error Bars
940
+
941
+ **Function interface:**
942
+ ```python
943
+ sns.barplot(data=df, x='category', y='value', hue='group', errorbar='ci')
944
+ ```
945
+
946
+ **Objects interface:**
947
+ ```python
948
+ (
949
+ so.Plot(df, x='category', y='value', color='group')
950
+ .add(so.Bar(), so.Agg(), so.Dodge())
951
+ .add(so.Range(), so.Est(), so.Dodge())
952
+ )
953
+ ```
954
+
955
+ ## Tips and Best Practices
956
+
957
+ 1. **Method chaining**: Each method returns a new Plot object, enabling fluent chaining
958
+ 2. **Layer composition**: Combine multiple `.add()` calls to overlay different marks
959
+ 3. **Transform order**: In `.add(mark, stat, move)`, stat applies first, then move
960
+ 4. **Variable priority**: Layer-specific mappings override Plot-level mappings
961
+ 5. **Scale shortcuts**: Use tuples for simple ranges: `color=(min, max)` vs full Scale object
962
+ 6. **Jupyter rendering**: Plots render automatically when returned; use `.show()` otherwise
963
+ 7. **Saving**: Use `.save()` rather than `plt.savefig()` for proper handling
964
+ 8. **Matplotlib access**: Use `.on(ax)` to integrate with matplotlib figures