sciris 3.2.8__tar.gz → 3.2.9__tar.gz

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 (470) hide show
  1. sciris-3.2.9/.claude-plugin/marketplace.json +18 -0
  2. {sciris-3.2.8 → sciris-3.2.9}/.github/workflows/schedule_tests.yaml +1 -0
  3. {sciris-3.2.8 → sciris-3.2.9}/.github/workflows/test_downstream.yaml +1 -0
  4. {sciris-3.2.8 → sciris-3.2.9}/.github/workflows/test_sciris.yaml +1 -0
  5. {sciris-3.2.8 → sciris-3.2.9}/CHANGELOG.rst +6 -0
  6. {sciris-3.2.8 → sciris-3.2.9}/CLAUDE.md +32 -0
  7. {sciris-3.2.8/sciris.egg-info → sciris-3.2.9}/PKG-INFO +8 -2
  8. {sciris-3.2.8 → sciris-3.2.9}/README.rst +7 -1
  9. sciris-3.2.9/claude_plugin/.claude-plugin/plugin.json +21 -0
  10. sciris-3.2.9/claude_plugin/README.md +58 -0
  11. sciris-3.2.9/claude_plugin/skills/sciris-advanced/SKILL.md +76 -0
  12. sciris-3.2.9/claude_plugin/skills/sciris-arrays/SKILL.md +72 -0
  13. sciris-3.2.9/claude_plugin/skills/sciris-dates/SKILL.md +77 -0
  14. sciris-3.2.9/claude_plugin/skills/sciris-dicts/SKILL.md +79 -0
  15. sciris-3.2.9/claude_plugin/skills/sciris-files/SKILL.md +64 -0
  16. sciris-3.2.9/claude_plugin/skills/sciris-intro/SKILL.md +67 -0
  17. sciris-3.2.9/claude_plugin/skills/sciris-parallel/SKILL.md +74 -0
  18. sciris-3.2.9/claude_plugin/skills/sciris-plotting/SKILL.md +76 -0
  19. sciris-3.2.9/claude_plugin/skills/sciris-printing/SKILL.md +59 -0
  20. sciris-3.2.9/claude_plugin/skills/sciris-utils/SKILL.md +85 -0
  21. {sciris-3.2.8 → sciris-3.2.9}/docs/overview.rst +7 -0
  22. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_fileio.py +51 -49
  23. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_parallel.py +4 -5
  24. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_version.py +2 -2
  25. {sciris-3.2.8 → sciris-3.2.9/sciris.egg-info}/PKG-INFO +8 -2
  26. {sciris-3.2.8 → sciris-3.2.9}/sciris.egg-info/SOURCES.txt +13 -7
  27. sciris-3.2.8/tests/pylint_report.txt +0 -1057
  28. sciris-3.2.8/tests/test_both_parallelizers.py +0 -27
  29. sciris-3.2.8/tests/test_mp_objdict.py +0 -52
  30. sciris-3.2.8/tests/test_objdict_pickle_detailed.py +0 -61
  31. sciris-3.2.8/tests/test_parallel_mp.py +0 -12
  32. sciris-3.2.8/tests/test_parallel_odict.py +0 -12
  33. sciris-3.2.8/tests/test_pickle_objdict.py +0 -31
  34. {sciris-3.2.8 → sciris-3.2.9}/.github/workflows/pypi_release.yaml +0 -0
  35. {sciris-3.2.8 → sciris-3.2.9}/.gitignore +0 -0
  36. {sciris-3.2.8 → sciris-3.2.9}/.pylintrc +0 -0
  37. {sciris-3.2.8 → sciris-3.2.9}/.readthedocs.yaml +0 -0
  38. {sciris-3.2.8 → sciris-3.2.9}/CODE_OF_CONDUCT.rst +0 -0
  39. {sciris-3.2.8 → sciris-3.2.9}/CONTRIBUTING.rst +0 -0
  40. {sciris-3.2.8 → sciris-3.2.9}/LICENSE +0 -0
  41. {sciris-3.2.8 → sciris-3.2.9}/MANIFEST.in +0 -0
  42. {sciris-3.2.8 → sciris-3.2.9}/STYLE_GUIDE.rst +0 -0
  43. {sciris-3.2.8 → sciris-3.2.9}/context7.json +0 -0
  44. {sciris-3.2.8 → sciris-3.2.9}/docs/.gitignore +0 -0
  45. {sciris-3.2.8 → sciris-3.2.9}/docs/Makefile +0 -0
  46. {sciris-3.2.8 → sciris-3.2.9}/docs/README.md +0 -0
  47. {sciris-3.2.8 → sciris-3.2.9}/docs/_build/html/_static/scripts/bootstrap.js.LICENSE.txt +0 -0
  48. {sciris-3.2.8 → sciris-3.2.9}/docs/_build/html/_static/scripts/fontawesome.js.LICENSE.txt +0 -0
  49. {sciris-3.2.8 → sciris-3.2.9}/docs/_static/theme_overrides.css +0 -0
  50. {sciris-3.2.8 → sciris-3.2.9}/docs/_templates/custom-class-template.rst +0 -0
  51. {sciris-3.2.8 → sciris-3.2.9}/docs/_templates/custom-function-template.rst +0 -0
  52. {sciris-3.2.8 → sciris-3.2.9}/docs/_templates/custom-module-template.rst +0 -0
  53. {sciris-3.2.8 → sciris-3.2.9}/docs/_templates/footer.html +0 -0
  54. {sciris-3.2.8 → sciris-3.2.9}/docs/_templates/page.html +0 -0
  55. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.rst +0 -0
  56. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_asd.asd.rst +0 -0
  57. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_asd.rst +0 -0
  58. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.alpinecolormap.rst +0 -0
  59. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.arraycolors.rst +0 -0
  60. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.bandedcolormap.rst +0 -0
  61. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.bicolormap.rst +0 -0
  62. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.colormapdemo.rst +0 -0
  63. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.gridcolors.rst +0 -0
  64. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.hex2rgb.rst +0 -0
  65. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.hsv2rgb.rst +0 -0
  66. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.manualcolorbar.rst +0 -0
  67. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.midpointnorm.rst +0 -0
  68. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.orangebluecolormap.rst +0 -0
  69. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.parulacolormap.rst +0 -0
  70. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.rgb2hex.rst +0 -0
  71. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.rgb2hsv.rst +0 -0
  72. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.rst +0 -0
  73. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.sanitizecolor.rst +0 -0
  74. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.shifthue.rst +0 -0
  75. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.turbocolormap.rst +0 -0
  76. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_colors.vectocolor.rst +0 -0
  77. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_dataframe.dataframe.rst +0 -0
  78. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_dataframe.rst +0 -0
  79. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.Timer.rst +0 -0
  80. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.date.rst +0 -0
  81. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.datedelta.rst +0 -0
  82. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.daterange.rst +0 -0
  83. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.datetoyear.rst +0 -0
  84. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.day.rst +0 -0
  85. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.daydiff.rst +0 -0
  86. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.elapsedtimestr.rst +0 -0
  87. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.getdate.rst +0 -0
  88. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.now.rst +0 -0
  89. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.randsleep.rst +0 -0
  90. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.readdate.rst +0 -0
  91. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.rst +0 -0
  92. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.tic.rst +0 -0
  93. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.time.rst +0 -0
  94. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.timedsleep.rst +0 -0
  95. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.timer.rst +0 -0
  96. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.toc.rst +0 -0
  97. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.toctic.rst +0 -0
  98. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_datetime.yeartodate.rst +0 -0
  99. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.Blobject.rst +0 -0
  100. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.Failed.rst +0 -0
  101. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.Spreadsheet.rst +0 -0
  102. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.UnpicklingError.rst +0 -0
  103. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.UnpicklingWarning.rst +0 -0
  104. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.dumpstr.rst +0 -0
  105. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.getfilelist.rst +0 -0
  106. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.getfilepaths.rst +0 -0
  107. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.glob.rst +0 -0
  108. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.ispath.rst +0 -0
  109. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.jsonify.rst +0 -0
  110. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.jsonpickle.rst +0 -0
  111. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.jsonunpickle.rst +0 -0
  112. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.load.rst +0 -0
  113. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadany.rst +0 -0
  114. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadjson.rst +0 -0
  115. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadobj.rst +0 -0
  116. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadspreadsheet.rst +0 -0
  117. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadstr.rst +0 -0
  118. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadtext.rst +0 -0
  119. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadyaml.rst +0 -0
  120. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.loadzip.rst +0 -0
  121. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.makefilepath.rst +0 -0
  122. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.makepath.rst +0 -0
  123. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.path.rst +0 -0
  124. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.printjson.rst +0 -0
  125. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.readjson.rst +0 -0
  126. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.readyaml.rst +0 -0
  127. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.rmpath.rst +0 -0
  128. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.rst +0 -0
  129. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.sanitizefilename.rst +0 -0
  130. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.sanitizejson.rst +0 -0
  131. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.sanitizepath.rst +0 -0
  132. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.save.rst +0 -0
  133. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.savejson.rst +0 -0
  134. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.saveobj.rst +0 -0
  135. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.savespreadsheet.rst +0 -0
  136. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.savetext.rst +0 -0
  137. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.saveyaml.rst +0 -0
  138. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.savezip.rst +0 -0
  139. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.thisdir.rst +0 -0
  140. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.thisfile.rst +0 -0
  141. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.thispath.rst +0 -0
  142. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.unzip.rst +0 -0
  143. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_fileio.zsave.rst +0 -0
  144. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.approx.rst +0 -0
  145. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.cat.rst +0 -0
  146. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.convolve.rst +0 -0
  147. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.count.rst +0 -0
  148. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.dataindex.rst +0 -0
  149. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.fillnans.rst +0 -0
  150. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.findfirst.rst +0 -0
  151. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.findinds.rst +0 -0
  152. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.findlast.rst +0 -0
  153. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.findnans.rst +0 -0
  154. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.findnearest.rst +0 -0
  155. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.gauss1d.rst +0 -0
  156. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.gauss2d.rst +0 -0
  157. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.getvaliddata.rst +0 -0
  158. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.getvalidinds.rst +0 -0
  159. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.inclusiverange.rst +0 -0
  160. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.isprime.rst +0 -0
  161. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.linregress.rst +0 -0
  162. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.nanequal.rst +0 -0
  163. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.normalize.rst +0 -0
  164. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.normsum.rst +0 -0
  165. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.numdigits.rst +0 -0
  166. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.perturb.rst +0 -0
  167. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.randround.rst +0 -0
  168. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.rmnans.rst +0 -0
  169. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.rolling.rst +0 -0
  170. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.rst +0 -0
  171. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.safedivide.rst +0 -0
  172. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.sanitize.rst +0 -0
  173. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.sem.rst +0 -0
  174. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.similarity.rst +0 -0
  175. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.smooth.rst +0 -0
  176. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_math.smoothinterp.rst +0 -0
  177. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.Equal.rst +0 -0
  178. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.IterObj.rst +0 -0
  179. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.equal.rst +0 -0
  180. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.flattendict.rst +0 -0
  181. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.getnested.rst +0 -0
  182. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.iternested.rst +0 -0
  183. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.iterobj.rst +0 -0
  184. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.makenested.rst +0 -0
  185. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.mergenested.rst +0 -0
  186. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.nestedloop.rst +0 -0
  187. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.rst +0 -0
  188. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.search.rst +0 -0
  189. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_nested.setnested.rst +0 -0
  190. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.argparse.rst +0 -0
  191. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.asobj.rst +0 -0
  192. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.counter.rst +0 -0
  193. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.ddict.rst +0 -0
  194. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.dictobj.rst +0 -0
  195. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.objdict.rst +0 -0
  196. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.odict.rst +0 -0
  197. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_odict.rst +0 -0
  198. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_parallel.Parallel.rst +0 -0
  199. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_parallel.cpu_count.rst +0 -0
  200. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_parallel.cpuload.rst +0 -0
  201. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_parallel.loadbalancer.rst +0 -0
  202. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_parallel.memload.rst +0 -0
  203. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_parallel.parallelize.rst +0 -0
  204. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_parallel.rst +0 -0
  205. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.SIticks.rst +0 -0
  206. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.ScirisDateFormatter.rst +0 -0
  207. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.animation.rst +0 -0
  208. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.ax3d.rst +0 -0
  209. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.bar3d.rst +0 -0
  210. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.boxoff.rst +0 -0
  211. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.commaticks.rst +0 -0
  212. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.dateformatter.rst +0 -0
  213. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.datenumformatter.rst +0 -0
  214. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.emptyfig.rst +0 -0
  215. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.fig3d.rst +0 -0
  216. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.figlayout.rst +0 -0
  217. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.fonts.rst +0 -0
  218. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.get_rows_cols.rst +0 -0
  219. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.getrowscols.rst +0 -0
  220. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.loadfig.rst +0 -0
  221. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.maximize.rst +0 -0
  222. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.movelegend.rst +0 -0
  223. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.orderlegend.rst +0 -0
  224. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.plot3d.rst +0 -0
  225. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.rst +0 -0
  226. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.savefig.rst +0 -0
  227. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.savefigs.rst +0 -0
  228. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.savemovie.rst +0 -0
  229. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.scatter3d.rst +0 -0
  230. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.separatelegend.rst +0 -0
  231. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.setaxislim.rst +0 -0
  232. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.setxlim.rst +0 -0
  233. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.setylim.rst +0 -0
  234. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.stackedbar.rst +0 -0
  235. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_plotting.surf3d.rst +0 -0
  236. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.arraymean.rst +0 -0
  237. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.arraymedian.rst +0 -0
  238. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.blank.rst +0 -0
  239. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.capture.rst +0 -0
  240. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.classatt.rst +0 -0
  241. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.colorize.rst +0 -0
  242. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.createcollist.rst +0 -0
  243. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.heading.rst +0 -0
  244. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.humanize_bytes.rst +0 -0
  245. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.indent.rst +0 -0
  246. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.objatt.rst +0 -0
  247. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.objectid.rst +0 -0
  248. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.objmeth.rst +0 -0
  249. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.objprop.rst +0 -0
  250. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.objrepr.rst +0 -0
  251. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.percentcomplete.rst +0 -0
  252. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.pr.rst +0 -0
  253. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.prepr.rst +0 -0
  254. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.prettyobj.rst +0 -0
  255. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printarr.rst +0 -0
  256. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printblue.rst +0 -0
  257. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printcyan.rst +0 -0
  258. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printdata.rst +0 -0
  259. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printgreen.rst +0 -0
  260. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printmagenta.rst +0 -0
  261. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printmean.rst +0 -0
  262. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printmedian.rst +0 -0
  263. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printred.rst +0 -0
  264. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printtologfile.rst +0 -0
  265. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printv.rst +0 -0
  266. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printvars.rst +0 -0
  267. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.printyellow.rst +0 -0
  268. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.progressbar.rst +0 -0
  269. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.progressbars.rst +0 -0
  270. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.quickobj.rst +0 -0
  271. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.rst +0 -0
  272. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.sigfig.rst +0 -0
  273. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.sigfiground.rst +0 -0
  274. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.sigfigs.rst +0 -0
  275. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_printing.slacknotification.rst +0 -0
  276. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.LimitExceeded.rst +0 -0
  277. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.benchmark.rst +0 -0
  278. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.checkmem.rst +0 -0
  279. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.checkram.rst +0 -0
  280. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.cprofile.rst +0 -0
  281. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.listfuncs.rst +0 -0
  282. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.mprofile.rst +0 -0
  283. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.profile.rst +0 -0
  284. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.resourcemonitor.rst +0 -0
  285. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.rst +0 -0
  286. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_profiling.tracecalls.rst +0 -0
  287. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_settings.ScirisOptions.rst +0 -0
  288. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_settings.help.rst +0 -0
  289. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_settings.parse_env.rst +0 -0
  290. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_settings.rst +0 -0
  291. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.KeyNotFoundError.rst +0 -0
  292. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.LazyModule.rst +0 -0
  293. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.Link.rst +0 -0
  294. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.LinkException.rst +0 -0
  295. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.asciify.rst +0 -0
  296. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.autolist.rst +0 -0
  297. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.checktype.rst +0 -0
  298. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.cp.rst +0 -0
  299. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.dcp.rst +0 -0
  300. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.download.rst +0 -0
  301. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.fast_uuid.rst +0 -0
  302. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.flexstr.rst +0 -0
  303. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.getplatform.rst +0 -0
  304. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.getuser.rst +0 -0
  305. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.htmlify.rst +0 -0
  306. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.ifelse.rst +0 -0
  307. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.importbyname.rst +0 -0
  308. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.importbypath.rst +0 -0
  309. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.isarray.rst +0 -0
  310. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.isfunc.rst +0 -0
  311. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.isiterable.rst +0 -0
  312. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.isjupyter.rst +0 -0
  313. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.islinux.rst +0 -0
  314. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.ismac.rst +0 -0
  315. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.ismodule.rst +0 -0
  316. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.isnumber.rst +0 -0
  317. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.isstring.rst +0 -0
  318. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.iswindows.rst +0 -0
  319. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.mergedicts.rst +0 -0
  320. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.mergelists.rst +0 -0
  321. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.newlinejoin.rst +0 -0
  322. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.pp.rst +0 -0
  323. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.promotetoarray.rst +0 -0
  324. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.promotetolist.rst +0 -0
  325. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.robust_dcp.rst +0 -0
  326. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.rst +0 -0
  327. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.runcommand.rst +0 -0
  328. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.sanitizestr.rst +0 -0
  329. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.sha.rst +0 -0
  330. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.strjoin.rst +0 -0
  331. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.strsplit.rst +0 -0
  332. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.suggest.rst +0 -0
  333. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.swapdict.rst +0 -0
  334. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.toarray.rst +0 -0
  335. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.tolist.rst +0 -0
  336. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.traceback.rst +0 -0
  337. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.transposelist.rst +0 -0
  338. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.tryexcept.rst +0 -0
  339. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.uniquename.rst +0 -0
  340. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.urlopen.rst +0 -0
  341. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.uuid.rst +0 -0
  342. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_utils.wget.rst +0 -0
  343. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_version.rst +0 -0
  344. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.compareversions.rst +0 -0
  345. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.freeze.rst +0 -0
  346. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.getcaller.rst +0 -0
  347. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.gitinfo.rst +0 -0
  348. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.loadarchive.rst +0 -0
  349. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.loadmetadata.rst +0 -0
  350. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.metadata.rst +0 -0
  351. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.require.rst +0 -0
  352. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.rst +0 -0
  353. {sciris-3.2.8 → sciris-3.2.9}/docs/api/_autosummary/sciris.sc_versioning.savearchive.rst +0 -0
  354. {sciris-3.2.8 → sciris-3.2.9}/docs/api/all.rst +0 -0
  355. {sciris-3.2.8 → sciris-3.2.9}/docs/api/containers.rst +0 -0
  356. {sciris-3.2.8 → sciris-3.2.9}/docs/api/files.rst +0 -0
  357. {sciris-3.2.8 → sciris-3.2.9}/docs/api/index.rst +0 -0
  358. {sciris-3.2.8 → sciris-3.2.9}/docs/api/math.rst +0 -0
  359. {sciris-3.2.8 → sciris-3.2.9}/docs/api/parallel.rst +0 -0
  360. {sciris-3.2.8 → sciris-3.2.9}/docs/api/printing.rst +0 -0
  361. {sciris-3.2.8 → sciris-3.2.9}/docs/api/utils.rst +0 -0
  362. {sciris-3.2.8 → sciris-3.2.9}/docs/build_docs +0 -0
  363. {sciris-3.2.8 → sciris-3.2.9}/docs/conf.py +0 -0
  364. {sciris-3.2.8 → sciris-3.2.9}/docs/contributing.rst +0 -0
  365. {sciris-3.2.8 → sciris-3.2.9}/docs/favicon.ico +0 -0
  366. {sciris-3.2.8 → sciris-3.2.9}/docs/freeze_env +0 -0
  367. {sciris-3.2.8 → sciris-3.2.9}/docs/index.rst +0 -0
  368. {sciris-3.2.8 → sciris-3.2.9}/docs/requirements.txt +0 -0
  369. {sciris-3.2.8 → sciris-3.2.9}/docs/sciris-citation.bib +0 -0
  370. {sciris-3.2.8 → sciris-3.2.9}/docs/sciris-logo-grey-small.png +0 -0
  371. {sciris-3.2.8 → sciris-3.2.9}/docs/sciris-logo-grey.png +0 -0
  372. {sciris-3.2.8 → sciris-3.2.9}/docs/sciris-logo-white-small.png +0 -0
  373. {sciris-3.2.8 → sciris-3.2.9}/docs/sciris-logo.png +0 -0
  374. {sciris-3.2.8 → sciris-3.2.9}/docs/sciris-showcase-code.png +0 -0
  375. {sciris-3.2.8 → sciris-3.2.9}/docs/sciris-showcase-output.png +0 -0
  376. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/README.md +0 -0
  377. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/clean_outputs +0 -0
  378. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/dancing_lines.gif +0 -0
  379. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-advanced.gif +0 -0
  380. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-arrays.png +0 -0
  381. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-dates.png +0 -0
  382. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-dicts.png +0 -0
  383. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-files.png +0 -0
  384. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-intro.png +0 -0
  385. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-parallel.png +0 -0
  386. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-plotting.png +0 -0
  387. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-printing.png +0 -0
  388. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/img-utils.png +0 -0
  389. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/index.rst +0 -0
  390. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/run_tutorials +0 -0
  391. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/sim1/sim.py +0 -0
  392. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/sim2/sim.py +0 -0
  393. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_advanced.ipynb +0 -0
  394. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_arrays.ipynb +0 -0
  395. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_dates.ipynb +0 -0
  396. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_dicts.ipynb +0 -0
  397. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_files.ipynb +0 -0
  398. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_intro.ipynb +0 -0
  399. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_parallel.ipynb +0 -0
  400. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_plotting.ipynb +0 -0
  401. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_printing.ipynb +0 -0
  402. {sciris-3.2.8 → sciris-3.2.9}/docs/tutorials/tut_utils.ipynb +0 -0
  403. {sciris-3.2.8 → sciris-3.2.9}/docs/whatsnew.rst +0 -0
  404. {sciris-3.2.8 → sciris-3.2.9}/pyproject.toml +0 -0
  405. {sciris-3.2.8 → sciris-3.2.9}/sciris/README.md +0 -0
  406. {sciris-3.2.8 → sciris-3.2.9}/sciris/__init__.py +0 -0
  407. {sciris-3.2.8 → sciris-3.2.9}/sciris/_extras/README.md +0 -0
  408. {sciris-3.2.8 → sciris-3.2.9}/sciris/_extras/__init__.py +0 -0
  409. {sciris-3.2.8 → sciris-3.2.9}/sciris/_extras/ansicolors.py +0 -0
  410. {sciris-3.2.8 → sciris-3.2.9}/sciris/_extras/legacy.py +0 -0
  411. {sciris-3.2.8 → sciris-3.2.9}/sciris/fancy.mplstyle +0 -0
  412. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_asd.py +0 -0
  413. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_colors.py +0 -0
  414. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_dataframe.py +0 -0
  415. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_datetime.py +0 -0
  416. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_math.py +0 -0
  417. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_nested.py +0 -0
  418. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_odict.py +0 -0
  419. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_plotting.py +0 -0
  420. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_printing.py +0 -0
  421. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_profiling.py +0 -0
  422. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_settings.py +0 -0
  423. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_utils.py +0 -0
  424. {sciris-3.2.8 → sciris-3.2.9}/sciris/sc_versioning.py +0 -0
  425. {sciris-3.2.8 → sciris-3.2.9}/sciris/simple.mplstyle +0 -0
  426. {sciris-3.2.8 → sciris-3.2.9}/sciris.egg-info/dependency_links.txt +0 -0
  427. {sciris-3.2.8 → sciris-3.2.9}/sciris.egg-info/requires.txt +0 -0
  428. {sciris-3.2.8 → sciris-3.2.9}/sciris.egg-info/top_level.txt +0 -0
  429. {sciris-3.2.8 → sciris-3.2.9}/setup.cfg +0 -0
  430. {sciris-3.2.8 → sciris-3.2.9}/tests/.coveragerc +0 -0
  431. {sciris-3.2.8 → sciris-3.2.9}/tests/README.rst +0 -0
  432. {sciris-3.2.8 → sciris-3.2.9}/tests/check_coverage +0 -0
  433. {sciris-3.2.8 → sciris-3.2.9}/tests/check_style +0 -0
  434. {sciris-3.2.8 → sciris-3.2.9}/tests/files/archive_2023-04-19.zip +0 -0
  435. {sciris-3.2.8 → sciris-3.2.9}/tests/files/deadclass.obj +0 -0
  436. {sciris-3.2.8 → sciris-3.2.9}/tests/files/deadclass.py +0 -0
  437. {sciris-3.2.8 → sciris-3.2.9}/tests/files/exampledata.xlsx +0 -0
  438. {sciris-3.2.8 → sciris-3.2.9}/tests/files/examplefont.ttf +0 -0
  439. {sciris-3.2.8 → sciris-3.2.9}/tests/files/make_archive.py +0 -0
  440. {sciris-3.2.8 → sciris-3.2.9}/tests/files/make_deadclass.py +0 -0
  441. {sciris-3.2.8 → sciris-3.2.9}/tests/files/pickle_2021-01-01.obj +0 -0
  442. {sciris-3.2.8 → sciris-3.2.9}/tests/files/pickle_2022-01-01.obj +0 -0
  443. {sciris-3.2.8 → sciris-3.2.9}/tests/pytest.ini +0 -0
  444. {sciris-3.2.8 → sciris-3.2.9}/tests/regression/README.rst +0 -0
  445. {sciris-3.2.8 → sciris-3.2.9}/tests/regression/run_downstream +0 -0
  446. {sciris-3.2.8 → sciris-3.2.9}/tests/regression/run_regression +0 -0
  447. {sciris-3.2.8 → sciris-3.2.9}/tests/regression/sciris2021-01-01.yml +0 -0
  448. {sciris-3.2.8 → sciris-3.2.9}/tests/regression/sciris2022-01-01.yml +0 -0
  449. {sciris-3.2.8 → sciris-3.2.9}/tests/regression/sciris2023-01-01.yml +0 -0
  450. {sciris-3.2.8 → sciris-3.2.9}/tests/regression/setup_envs +0 -0
  451. {sciris-3.2.8 → sciris-3.2.9}/tests/requirements.txt +0 -0
  452. {sciris-3.2.8 → sciris-3.2.9}/tests/run_tests +0 -0
  453. {sciris-3.2.8 → sciris-3.2.9}/tests/sc_test_utils.py +0 -0
  454. {sciris-3.2.8 → sciris-3.2.9}/tests/showcase_sciris.py +0 -0
  455. {sciris-3.2.8 → sciris-3.2.9}/tests/showcase_vanilla.py +0 -0
  456. {sciris-3.2.8 → sciris-3.2.9}/tests/test_asd.py +0 -0
  457. {sciris-3.2.8 → sciris-3.2.9}/tests/test_colors.py +0 -0
  458. {sciris-3.2.8 → sciris-3.2.9}/tests/test_dataframe.py +0 -0
  459. {sciris-3.2.8 → sciris-3.2.9}/tests/test_datetime.py +0 -0
  460. {sciris-3.2.8 → sciris-3.2.9}/tests/test_fileio.py +0 -0
  461. {sciris-3.2.8 → sciris-3.2.9}/tests/test_math.py +0 -0
  462. {sciris-3.2.8 → sciris-3.2.9}/tests/test_nested.py +0 -0
  463. {sciris-3.2.8 → sciris-3.2.9}/tests/test_odict.py +0 -0
  464. {sciris-3.2.8 → sciris-3.2.9}/tests/test_parallel.py +0 -0
  465. {sciris-3.2.8 → sciris-3.2.9}/tests/test_plotting.py +0 -0
  466. {sciris-3.2.8 → sciris-3.2.9}/tests/test_printing.py +0 -0
  467. {sciris-3.2.8 → sciris-3.2.9}/tests/test_profiling.py +0 -0
  468. {sciris-3.2.8 → sciris-3.2.9}/tests/test_settings.py +0 -0
  469. {sciris-3.2.8 → sciris-3.2.9}/tests/test_utils.py +0 -0
  470. {sciris-3.2.8 → sciris-3.2.9}/tests/test_versioning.py +0 -0
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "sciris-marketplace",
3
+ "owner": {
4
+ "name": "Sciris"
5
+ },
6
+ "metadata": {
7
+ "description": "Sciris skills for Claude Code"
8
+ },
9
+ "plugins": [
10
+ {
11
+ "name": "sciris",
12
+ "source": "./claude_plugin",
13
+ "description": "Skills covering all Sciris features: arrays, dicts, files, plotting, parallelization, dates, printing, utilities, and advanced features",
14
+ "version": "0.1.0",
15
+ "keywords": ["sciris", "scientific-python"]
16
+ }
17
+ ]
18
+ }
@@ -1,5 +1,6 @@
1
1
  name: Sciris cron tests
