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,822 @@
1
+ # Seaborn Common Use Cases and Examples
2
+
3
+ This document provides practical examples for common data visualization scenarios using seaborn.
4
+
5
+ ## Exploratory Data Analysis
6
+
7
+ ### Quick Dataset Overview
8
+
9
+ ```python
10
+ import seaborn as sns
11
+ import matplotlib.pyplot as plt
12
+ import pandas as pd
13
+
14
+ # Load data
15
+ df = pd.read_csv('data.csv')
16
+
17
+ # Pairwise relationships for all numeric variables
18
+ sns.pairplot(df, hue='target_variable', corner=True, diag_kind='kde')
19
+ plt.suptitle('Dataset Overview', y=1.01)
20
+ plt.savefig('overview.png', dpi=300, bbox_inches='tight')
21
+ ```
22
+
23
+ ### Distribution Exploration
24
+
25
+ ```python
26
+ # Multiple distributions across categories
27
+ g = sns.displot(
28
+ data=df,
29
+ x='measurement',
30
+ hue='condition',
31
+ col='timepoint',
32
+ kind='kde',
33
+ fill=True,
34
+ height=3,
35
+ aspect=1.5,
36
+ col_wrap=3,
37
+ common_norm=False
38
+ )
39
+ g.set_axis_labels('Measurement Value', 'Density')
40
+ g.set_titles('{col_name}')
41
+ ```
42
+
43
+ ### Correlation Analysis
44
+
45
+ ```python
46
+ # Compute correlation matrix
47
+ corr = df.select_dtypes(include='number').corr()
48
+
49
+ # Create mask for upper triangle
50
+ mask = np.triu(np.ones_like(corr, dtype=bool))
51
+
52
+ # Plot heatmap
53
+ fig, ax = plt.subplots(figsize=(10, 8))
54
+ sns.heatmap(
55
+ corr,
56
+ mask=mask,
57
+ annot=True,
58
+ fmt='.2f',
59
+ cmap='coolwarm',
60
+ center=0,
61
+ square=True,
62
+ linewidths=1,
63
+ cbar_kws={'shrink': 0.8}
64
+ )
65
+ plt.title('Correlation Matrix')
66
+ plt.tight_layout()
67
+ ```
68
+
69
+ ## Scientific Publications
70
+
71
+ ### Multi-Panel Figure with Different Plot Types
72
+
73
+ ```python
74
+ # Set publication style
75
+ sns.set_theme(style='ticks', context='paper', font_scale=1.1)
76
+ sns.set_palette('colorblind')
77
+
78
+ # Create figure with custom layout
79
+ fig = plt.figure(figsize=(12, 8))
80
+ gs = fig.add_gridspec(2, 3, hspace=0.3, wspace=0.3)
81
+
82
+ # Panel A: Time series
83
+ ax1 = fig.add_subplot(gs[0, :2])
84
+ sns.lineplot(
85
+ data=timeseries_df,
86
+ x='time',
87
+ y='expression',
88
+ hue='gene',
89
+ style='treatment',
90
+ markers=True,
91
+ dashes=False,
92
+ ax=ax1
93
+ )
94
+ ax1.set_title('A. Gene Expression Over Time', loc='left', fontweight='bold')
95
+ ax1.set_xlabel('Time (hours)')
96
+ ax1.set_ylabel('Expression Level (AU)')
97
+
98
+ # Panel B: Distribution comparison
99
+ ax2 = fig.add_subplot(gs[0, 2])
100
+ sns.violinplot(
101
+ data=expression_df,
102
+ x='treatment',
103
+ y='expression',
104
+ inner='box',
105
+ ax=ax2
106
+ )
107
+ ax2.set_title('B. Expression Distribution', loc='left', fontweight='bold')
108
+ ax2.set_xlabel('Treatment')
109
+ ax2.set_ylabel('')
110
+
111
+ # Panel C: Correlation
112
+ ax3 = fig.add_subplot(gs[1, 0])
113
+ sns.scatterplot(
114
+ data=correlation_df,
115
+ x='gene1',
116
+ y='gene2',
117
+ hue='cell_type',
118
+ alpha=0.6,
119
+ ax=ax3
120
+ )
121
+ sns.regplot(
122
+ data=correlation_df,
123
+ x='gene1',
124
+ y='gene2',
125
+ scatter=False,
126
+ color='black',
127
+ ax=ax3
128
+ )
129
+ ax3.set_title('C. Gene Correlation', loc='left', fontweight='bold')
130
+ ax3.set_xlabel('Gene 1 Expression')
131
+ ax3.set_ylabel('Gene 2 Expression')
132
+
133
+ # Panel D: Heatmap
134
+ ax4 = fig.add_subplot(gs[1, 1:])
135
+ sns.heatmap(
136
+ sample_matrix,
137
+ cmap='RdBu_r',
138
+ center=0,
139
+ annot=True,
140
+ fmt='.1f',
141
+ cbar_kws={'label': 'Log2 Fold Change'},
142
+ ax=ax4
143
+ )
144
+ ax4.set_title('D. Treatment Effects', loc='left', fontweight='bold')
145
+ ax4.set_xlabel('Sample')
146
+ ax4.set_ylabel('Gene')
147
+
148
+ # Clean up
149
+ sns.despine()
150
+ plt.savefig('figure.pdf', dpi=300, bbox_inches='tight')
151
+ plt.savefig('figure.png', dpi=300, bbox_inches='tight')
152
+ ```
153
+
154
+ ### Box Plot with Significance Annotations
155
+
156
+ ```python
157
+ import numpy as np
158
+ from scipy import stats
159
+
160
+ # Create plot
161
+ fig, ax = plt.subplots(figsize=(8, 6))
162
+ sns.boxplot(
163
+ data=df,
164
+ x='treatment',
165
+ y='response',
166
+ order=['Control', 'Low', 'Medium', 'High'],
167
+ palette='Set2',
168
+ ax=ax
169
+ )
170
+
171
+ # Add individual points
172
+ sns.stripplot(
173
+ data=df,
174
+ x='treatment',
175
+ y='response',
176
+ order=['Control', 'Low', 'Medium', 'High'],
177
+ color='black',
178
+ alpha=0.3,
179
+ size=3,
180
+ ax=ax
181
+ )
182
+
183
+ # Add significance bars
184
+ def add_significance_bar(ax, x1, x2, y, h, text):
185
+ ax.plot([x1, x1, x2, x2], [y, y+h, y+h, y], 'k-', lw=1.5)
186
+ ax.text((x1+x2)/2, y+h, text, ha='center', va='bottom')
187
+
188
+ y_max = df['response'].max()
189
+ add_significance_bar(ax, 0, 3, y_max + 1, 0.5, '***')
190
+ add_significance_bar(ax, 0, 1, y_max + 3, 0.5, 'ns')
191
+
192
+ ax.set_ylabel('Response (μM)')
193
+ ax.set_xlabel('Treatment Condition')
194
+ ax.set_title('Treatment Response Analysis')
195
+ sns.despine()
196
+ ```
197
+
198
+ ## Time Series Analysis
199
+
200
+ ### Multiple Time Series with Confidence Bands
201
+
202
+ ```python
203
+ # Plot with automatic aggregation
204
+ fig, ax = plt.subplots(figsize=(10, 6))
205
+ sns.lineplot(
206
+ data=timeseries_df,
207
+ x='timestamp',
208
+ y='value',
209
+ hue='sensor',
210
+ style='location',
211
+ markers=True,
212
+ dashes=False,
213
+ errorbar=('ci', 95),
214
+ ax=ax
215
+ )
216
+
217
+ # Customize
218
+ ax.set_xlabel('Date')
219
+ ax.set_ylabel('Measurement (units)')
220
+ ax.set_title('Sensor Measurements Over Time')
221
+ ax.legend(title='Sensor & Location', bbox_to_anchor=(1.05, 1), loc='upper left')
222
+
223
+ # Format x-axis for dates
224
+ import matplotlib.dates as mdates
225
+ ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
226
+ ax.xaxis.set_major_locator(mdates.DayLocator(interval=7))
227
+ plt.xticks(rotation=45, ha='right')
228
+
229
+ plt.tight_layout()
230
+ ```
231
+
232
+ ### Faceted Time Series
233
+
234
+ ```python
235
+ # Create faceted time series
236
+ g = sns.relplot(
237
+ data=long_timeseries,
238
+ x='date',
239
+ y='measurement',
240
+ hue='device',
241
+ col='location',
242
+ row='metric',
243
+ kind='line',
244
+ height=3,
245
+ aspect=2,
246
+ errorbar='sd',
247
+ facet_kws={'sharex': True, 'sharey': False}
248
+ )
249
+
250
+ # Customize facet titles
251
+ g.set_titles('{row_name} - {col_name}')
252
+ g.set_axis_labels('Date', 'Value')
253
+
254
+ # Rotate x-axis labels
255
+ for ax in g.axes.flat:
256
+ ax.tick_params(axis='x', rotation=45)
257
+
258
+ g.tight_layout()
259
+ ```
260
+
261
+ ## Categorical Comparisons
262
+
263
+ ### Nested Categorical Variables
264
+
265
+ ```python
266
+ # Create figure
267
+ fig, axes = plt.subplots(1, 2, figsize=(14, 6))
268
+
269
+ # Left panel: Grouped bar plot
270
+ sns.barplot(
271
+ data=df,
272
+ x='category',
273
+ y='value',
274
+ hue='subcategory',
275
+ errorbar=('ci', 95),
276
+ capsize=0.1,
277
+ ax=axes[0]
278
+ )
279
+ axes[0].set_title('Mean Values with 95% CI')
280
+ axes[0].set_ylabel('Value (units)')
281
+ axes[0].legend(title='Subcategory')
282
+
283
+ # Right panel: Strip + violin plot
284
+ sns.violinplot(
285
+ data=df,
286
+ x='category',
287
+ y='value',
288
+ hue='subcategory',
289
+ inner=None,
290
+ alpha=0.3,
291
+ ax=axes[1]
292
+ )
293
+ sns.stripplot(
294
+ data=df,
295
+ x='category',
296
+ y='value',
297
+ hue='subcategory',
298
+ dodge=True,
299
+ size=3,
300
+ alpha=0.6,
301
+ ax=axes[1]
302
+ )
303
+ axes[1].set_title('Distribution of Individual Values')
304
+ axes[1].set_ylabel('')
305
+ axes[1].get_legend().remove()
306
+
307
+ plt.tight_layout()
308
+ ```
309
+
310
+ ### Point Plot for Trends
311
+
312
+ ```python
313
+ # Show how values change across categories
314
+ sns.pointplot(
315
+ data=df,
316
+ x='timepoint',
317
+ y='score',
318
+ hue='treatment',
319
+ markers=['o', 's', '^'],
320
+ linestyles=['-', '--', '-.'],
321
+ dodge=0.3,
322
+ capsize=0.1,
323
+ errorbar=('ci', 95)
324
+ )
325
+
326
+ plt.xlabel('Timepoint')
327
+ plt.ylabel('Performance Score')
328
+ plt.title('Treatment Effects Over Time')
329
+ plt.legend(title='Treatment', bbox_to_anchor=(1.05, 1), loc='upper left')
330
+ sns.despine()
331
+ plt.tight_layout()
332
+ ```
333
+
334
+ ## Regression and Relationships
335
+
336
+ ### Linear Regression with Facets
337
+
338
+ ```python
339
+ # Fit separate regressions for each category
340
+ g = sns.lmplot(
341
+ data=df,
342
+ x='predictor',
343
+ y='response',
344
+ hue='treatment',
345
+ col='cell_line',
346
+ height=4,
347
+ aspect=1.2,
348
+ scatter_kws={'alpha': 0.5, 's': 50},
349
+ ci=95,
350
+ palette='Set2'
351
+ )
352
+
353
+ g.set_axis_labels('Predictor Variable', 'Response Variable')
354
+ g.set_titles('{col_name}')
355
+ g.tight_layout()
356
+ ```
357
+
358
+ ### Polynomial Regression
359
+
360
+ ```python
361
+ fig, axes = plt.subplots(1, 3, figsize=(15, 5))
362
+
363
+ for idx, order in enumerate([1, 2, 3]):
364
+ sns.regplot(
365
+ data=df,
366
+ x='x',
367
+ y='y',
368
+ order=order,
369
+ scatter_kws={'alpha': 0.5},
370
+ line_kws={'color': 'red'},
371
+ ci=95,
372
+ ax=axes[idx]
373
+ )
374
+ axes[idx].set_title(f'Order {order} Polynomial Fit')
375
+ axes[idx].set_xlabel('X Variable')
376
+ axes[idx].set_ylabel('Y Variable')
377
+
378
+ plt.tight_layout()
379
+ ```
380
+
381
+ ### Residual Analysis
382
+
383
+ ```python
384
+ fig, axes = plt.subplots(2, 2, figsize=(12, 10))
385
+
386
+ # Main regression
387
+ sns.regplot(data=df, x='x', y='y', ax=axes[0, 0])
388
+ axes[0, 0].set_title('Regression Fit')
389
+
390
+ # Residuals vs fitted
391
+ sns.residplot(data=df, x='x', y='y', lowess=True,
392
+ scatter_kws={'alpha': 0.5},
393
+ line_kws={'color': 'red', 'lw': 2},
394
+ ax=axes[0, 1])
395
+ axes[0, 1].set_title('Residuals vs Fitted')
396
+ axes[0, 1].axhline(0, ls='--', color='gray')
397
+
398
+ # Q-Q plot (using scipy)
399
+ from scipy import stats as sp_stats
400
+ residuals = df['y'] - np.poly1d(np.polyfit(df['x'], df['y'], 1))(df['x'])
401
+ sp_stats.probplot(residuals, dist="norm", plot=axes[1, 0])
402
+ axes[1, 0].set_title('Q-Q Plot')
403
+
404
+ # Histogram of residuals
405
+ sns.histplot(residuals, kde=True, ax=axes[1, 1])
406
+ axes[1, 1].set_title('Residual Distribution')
407
+ axes[1, 1].set_xlabel('Residuals')
408
+
409
+ plt.tight_layout()
410
+ ```
411
+
412
+ ## Bivariate and Joint Distributions
413
+
414
+ ### Joint Plot with Multiple Representations
415
+
416
+ ```python
417
+ # Scatter with marginals
418
+ g = sns.jointplot(
419
+ data=df,
420
+ x='var1',
421
+ y='var2',
422
+ hue='category',
423
+ kind='scatter',
424
+ height=8,
425
+ ratio=4,
426
+ space=0.1,
427
+ joint_kws={'alpha': 0.5, 's': 50},
428
+ marginal_kws={'kde': True, 'bins': 30}
429
+ )
430
+
431
+ # Add reference lines
432
+ g.ax_joint.axline((0, 0), slope=1, color='r', ls='--', alpha=0.5, label='y=x')
433
+ g.ax_joint.legend()
434
+
435
+ g.set_axis_labels('Variable 1', 'Variable 2', fontsize=12)
436
+ ```
437
+
438
+ ### KDE Contour Plot
439
+
440
+ ```python
441
+ fig, ax = plt.subplots(figsize=(8, 8))
442
+
443
+ # Bivariate KDE with filled contours
444
+ sns.kdeplot(
445
+ data=df,
446
+ x='x',
447
+ y='y',
448
+ fill=True,
449
+ levels=10,
450
+ cmap='viridis',
451
+ thresh=0.05,
452
+ ax=ax
453
+ )
454
+
455
+ # Overlay scatter
456
+ sns.scatterplot(
457
+ data=df,
458
+ x='x',
459
+ y='y',
460
+ color='white',
461
+ edgecolor='black',
462
+ s=50,
463
+ alpha=0.6,
464
+ ax=ax
465
+ )
466
+
467
+ ax.set_xlabel('X Variable')
468
+ ax.set_ylabel('Y Variable')
469
+ ax.set_title('Bivariate Distribution')
470
+ ```
471
+
472
+ ### Hexbin with Marginals
473
+
474
+ ```python
475
+ # For large datasets
476
+ g = sns.jointplot(
477
+ data=large_df,
478
+ x='x',
479
+ y='y',
480
+ kind='hex',
481
+ height=8,
482
+ ratio=5,
483
+ space=0.1,
484
+ joint_kws={'gridsize': 30, 'cmap': 'viridis'},
485
+ marginal_kws={'bins': 50, 'color': 'skyblue'}
486
+ )
487
+
488
+ g.set_axis_labels('X Variable', 'Y Variable')
489
+ ```
490
+
491
+ ## Matrix and Heatmap Visualizations
492
+
493
+ ### Hierarchical Clustering Heatmap
494
+
495
+ ```python
496
+ # Prepare data (samples x features)
497
+ data_matrix = df.set_index('sample_id')[feature_columns]
498
+
499
+ # Create color annotations
500
+ row_colors = df.set_index('sample_id')['condition'].map({
501
+ 'control': '#1f77b4',
502
+ 'treatment': '#ff7f0e'
503
+ })
504
+
505
+ col_colors = pd.Series(['#2ca02c' if 'gene' in col else '#d62728'
506
+ for col in data_matrix.columns])
507
+
508
+ # Plot
509
+ g = sns.clustermap(
510
+ data_matrix,
511
+ method='ward',
512
+ metric='euclidean',
513
+ z_score=0, # Normalize rows
514
+ cmap='RdBu_r',
515
+ center=0,
516
+ row_colors=row_colors,
517
+ col_colors=col_colors,
518
+ figsize=(12, 10),
519
+ dendrogram_ratio=(0.1, 0.1),
520
+ cbar_pos=(0.02, 0.8, 0.03, 0.15),
521
+ linewidths=0.5
522
+ )
523
+
524
+ g.ax_heatmap.set_xlabel('Features')
525
+ g.ax_heatmap.set_ylabel('Samples')
526
+ plt.savefig('clustermap.png', dpi=300, bbox_inches='tight')
527
+ ```
528
+
529
+ ### Annotated Heatmap with Custom Colorbar
530
+
531
+ ```python
532
+ # Pivot data for heatmap
533
+ pivot_data = df.pivot(index='row_var', columns='col_var', values='value')
534
+
535
+ # Create heatmap
536
+ fig, ax = plt.subplots(figsize=(10, 8))
537
+ sns.heatmap(
538
+ pivot_data,
539
+ annot=True,
540
+ fmt='.1f',
541
+ cmap='RdYlGn',
542
+ center=pivot_data.mean().mean(),
543
+ vmin=pivot_data.min().min(),
544
+ vmax=pivot_data.max().max(),
545
+ linewidths=0.5,
546
+ linecolor='gray',
547
+ cbar_kws={
548
+ 'label': 'Value (units)',
549
+ 'orientation': 'vertical',
550
+ 'shrink': 0.8,
551
+ 'aspect': 20
552
+ },
553
+ ax=ax
554
+ )
555
+
556
+ ax.set_title('Variable Relationships', fontsize=14, pad=20)
557
+ ax.set_xlabel('Column Variable', fontsize=12)
558
+ ax.set_ylabel('Row Variable', fontsize=12)
559
+
560
+ plt.xticks(rotation=45, ha='right')
561
+ plt.yticks(rotation=0)
562
+ plt.tight_layout()
563
+ ```
564
+
565
+ ## Statistical Comparisons
566
+
567
+ ### Before/After Comparison
568
+
569
+ ```python
570
+ # Reshape data for paired comparison
571
+ df_paired = df.melt(
572
+ id_vars='subject',
573
+ value_vars=['before', 'after'],
574
+ var_name='timepoint',
575
+ value_name='measurement'
576
+ )
577
+
578
+ fig, axes = plt.subplots(1, 2, figsize=(12, 5))
579
+
580
+ # Left: Individual trajectories
581
+ for subject in df_paired['subject'].unique():
582
+ subject_data = df_paired[df_paired['subject'] == subject]
583
+ axes[0].plot(subject_data['timepoint'], subject_data['measurement'],
584
+ 'o-', alpha=0.3, color='gray')
585
+
586
+ sns.pointplot(
587
+ data=df_paired,
588
+ x='timepoint',
589
+ y='measurement',
590
+ color='red',
591
+ markers='D',
592
+ scale=1.5,
593
+ errorbar=('ci', 95),
594
+ capsize=0.2,
595
+ ax=axes[0]
596
+ )
597
+ axes[0].set_title('Individual Changes')
598
+ axes[0].set_ylabel('Measurement')
599
+
600
+ # Right: Distribution comparison
601
+ sns.violinplot(
602
+ data=df_paired,
603
+ x='timepoint',
604
+ y='measurement',
605
+ inner='box',
606
+ ax=axes[1]
607
+ )
608
+ sns.swarmplot(
609
+ data=df_paired,
610
+ x='timepoint',
611
+ y='measurement',
612
+ color='black',
613
+ alpha=0.5,
614
+ size=3,
615
+ ax=axes[1]
616
+ )
617
+ axes[1].set_title('Distribution Comparison')
618
+ axes[1].set_ylabel('')
619
+
620
+ plt.tight_layout()
621
+ ```
622
+
623
+ ### Dose-Response Curve
624
+
625
+ ```python
626
+ # Create dose-response plot
627
+ fig, ax = plt.subplots(figsize=(8, 6))
628
+
629
+ # Plot individual points
630
+ sns.stripplot(
631
+ data=dose_df,
632
+ x='dose',
633
+ y='response',
634
+ order=sorted(dose_df['dose'].unique()),
635
+ color='gray',
636
+ alpha=0.3,
637
+ jitter=0.2,
638
+ ax=ax
639
+ )
640
+
641
+ # Overlay mean with CI
642
+ sns.pointplot(
643
+ data=dose_df,
644
+ x='dose',
645
+ y='response',
646
+ order=sorted(dose_df['dose'].unique()),
647
+ color='blue',
648
+ markers='o',
649
+ scale=1.2,
650
+ errorbar=('ci', 95),
651
+ capsize=0.1,
652
+ ax=ax
653
+ )
654
+
655
+ # Fit sigmoid curve
656
+ from scipy.optimize import curve_fit
657
+
658
+ def sigmoid(x, bottom, top, ec50, hill):
659
+ return bottom + (top - bottom) / (1 + (ec50 / x) ** hill)
660
+
661
+ doses_numeric = dose_df['dose'].astype(float)
662
+ params, _ = curve_fit(sigmoid, doses_numeric, dose_df['response'])
663
+
664
+ x_smooth = np.logspace(np.log10(doses_numeric.min()),
665
+ np.log10(doses_numeric.max()), 100)
666
+ y_smooth = sigmoid(x_smooth, *params)
667
+
668
+ ax.plot(range(len(sorted(dose_df['dose'].unique()))),
669
+ sigmoid(sorted(doses_numeric.unique()), *params),
670
+ 'r-', linewidth=2, label='Sigmoid Fit')
671
+
672
+ ax.set_xlabel('Dose')
673
+ ax.set_ylabel('Response')
674
+ ax.set_title('Dose-Response Analysis')
675
+ ax.legend()
676
+ sns.despine()
677
+ ```
678
+
679
+ ## Custom Styling
680
+
681
+ ### Custom Color Palette from Hex Codes
682
+
683
+ ```python
684
+ # Define custom palette
685
+ custom_palette = ['#E64B35', '#4DBBD5', '#00A087', '#3C5488', '#F39B7F']
686
+ sns.set_palette(custom_palette)
687
+
688
+ # Or use for specific plot
689
+ sns.scatterplot(
690
+ data=df,
691
+ x='x',
692
+ y='y',
693
+ hue='category',
694
+ palette=custom_palette
695
+ )
696
+ ```
697
+
698
+ ### Publication-Ready Theme
699
+
700
+ ```python
701
+ # Set comprehensive theme
702
+ sns.set_theme(
703
+ context='paper',
704
+ style='ticks',
705
+ palette='colorblind',
706
+ font='Arial',
707
+ font_scale=1.1,
708
+ rc={
709
+ 'figure.dpi': 300,
710
+ 'savefig.dpi': 300,
711
+ 'savefig.format': 'pdf',
712
+ 'axes.linewidth': 1.0,
713
+ 'axes.labelweight': 'bold',
714
+ 'xtick.major.width': 1.0,
715
+ 'ytick.major.width': 1.0,
716
+ 'xtick.direction': 'out',
717
+ 'ytick.direction': 'out',
718
+ 'legend.frameon': False,
719
+ 'pdf.fonttype': 42, # True Type fonts for PDFs
720
+ }
721
+ )
722
+ ```
723
+
724
+ ### Diverging Colormap Centered on Zero
725
+
726
+ ```python
727
+ # For data with meaningful zero point (e.g., log fold change)
728
+ from matplotlib.colors import TwoSlopeNorm
729
+
730
+ # Find data range
731
+ vmin, vmax = df['value'].min(), df['value'].max()
732
+ vcenter = 0
733
+
734
+ # Create norm
735
+ norm = TwoSlopeNorm(vmin=vmin, vcenter=vcenter, vmax=vmax)
736
+
737
+ # Plot
738
+ sns.heatmap(
739
+ pivot_data,
740
+ cmap='RdBu_r',
741
+ norm=norm,
742
+ center=0,
743
+ annot=True,
744
+ fmt='.2f'
745
+ )
746
+ ```
747
+
748
+ ## Large Datasets
749
+
750
+ ### Downsampling Strategy
751
+
752
+ ```python
753
+ # For very large datasets, sample intelligently
754
+ def smart_sample(df, target_size=10000, category_col=None):
755
+ if len(df) <= target_size:
756
+ return df
757
+
758
+ if category_col:
759
+ # Stratified sampling
760
+ return df.groupby(category_col, group_keys=False).apply(
761
+ lambda x: x.sample(min(len(x), target_size // df[category_col].nunique()))
762
+ )
763
+ else:
764
+ # Simple random sampling
765
+ return df.sample(target_size)
766
+
767
+ # Use sampled data for visualization
768
+ df_sampled = smart_sample(large_df, target_size=5000, category_col='category')
769
+
770
+ sns.scatterplot(data=df_sampled, x='x', y='y', hue='category', alpha=0.5)
771
+ ```
772
+
773
+ ### Hexbin for Dense Scatter Plots
774
+
775
+ ```python
776
+ # For millions of points
777
+ fig, axes = plt.subplots(1, 2, figsize=(14, 6))
778
+
779
+ # Regular scatter (slow)
780
+ axes[0].scatter(df['x'], df['y'], alpha=0.1, s=1)
781
+ axes[0].set_title('Scatter (all points)')
782
+
783
+ # Hexbin (fast)
784
+ hb = axes[1].hexbin(df['x'], df['y'], gridsize=50, cmap='viridis', mincnt=1)
785
+ axes[1].set_title('Hexbin Aggregation')
786
+ plt.colorbar(hb, ax=axes[1], label='Count')
787
+
788
+ plt.tight_layout()
789
+ ```
790
+
791
+ ## Interactive Elements for Notebooks
792
+
793
+ ### Adjustable Parameters
794
+
795
+ ```python
796
+ from ipywidgets import interact, FloatSlider
797
+
798
+ @interact(bandwidth=FloatSlider(min=0.1, max=3.0, step=0.1, value=1.0))
799
+ def plot_kde(bandwidth):
800
+ plt.figure(figsize=(10, 6))
801
+ sns.kdeplot(data=df, x='value', hue='category',
802
+ bw_adjust=bandwidth, fill=True)
803
+ plt.title(f'KDE with bandwidth adjustment = {bandwidth}')
804
+ plt.show()
805
+ ```
806
+
807
+ ### Dynamic Filtering
808
+
809
+ ```python
810
+ from ipywidgets import interact, SelectMultiple
811
+
812
+ categories = df['category'].unique().tolist()
813
+
814
+ @interact(selected=SelectMultiple(options=categories, value=[categories[0]]))
815
+ def filtered_plot(selected):
816
+ filtered_df = df[df['category'].isin(selected)]
817
+
818
+ fig, ax = plt.subplots(figsize=(10, 6))
819
+ sns.violinplot(data=filtered_df, x='category', y='value', ax=ax)
820
+ ax.set_title(f'Showing {len(selected)} categories')
821
+ plt.show()
822
+ ```