2
2
  on:
3
+ workflow_call:
3
4
  workflow_dispatch:
4
5
  schedule:
5
6
  - cron: "0 0 * * *" # Run every day at midnight
@@ -1,6 +1,7 @@
1
1
  name: Sciris downstream tests
2
2
  on:
3
3
  workflow_dispatch:
4
+ workflow_call:
4
5
  push:
5
6
  branches:
6
7
  - main
@@ -1,6 +1,7 @@
1
1
  name: Sciris CI tests
2
2
  on:
3
3
  workflow_dispatch:
4
+ workflow_call:
4
5
  pull_request:
5
6
 
6
7
  jobs:
@@ -7,6 +7,12 @@ All major updates to Sciris are documented here.
7
7
 
8
8
  By import convention, components of the Sciris library are listed beginning with ``sc.``, e.g. ``sc.odict()``.
9
9
 
10
+ Version 3.2.9 (2026-03-06)
11
+ --------------------------
12
+ #. Allowed ``verbose=0`` in :func:`sc.loadbalancer() <sc_parallel.loadbalancer>`.
13
+ #. Allowed :func:`sc.makefilepath() <sc_fileio.makefilepath>` to create folders when no filename is specified.
14
+ #. Added a Claude Code plugin: install by adding https://github.com/sciris/sciris as a marketplace.
15
+
10
16
  Version 3.2.8 (2026-02-28)
11
17
  --------------------------
12
18
  #. Changed resolution order in :class:`sc.objdict() <sc_odict.objdict>` so that dunder attributes (e.g. ``__await__``) are never accidentally set as dict keys. Attempting to set an existing attribute as a key now raises ``KeyError`` instead of ``ValueError``.
@@ -66,6 +66,38 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
66
66
  - **Downstream tests:** `.github/workflows/test_downstream.yaml` (tests dependent packages)
67
67
  - **Release workflow:** `.github/workflows/pypi_release.yaml` (automated PyPI publishing)
68
68
 
69
+ ## Claude Code Plugin
70
+
71
+ Sciris includes a Claude Code skills plugin in `claude_plugin/` that provides domain-specific skills for working with Sciris. The plugin is registered via `.claude-plugin/marketplace.json`.
72
+
73
+ ### Installation
74
+ Users can install the plugin by adding `https://github.com/sciris/sciris` as a Claude Code marketplace (see `/install-plugin`).
75
+
76
+ ### Available Skills
77
+ The plugin provides 10 skills covering all major Sciris domains:
78
+ - **sciris-intro** - Basic Sciris features and quick reference
79
+ - **sciris-arrays** - Array operations (`sc.findinds()`, `sc.findnearest()`, `sc.toarray()`, etc.)
80
+ - **sciris-dicts** - Containers (`sc.odict()`, `sc.objdict()`, `sc.counter()`, etc.)
81
+ - **sciris-files** - File I/O (`sc.save()`, `sc.load()`, `sc.savejson()`, etc.)
82
+ - **sciris-plotting** - Matplotlib extensions (`sc.boxoff()`, `sc.dateformatter()`, etc.)
83
+ - **sciris-parallel** - Parallelization (`sc.parallelize()`, `sc.loadbalancer()`)
84
+ - **sciris-dates** - Date/time handling (`sc.date()`, `sc.daterange()`, `sc.timer()`)
85
+ - **sciris-printing** - Printing and formatting (`sc.heading()`, `sc.sigfig()`, `sc.progressbar()`)
86
+ - **sciris-utils** - Utilities (`sc.mergedicts()`, `sc.tryexcept()`, `sc.checkmem()`, etc.)
87
+ - **sciris-advanced** - Advanced features (`sc.odict` subclassing, nested operations, versioning)
88
+
89
+ ### MCP Servers
90
+ The plugin also configures Context7 and GitMCP servers for accessing up-to-date Sciris documentation.
91
+
92
+ ### Plugin Structure
93
+ ```
94
+ claude_plugin/
95
+ .claude-plugin/plugin.json # Plugin manifest
96
+ skills/ # Skill definitions (one SKILL.md per skill)
97
+ .claude-plugin/
98
+ marketplace.json # Marketplace registration
99
+ ```
100
+
69
101
  ## Architecture Overview
70
102
 
71
103
  Sciris is a scientific Python utilities library with a modular design organized around functional domains. Published in the Journal of Open Source Software (JOSS), Sciris aims to streamline the development of scientific software by making it easier to perform common tasks through "simplifying interfaces" that reduce boilerplate code and focus on scientific clarity.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sciris
3
- Version: 3.2.8
3
+ Version: 3.2.9
4
4
  Summary: Fast, flexible tools to simplify scientific Python
5
5
  Author-email: Sciris Development Team <info@sciris.org>
6
6
  License-Expression: MIT
@@ -79,7 +79,13 @@ Using conda: ``conda install -c conda-forge sciris``
79
79
 
80
80
  Using uv: ``uv add sciris``
81
81
 
82
- *Requires Python >= 3.7*.
82
+ *Requires Python >= 3.9*.
83
+
84
+
85
+ AI integration
86
+ --------------
87
+
88
+ Sciris has MCP servers on `Context 7 <https://context7.com/sciris/sciris>`_ and `GitMCP <https://gitmcp.io/sciris/sciris>`_. It also has a Claude Code plugin: to install, add this repository (https://github.com/sciris/sciris) to the Claude Code marketplace and from there install the plugin.
83
89
 
84
90
 
85
91
  Tests
@@ -33,7 +33,13 @@ Using conda: ``conda install -c conda-forge sciris``
33
33
 
34
34
  Using uv: ``uv add sciris``
35
35
 
36
- *Requires Python >= 3.7*.
36
+ *Requires Python >= 3.9*.
37
+
38
+
39
+ AI integration
40
+ --------------
41
+
42
+ Sciris has MCP servers on `Context 7 <https://context7.com/sciris/sciris>`_ and `GitMCP <https://gitmcp.io/sciris/sciris>`_. It also has a Claude Code plugin: to install, add this repository (https://github.com/sciris/sciris) to the Claude Code marketplace and from there install the plugin.
37
43
 
38
44
 
39
45
  Tests
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "sciris",
3
+ "version": "0.1.0",
4
+ "description": "Claude skills for Sciris features covering arrays, containers, file I/O, plotting, parallelization, dates, printing, utilities, and advanced features",
5
+ "author": {
6
+ "name": "Sciris"
7
+ },
8
+ "repository": "https://github.com/sciris/sciris",
9
+ "license": "MIT",
10
+ "keywords": ["sciris", "scientific-python"],
11
+ "mcpServers": {
12
+ "context7": {
13
+ "type": "http",
14
+ "url": "https://mcp.context7.com/mcp"
15
+ },
16
+ "gitmcp": {
17
+ "type": "http",
18
+ "url": "https://gitmcp.io/sciris/sciris"
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,58 @@
1
+ # Sciris Claude Code Plugin
2
+
3
+ This folder contains a [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skills plugin that helps Claude work more effectively with [Sciris](https://sciris.org).
4
+
5
+ ## What it does
6
+
7
+ The plugin provides Claude with domain-specific knowledge about Sciris features, organized into focused skills. When you ask Claude to help with Sciris code, these skills give it detailed guidance on the right functions, patterns, and idioms to use.
8
+
9
+ The plugin also configures MCP servers ([Context7](https://context7.com) and [GitMCP](https://gitmcp.io)) so Claude can look up current Sciris documentation on the fly.
10
+
11
+ ## Installation
12
+
13
+ In Claude Code, add the Sciris repository as a marketplace:
14
+
15
+ ```
16
+ /install-plugin https://github.com/sciris/sciris
17
+ ```
18
+
19
+ Or manually add `https://github.com/sciris/sciris` as a marketplace in your Claude Code settings.
20
+
21
+ ## Available skills
22
+
23
+ | Skill | Description |
24
+ |-------|-------------|
25
+ | **sciris-intro** | Basic Sciris features and quick reference |
26
+ | **sciris-arrays** | Array operations (`sc.findinds`, `sc.findnearest`, `sc.toarray`, etc.) |
27
+ | **sciris-dicts** | Containers (`sc.odict`, `sc.objdict`, `sc.counter`, etc.) |
28
+ | **sciris-files** | File I/O (`sc.save`, `sc.load`, `sc.savejson`, etc.) |
29
+ | **sciris-plotting** | Matplotlib extensions (`sc.boxoff`, `sc.dateformatter`, etc.) |
30
+ | **sciris-parallel** | Parallelization (`sc.parallelize`, `sc.loadbalancer`) |
31
+ | **sciris-dates** | Date/time handling (`sc.date`, `sc.daterange`, `sc.timer`) |
32
+ | **sciris-printing** | Printing and formatting (`sc.heading`, `sc.sigfig`, `sc.progressbar`) |
33
+ | **sciris-utils** | Utilities (`sc.mergedicts`, `sc.tryexcept`, `sc.checkmem`, etc.) |
34
+ | **sciris-advanced** | Advanced features (`sc.odict` subclassing, nested operations, versioning) |
35
+
36
+ ## Organization
37
+
38
+ ```
39
+ claude_plugin/
40
+ ├── README.md # This file
41
+ ├── .claude-plugin/
42
+ │ └── plugin.json # Plugin manifest (name, MCP servers, metadata)
43
+ └── skills/
44
+ ├── sciris-intro/SKILL.md
45
+ ├── sciris-arrays/SKILL.md
46
+ ├── sciris-dicts/SKILL.md
47
+ ├── sciris-files/SKILL.md
48
+ ├── sciris-plotting/SKILL.md
49
+ ├── sciris-parallel/SKILL.md
50
+ ├── sciris-dates/SKILL.md
51
+ ├── sciris-printing/SKILL.md
52
+ ├── sciris-utils/SKILL.md
53
+ └── sciris-advanced/SKILL.md
54
+ ```
55
+
56
+ Each skill is a single `SKILL.md` file with YAML frontmatter (name and description for triggering) followed by markdown content with usage examples and API guidance.
57
+
58
+ The marketplace registration file at `.claude-plugin/marketplace.json` (in the repo root) points to this folder.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: sciris-advanced
3
+ description: Use when working with advanced Sciris features — nested dictionaries (sc.makenested, sc.getnested, sc.setnested, sc.iternested, sc.search, sc.iterobj), context blocks (sc.capture, sc.tryexcept), sc.smoothinterp interpolation, sc.asd optimization, sc.animation, sc.savemovie, or sc.printjson.
4
+ ---
5
+
6
+ # Sciris Advanced Features
7
+
8
+ Reference for nested dicts, context blocks, interpolation, optimization, and animation. See full tutorial: `docs/tutorials/tut_advanced.ipynb`.
9
+
10
+ If you need more detail, use your MCP tools (Context7 or GitMCP) to look up current Sciris documentation, or consult the other Sciris skills.
11
+
12
+ ## Nested Dictionaries
13
+
14
+ ```python
15
+ nest = {}
16
+ sc.makenested(nest, ['key1', 'key1.1']) # Create nested structure
17
+ sc.makenested(nest, ['key2', 'key2.1', 'key2.1.1'])
18
+
19
+ # Iterate over all "twigs" (leaf paths)
20
+ for twig in sc.iternested(nest):
21
+ sc.setnested(nest, twig, value) # Set value at path
22
+ val = sc.getnested(nest, twig) # Get value at path
23
+
24
+ # Search by key or value
25
+ sc.search(nest, 'key2.1.1') # Find by key pattern
26
+ sc.search(nest, value=5) # Find by value
27
+
28
+ # Transform all values
29
+ sc.iterobj(nest, transform_func, inplace=True)
30
+
31
+ sc.printjson(nest) # Pretty-print as JSON
32
+ ```
33
+
34
+ ## Context Blocks
35
+
36
+ ### Capture output
37
+ ```python
38
+ with sc.capture() as text:
39
+ verbose_function() # All print output → text variable
40
+ lines = text.splitlines()
41
+ ```
42
+
43
+ ### Exception handling
44
+ ```python
45
+ # Simple: exit gracefully at first exception
46
+ with sc.tryexcept():
47
+ risky_function()
48
+
49
+ # Advanced: accumulate exception history
50
+ tryexc = None
51
+ for i in range(1000):
52
+ with sc.tryexcept(history=tryexc, verbose=False) as tryexc:
53
+ fickle_function()
54
+ tryexc.disp() # Show all exceptions
55
+ ```
56
+
57
+ ## Interpolation
58
+
59
+ ```python
60
+ # Smoother than np.interp, more conservative than scipy cubic spline
61
+ y_new = sc.smoothinterp(newx, origx, origy, smoothness=5)
62
+ ```
63
+
64
+ ## Optimization (Adaptive Stochastic Descent)
65
+
66
+ ```python
67
+ result = sc.asd(objective_func, x0, verbose=False)
68
+ # Often faster and more accurate than scipy.optimize.minimize for noisy problems
69
+ ```
70
+
71
+ ## Animation
72
+
73
+ ```python
74
+ frames = [plt.plot(np.cumsum(np.random.randn(100))) for i in range(20)]
75
+ sc.savemovie(frames, 'animation.gif')
76
+ ```
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: sciris-arrays
3
+ description: Use when working with NumPy arrays in Sciris — finding indices, nearest values, concatenation, handling NaN/missing values, smoothing data, 2D Gaussian smoothing, or linear regression with sc.findinds, sc.findnearest, sc.cat, sc.rmnans, sc.fillnans, sc.smooth, sc.rolling, sc.linregress.
4
+ ---
5
+
6
+ # Sciris Math and Array Tools
7
+
8
+ Reference for array utilities that simplify NumPy workflows. See full tutorial: `docs/tutorials/tut_arrays.ipynb`.
9
+
10
+ If you need more detail, use your MCP tools (Context7 or GitMCP) to look up current Sciris documentation, or consult the other Sciris skills.
11
+
12
+ ## Array Indexing
13
+
14
+ ```python
15
+ import numpy as np
16
+ import sciris as sc
17
+
18
+ data = np.random.rand(100)
19
+
20
+ # Find indices where condition is true
21
+ inds = sc.findinds(data > 0.9) # vs (data>0.9).nonzero()[0]
22
+
23
+ # Find nearest value
24
+ ind = sc.findnearest(data, 0.5) # vs np.argmin(abs(data - 0.5))
25
+
26
+ # Works on lists too (not just arrays)
27
+ ind = sc.findnearest([81, 78, 66, 25], 50)
28
+ ```
29
+
30
+ ## Creating/Concatenating Arrays
31
+
32
+ ```python
33
+ sc.cat(1, 2, 3) # array([1, 2, 3])
34
+
35
+ # Add row to matrix — vs np.concatenate([data, np.atleast_2d(np.array([1,2]))])
36
+ data = sc.cat(data, [1, 2])
37
+ ```
38
+
39
+ ## Missing Values
40
+
41
+ ```python
42
+ d0 = [1, 2, np.nan, 4, np.nan, 6, np.nan, np.nan, np.nan, 10]
43
+
44
+ d1 = sc.rmnans(d0) # Remove NaNs
45
+ d2 = sc.fillnans(d0, 0) # Replace with zeros
46
+ d3 = sc.fillnans(d0, 'linear') # Linear interpolation
47
+ ```
48
+
49
+ ## Smoothing
50
+
51
+ ```python
52
+ # 1D smoothing
53
+ smooth = sc.smooth(data, 7) # Gaussian-like smoothing
54
+ roll = sc.rolling(data, 7) # Rolling average
55
+
56
+ # 2D Gaussian smoothing
57
+ smooth2d = sc.gauss2d(raw_2d, scale=2)
58
+ ```
59
+
60
+ ## Other Math
61
+
62
+ ```python
63
+ # Random rounding: 0.7 rounds up 70% of the time
64
+ rounded = sc.randround(data)
65
+
66
+ # Linear regression
67
+ m, b = sc.linregress(x, y)
68
+
69
+ # 3D plotting helpers
70
+ ax = sc.ax3d(121) # Create 3D subplot
71
+ sc.bar3d(data, ax=ax) # 3D bar plot
72
+ ```
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: sciris-dates
3
+ description: Use when working with dates, times, or timing in Sciris — sc.timer, sc.tic, sc.toc, sc.date, sc.daterange, sc.datedelta, sc.now, sc.getdate, sc.time, sc.timedsleep, sc.randsleep, date format conversion, or timing code blocks.
4
+ ---
5
+
6
+ # Sciris Dates and Times
7
+
8
+ Reference for timing and date utilities. See full tutorial: `docs/tutorials/tut_dates.ipynb`.
9
+
10
+ If you need more detail, use your MCP tools (Context7 or GitMCP) to look up current Sciris documentation, or consult the other Sciris skills.
11
+
12
+ ## Timing Code
13
+
14
+ ### Timer object
15
+ ```python
16
+ T = sc.timer()
17
+
18
+ zeros = np.zeros((n, n))
19
+ T.tt('Make zeros') # toc-then-tic (prints elapsed, resets)
20
+
21
+ rand = np.random.rand(n, n)
22
+ T.tt('Make random')
23
+ ```
24
+
25
+ ### Context manager
26
+ ```python
27
+ with sc.timer('My operation'):
28
+ expensive_work()
29
+ ```
30
+
31
+ ### Timer statistics
32
+ ```python
33
+ T = sc.timer()
34
+ for i in range(10):
35
+ work(i)
36
+ T.tt(f'Iteration {i}')
37
+
38
+ print(T.mean(), T.std(), T.min(), T.max())
39
+ T.plot() # Plot timing results
40
+ ```
41
+
42
+ ## Sleep Utilities
43
+
44
+ ```python
45
+ sc.timedsleep(0.3) # Like time.sleep()
46
+
47
+ # In a loop: accounts for computation time so each iteration = exact duration
48
+ for i in range(5):
49
+ sc.timedsleep('start')
50
+ do_work()
51
+ sc.timedsleep(0.3, verbose=True) # Total iteration = 0.3s
52
+
53
+ sc.randsleep(0.2) # Sleep random 0-0.4s (mean 0.2)
54
+ ```
55
+
56
+ ## Date Utilities
57
+
58
+ ### Current time
59
+ ```python
60
+ sc.time() # Unix timestamp (time.time())
61
+ sc.now() # datetime.datetime.now()
62
+ sc.getdate() # Formatted string: '2024-Mar-15 14:30:00'
63
+ ```
64
+
65
+ ### Date conversion
66
+ ```python
67
+ sc.date('2022-03-04') # str → datetime
68
+ sc.date('04-03-2022', format='mdy') # Explicit format
69
+ sc.date('04-03-2022', format='dmy') # Day-month-year
70
+ ```
71
+
72
+ ### Date ranges and math
73
+ ```python
74
+ dates = sc.daterange('2022-02-02', '2022-03-04') # List of date strings
75
+ dates = sc.daterange('2022-01-01', '2022-12-31', as_date=True) # As datetime objects
76
+ newdates = sc.datedelta(dates, months=10) # Add 10 months
77
+ ```
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: sciris-dicts
3
+ description: Use when working with Sciris dictionaries or dataframes — sc.odict, sc.objdict, sc.dataframe, integer indexing of dicts, enumitems, object-syntax access, dataframe creation with dtypes, appendrow, or sc.dataframe.cat.
4
+ ---
5
+
6
+ # Sciris Dictionaries and Dataframes
7
+
8
+ Reference for Sciris container types. See full tutorial: `docs/tutorials/tut_dicts.ipynb`.
9
+
10
+ If you need more detail, use your MCP tools (Context7 or GitMCP) to look up current Sciris documentation, or consult the other Sciris skills.
11
+
12
+ ## odict — Ordered Dict with Index Access
13
+
14
+ ```python
15
+ od = sc.odict(a=['some', 'strings'], b=[1, 2, 3])
16
+
17
+ od['a'] # Key access (like dict)
18
+ od[0] # Integer index access
19
+ od.keys()[0] # Keys returns a list (not dict_keys)
20
+
21
+ for i, k, v in od.enumitems(): # Enumerate with key and value
22
+ print(f'Item {i}: {k} = {v}')
23
+ ```
24
+
25
+ **When NOT to use odict:** When your dict has integer keys (ambiguous with index access).
26
+
27
+ **odict vs objdict:** odict is slightly faster (nanoseconds per op). Use odict for millions of operations; objdict for everything else.
28
+
29
+ ## objdict — odict + Object Syntax
30
+
31
+ ```python
32
+ ob = sc.objdict(key1=[1, 2], key2=[3, 4])
33
+
34
+ ob.key1 # Object syntax (no quotes!)
35
+ ob['key1'] # Dict syntax
36
+ ob[0] # Index syntax
37
+ # All three are equivalent
38
+
39
+ # Especially handy in f-strings:
40
+ print(f'{ob.key1 = }') # No nested quote issues
41
+ ```
42
+
43
+ ## dataframe — Enhanced pd.DataFrame
44
+
45
+ ### Creation shortcuts
46
+ ```python
47
+ # Simpler than pd.DataFrame(dict(x=x, y=y, z=z))
48
+ df = sc.dataframe(x=x, y=y, z=z)
49
+
50
+ # With dtypes
51
+ df = sc.dataframe(x=x, y=y, z=z, dtypes=[str, float, bool])
52
+
53
+ # Columns with types
54
+ df = sc.dataframe(columns=dict(x=str, y=float, z=bool), data=data)
55
+ ```
56
+
57
+ ### Display
58
+ ```python
59
+ df.disp() # Show full dataframe (no truncation)
60
+ df.disp(precision=1, ncols=5, nrows=10) # Customized display
61
+ ```
62
+
63
+ ### Indexing
64
+ ```python
65
+ df['values', 1] # Column + row access
66
+ df[1] # Auto iloc fallback (KeyError in pandas)
67
+ ```
68
+
69
+ ### In-place manipulation
70
+ ```python
71
+ df.appendrow(['d', 4, 0]) # Append row in-place
72
+
73
+ # Concatenate anything
74
+ df = sc.dataframe.cat(
75
+ sc.dataframe(x=['a'], y=[1]), # Dataframe
76
+ dict(x=['b'], y=[2]), # Dict
77
+ [['c', 3]], # Raw data
78
+ )
79
+ ```
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: sciris-files
3
+ description: Use when saving or loading files with Sciris — sc.save, sc.load, sc.savejson, sc.loadjson, sc.saveyaml, sc.readyaml, sc.savearchive, sc.loadarchive, sc.savefig, sc.loadmetadata, sc.getfilelist, sc.thispath, sc.makefilepath, sc.rmpath, sc.metadata, sc.compareversions, sc.require, or version/reproducibility tracking.
4
+ ---
5
+
6
+ # Sciris Files and Versioning
7
+
8
+ Reference for file I/O and version management. See full tutorial: `docs/tutorials/tut_files.ipynb`.
9
+
10
+ If you need more detail, use your MCP tools (Context7 or GitMCP) to look up current Sciris documentation, or consult the other Sciris skills.
11
+
12
+ ## Save/Load Any Object
13
+
14
+ ```python
15
+ sc.save('my-sim.obj', sim) # Gzipped pickle (works with any Python object)
16
+ sim = sc.load('my-sim.obj') # Load — methods and class still work
17
+ sc.zsave('fast.obj', sim) # Zstandard compression (slightly faster)
18
+ # sc.load() auto-detects compression format
19
+ ```
20
+
21
+ ## JSON
22
+
23
+ ```python
24
+ sc.savejson('data.json', obj) # Saves JSONifiable parts of any object
25
+ data = sc.loadjson('data.json') # Returns dict (not original object)
26
+ data = sc.readjson(json_string) # Parse JSON from string
27
+ ```
28
+
29
+ ## YAML (JSON superset with comments)
30
+
31
+ ```python
32
+ data = sc.readyaml(yaml_string) # Parse YAML (supports comments)
33
+ sc.saveyaml('config.yaml', data)
34
+ ```
35
+
36
+ ## File Utilities
37
+
38
+ ```python
39
+ sc.getfilelist('*.ipynb') # List files matching pattern
40
+ sc.thispath() # Path of current file (use instead of pathlib.Path)
41
+ sc.makefilepath('data/out.csv', makedirs=True) # Ensure path exists
42
+ sc.rmpath('file_or_folder') # Remove file or folder (auto-detects)
43
+ ```
44
+
45
+ ## Versioning and Reproducibility
46
+
47
+ ```python
48
+ md = sc.metadata() # Collect all environment metadata
49
+ sc.compareversions(np, '>1.0') # Version comparison (returns True/False)
50
+ sc.require('numpy>1.20') # Warn/raise if requirement not met
51
+ ```
52
+
53
+ ### Metadata-enhanced figures
54
+ ```python
55
+ sc.savefig('fig.png', comments='My analysis') # Saves with metadata (use instead of plt.savefig)
56
+ md = sc.loadmetadata('fig.png') # Retrieve metadata later
57
+ ```
58
+
59
+ ### Metadata-enhanced archives
60
+ ```python
61
+ sc.savearchive('sim.zip', sim, files='script.py', comments='Full run')
62
+ sim = sc.loadarchive('sim.zip') # Restore object
63
+ md = sc.loadmetadata('sim.zip') # Get metadata separately
64
+ ```
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: sciris-intro
3
+ description: Use when the user needs to implement a basic Sciris features — finding array values, plotting with date formatting, objdict containers, saving/loading objects, or parallelization.
4
+ ---
5
+
6
+ # Sciris introduction
7
+
8
+ Quick reference for Sciris' most commonly used features. See the full tutorial: `docs/tutorials/tut_intro.ipynb`.
9
+
10
+ If you need more detail, use your MCP tools (Context7 or GitMCP) to look up current Sciris documentation, or consult the other Sciris skills.
11
+
12
+ ## Core Patterns
13
+
14
+ ### Array operations
15
+ Use the `sciris-arrays` skill for more details.
16
+ ```python
17
+ import numpy as np
18
+ import sciris as sc
19
+
20
+ data = np.random.rand(50)
21
+ inds = sc.findinds(data > 0.9) # Find indices matching condition
22
+ mean_str = sc.arraymean(data) # Mean ± std as string
23
+ joined = sc.strjoin(inds) # Join values into comma-separated string
24
+ ```
25
+
26
+ ### Quick plotting with dates
27
+ Use the `sciris-dates` skill for more details.
28
+ ```python
29
+ dates = sc.daterange('2022-01-01', '2022-02-28', as_date=True)
30
+ values = 1e6 * np.random.randn(59)**2
31
+
32
+ data = sc.dataframe(x=dates, y=values) # Shortcut to pd.DataFrame
33
+ plt.scatter(data.x, data.y)
34
+ sc.dateformatter() # Format date axis
35
+ sc.SIticks() # SI notation on y-axis
36
+ ```
37
+
38
+ ### Flexible containers
39
+ Use the `sciris-dicts` skill for more details.
40
+ ```python
41
+ data = sc.objdict(a=[1,2,3], b=[4,5,6])
42
+ assert data.a == data['a'] == data[0] # Three ways to access
43
+ assert data[:].sum() == 21 # Slice and sum
44
+ for i, key, value in data.enumitems(): # Enumerate with keys
45
+ print(f'Item {i}: {key} = {value}')
46
+ ```
47
+
48
+ ### Save/load any object
49
+ Use the `sciris-files` skill for more details.
50
+ ```python
51
+ sc.save('my-sim.obj', sim) # Save (gzipped pickle)
52
+ new_sim = sc.load('my-sim.obj') # Load — methods still work!
53
+ new_sim.plot()
54
+ ```
55
+
56
+ ### Parallelization
57
+ Use the `sciris-parallel` skill for more details.
58
+ ```python
59
+ results = sc.parallelize(func, iterkwargs=dict(scale=[40,30,20,10]), x_offset=5, y_offset=10)
60
+ ```
61
+
62
+ ### Plot configuration
63
+ Use the `sciris-plotting` skill for more details.
64
+ ```python
65
+ sc.options(dpi=120, jupyter=True) # Set DPI and backend
66
+ sc.boxoff() # Remove top/right spines
67
+ ```