duke-sheets 0.1.10__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 (252) hide show
  1. duke_sheets-0.1.10/Cargo.toml +105 -0
  2. duke_sheets-0.1.10/PKG-INFO +82 -0
  3. duke_sheets-0.1.10/README.md +57 -0
  4. duke_sheets-0.1.10/bindings/python/Cargo.lock +1384 -0
  5. duke_sheets-0.1.10/bindings/python/Cargo.toml +23 -0
  6. duke_sheets-0.1.10/bindings/python/README.md +57 -0
  7. duke_sheets-0.1.10/bindings/python/src/lib.rs +902 -0
  8. duke_sheets-0.1.10/bindings/python/src/types.rs +3210 -0
  9. duke_sheets-0.1.10/bindings/python/src/workbook_read.rs +130 -0
  10. duke_sheets-0.1.10/bindings/python/src/worksheet_read.rs +997 -0
  11. duke_sheets-0.1.10/bindings/python/tests/conftest.py +41 -0
  12. duke_sheets-0.1.10/bindings/python/tests/test_calculation.py +319 -0
  13. duke_sheets-0.1.10/bindings/python/tests/test_cells.py +232 -0
  14. duke_sheets-0.1.10/bindings/python/tests/test_formulas.py +192 -0
  15. duke_sheets-0.1.10/bindings/python/tests/test_workbook.py +199 -0
  16. duke_sheets-0.1.10/bindings/python/tests/test_worksheet.py +310 -0
  17. duke_sheets-0.1.10/bindings/python/uv.lock +228 -0
  18. duke_sheets-0.1.10/crates/duke-sheets/Cargo.toml +68 -0
  19. duke_sheets-0.1.10/crates/duke-sheets/benches/calculation.rs +145 -0
  20. duke_sheets-0.1.10/crates/duke-sheets/benches/csv_roundtrip.rs +50 -0
  21. duke_sheets-0.1.10/crates/duke-sheets/benches/formula_parser.rs +73 -0
  22. duke_sheets-0.1.10/crates/duke-sheets/benches/helpers.rs +171 -0
  23. duke_sheets-0.1.10/crates/duke-sheets/benches/xlsx_read.rs +58 -0
  24. duke_sheets-0.1.10/crates/duke-sheets/benches/xlsx_write.rs +141 -0
  25. duke_sheets-0.1.10/crates/duke-sheets/examples/create_xlsx.rs +55 -0
  26. duke_sheets-0.1.10/crates/duke-sheets/examples/mem_profile.rs +120 -0
  27. duke_sheets-0.1.10/crates/duke-sheets/examples/profile_calc.rs +592 -0
  28. duke_sheets-0.1.10/crates/duke-sheets/perf_fixtures.rs +74 -0
  29. duke_sheets-0.1.10/crates/duke-sheets/src/calculation.rs +4167 -0
  30. duke_sheets-0.1.10/crates/duke-sheets/src/lib.rs +267 -0
  31. duke_sheets-0.1.10/crates/duke-sheets/src/prelude.rs +75 -0
  32. duke_sheets-0.1.10/crates/duke-sheets/tests/chart_corpus.rs +737 -0
  33. duke_sheets-0.1.10/crates/duke-sheets/tests/chart_parity.rs +417 -0
  34. duke_sheets-0.1.10/crates/duke-sheets/tests/formula_evaluation.rs +316 -0
  35. duke_sheets-0.1.10/crates/duke-sheets/tests/formula_parity.rs +279 -0
  36. duke_sheets-0.1.10/crates/duke-sheets/tests/xlsx_formatting_roundtrip.rs +811 -0
  37. duke_sheets-0.1.10/crates/duke-sheets/tests/xlsx_roundtrip.rs +5605 -0
  38. duke_sheets-0.1.10/crates/duke-sheets/tests/xlsx_style_roundtrip.rs +610 -0
  39. duke_sheets-0.1.10/crates/duke-sheets-chart/Cargo.toml +19 -0
  40. duke_sheets-0.1.10/crates/duke-sheets-chart/src/axis.rs +136 -0
  41. duke_sheets-0.1.10/crates/duke-sheets-chart/src/chart.rs +415 -0
  42. duke_sheets-0.1.10/crates/duke-sheets-chart/src/chart_ex.rs +653 -0
  43. duke_sheets-0.1.10/crates/duke-sheets-chart/src/config.rs +44 -0
  44. duke_sheets-0.1.10/crates/duke-sheets-chart/src/data_labels.rs +67 -0
  45. duke_sheets-0.1.10/crates/duke-sheets-chart/src/error_bars.rs +41 -0
  46. duke_sheets-0.1.10/crates/duke-sheets-chart/src/formatting.rs +51 -0
  47. duke_sheets-0.1.10/crates/duke-sheets-chart/src/legend.rs +47 -0
  48. duke_sheets-0.1.10/crates/duke-sheets-chart/src/lib.rs +42 -0
  49. duke_sheets-0.1.10/crates/duke-sheets-chart/src/marker.rs +26 -0
  50. duke_sheets-0.1.10/crates/duke-sheets-chart/src/series.rs +95 -0
  51. duke_sheets-0.1.10/crates/duke-sheets-chart/src/text_properties.rs +35 -0
  52. duke_sheets-0.1.10/crates/duke-sheets-chart/src/trendline.rs +44 -0
  53. duke_sheets-0.1.10/crates/duke-sheets-chart/src/types/mod.rs +3 -0
  54. duke_sheets-0.1.10/crates/duke-sheets-core/Cargo.toml +23 -0
  55. duke_sheets-0.1.10/crates/duke-sheets-core/src/auto_filter.rs +359 -0
  56. duke_sheets-0.1.10/crates/duke-sheets-core/src/cell/address.rs +527 -0
  57. duke_sheets-0.1.10/crates/duke-sheets-core/src/cell/mod.rs +18 -0
  58. duke_sheets-0.1.10/crates/duke-sheets-core/src/cell/storage.rs +829 -0
  59. duke_sheets-0.1.10/crates/duke-sheets-core/src/cell/value.rs +505 -0
  60. duke_sheets-0.1.10/crates/duke-sheets-core/src/cell/view.rs +727 -0
  61. duke_sheets-0.1.10/crates/duke-sheets-core/src/column.rs +108 -0
  62. duke_sheets-0.1.10/crates/duke-sheets-core/src/comment.rs +123 -0
  63. duke_sheets-0.1.10/crates/duke-sheets-core/src/conditional_format.rs +897 -0
  64. duke_sheets-0.1.10/crates/duke-sheets-core/src/error.rs +80 -0
  65. duke_sheets-0.1.10/crates/duke-sheets-core/src/hyperlink.rs +12 -0
  66. duke_sheets-0.1.10/crates/duke-sheets-core/src/lib.rs +85 -0
  67. duke_sheets-0.1.10/crates/duke-sheets-core/src/locale.rs +261 -0
  68. duke_sheets-0.1.10/crates/duke-sheets-core/src/named_range.rs +278 -0
  69. duke_sheets-0.1.10/crates/duke-sheets-core/src/range.rs +209 -0
  70. duke_sheets-0.1.10/crates/duke-sheets-core/src/rich_text.rs +146 -0
  71. duke_sheets-0.1.10/crates/duke-sheets-core/src/row.rs +77 -0
  72. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/alignment.rs +113 -0
  73. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/border.rs +157 -0
  74. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/color.rs +345 -0
  75. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/fill.rs +163 -0
  76. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/font.rs +161 -0
  77. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/mod.rs +172 -0
  78. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/number_format.rs +268 -0
  79. duke_sheets-0.1.10/crates/duke-sheets-core/src/style/pool.rs +224 -0
  80. duke_sheets-0.1.10/crates/duke-sheets-core/src/table.rs +271 -0
  81. duke_sheets-0.1.10/crates/duke-sheets-core/src/validation.rs +538 -0
  82. duke_sheets-0.1.10/crates/duke-sheets-core/src/workbook.rs +730 -0
  83. duke_sheets-0.1.10/crates/duke-sheets-core/src/worksheet.rs +2192 -0
  84. duke_sheets-0.1.10/crates/duke-sheets-csv/Cargo.toml +18 -0
  85. duke_sheets-0.1.10/crates/duke-sheets-csv/src/error.rs +30 -0
  86. duke_sheets-0.1.10/crates/duke-sheets-csv/src/lib.rs +13 -0
  87. duke_sheets-0.1.10/crates/duke-sheets-csv/src/options.rs +60 -0
  88. duke_sheets-0.1.10/crates/duke-sheets-csv/src/reader.rs +87 -0
  89. duke_sheets-0.1.10/crates/duke-sheets-csv/src/writer.rs +59 -0
  90. duke_sheets-0.1.10/crates/duke-sheets-formula/Cargo.toml +24 -0
  91. duke_sheets-0.1.10/crates/duke-sheets-formula/src/ast.rs +138 -0
  92. duke_sheets-0.1.10/crates/duke-sheets-formula/src/dependency.rs +454 -0
  93. duke_sheets-0.1.10/crates/duke-sheets-formula/src/error.rs +42 -0
  94. duke_sheets-0.1.10/crates/duke-sheets-formula/src/eval_cache.rs +279 -0
  95. duke_sheets-0.1.10/crates/duke-sheets-formula/src/evaluator.rs +4044 -0
  96. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/asdf.json +0 -0
  97. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/compatibility.rs +2623 -0
  98. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/criteria.rs +319 -0
  99. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/database.rs +952 -0
  100. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/date.rs +2653 -0
  101. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/engineering.rs +3179 -0
  102. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/financial.rs +2344 -0
  103. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/financial_extra.rs +3407 -0
  104. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/info.rs +270 -0
  105. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/info_extra.rs +1238 -0
  106. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/logical.rs +821 -0
  107. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/logical_extra.rs +477 -0
  108. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/lookup.rs +1802 -0
  109. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/lookup_extra.rs +3093 -0
  110. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/math.rs +2044 -0
  111. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/math_extra.rs +3636 -0
  112. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/mod.rs +4001 -0
  113. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/statistical.rs +7115 -0
  114. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/statistical_extra.rs +1511 -0
  115. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/text.rs +1399 -0
  116. duke_sheets-0.1.10/crates/duke-sheets-formula/src/functions/text_extra.rs +1518 -0
  117. duke_sheets-0.1.10/crates/duke-sheets-formula/src/lib.rs +35 -0
  118. duke_sheets-0.1.10/crates/duke-sheets-formula/src/parser.rs +1723 -0
  119. duke_sheets-0.1.10/crates/duke-sheets-xls/Cargo.toml +22 -0
  120. duke_sheets-0.1.10/crates/duke-sheets-xls/FORMULA_TOKENS.md +534 -0
  121. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/formula/decompiler.rs +1506 -0
  122. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/formula/function_table.rs +643 -0
  123. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/formula/mod.rs +150 -0
  124. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/formula/ptg.rs +147 -0
  125. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/formula/token_parser.rs +1159 -0
  126. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/mod.rs +94 -0
  127. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/parser.rs +183 -0
  128. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/records.rs +96 -0
  129. duke_sheets-0.1.10/crates/duke-sheets-xls/src/biff/strings.rs +889 -0
  130. duke_sheets-0.1.10/crates/duke-sheets-xls/src/cfb.rs +630 -0
  131. duke_sheets-0.1.10/crates/duke-sheets-xls/src/error.rs +30 -0
  132. duke_sheets-0.1.10/crates/duke-sheets-xls/src/lib.rs +26 -0
  133. duke_sheets-0.1.10/crates/duke-sheets-xls/src/reader.rs +4062 -0
  134. duke_sheets-0.1.10/crates/duke-sheets-xls/src/styles.rs +934 -0
  135. duke_sheets-0.1.10/crates/duke-sheets-xls/src/writer.rs +3 -0
  136. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/common.rs +68 -0
  137. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/main.rs +8 -0
  138. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/comments.rs +94 -0
  139. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/conditional_format.rs +124 -0
  140. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/data_types.rs +249 -0
  141. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/data_validation.rs +129 -0
  142. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/dimensions.rs +115 -0
  143. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/formulas.rs +557 -0
  144. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/merged_cells.rs +123 -0
  145. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/mod.rs +9 -0
  146. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/sheet_properties.rs +121 -0
  147. duke_sheets-0.1.10/crates/duke-sheets-xls/tests/e2e/reading/styles.rs +1009 -0
  148. duke_sheets-0.1.10/crates/duke-sheets-xlsx/Cargo.toml +25 -0
  149. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/error.rs +38 -0
  150. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/lib.rs +13 -0
  151. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/chart.rs +3781 -0
  152. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/chart_ex.rs +1745 -0
  153. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/chartsheet.rs +51 -0
  154. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/comments.rs +443 -0
  155. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/conditional_format.rs +269 -0
  156. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/data_validation.rs +133 -0
  157. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/drawing.rs +810 -0
  158. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/formulas.rs +723 -0
  159. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/mod.rs +3307 -0
  160. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/shared_strings.rs +482 -0
  161. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/table.rs +345 -0
  162. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/theme.rs +286 -0
  163. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/reader/workbook.rs +341 -0
  164. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/styles.rs +2445 -0
  165. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/chart.rs +1914 -0
  166. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/chart_ex.rs +1088 -0
  167. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/comments.rs +166 -0
  168. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/conditional_format.rs +330 -0
  169. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/data_validation.rs +137 -0
  170. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/drawing.rs +341 -0
  171. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/mod.rs +3760 -0
  172. duke_sheets-0.1.10/crates/duke-sheets-xlsx/src/writer/tables.rs +133 -0
  173. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/common.rs +110 -0
  174. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/main.rs +24 -0
  175. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/alignment.rs +208 -0
  176. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/border_styles.rs +193 -0
  177. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/comments.rs +159 -0
  178. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/conditional_format.rs +269 -0
  179. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/data_types.rs +258 -0
  180. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/data_validation.rs +160 -0
  181. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/dimensions.rs +115 -0
  182. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/fill_styles.rs +132 -0
  183. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/font_styles.rs +277 -0
  184. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/formula_metadata.rs +244 -0
  185. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/merged_cells.rs +93 -0
  186. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/mod.rs +16 -0
  187. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/named_cell_styles_roundtrip.rs +197 -0
  188. duke_sheets-0.1.10/crates/duke-sheets-xlsx/tests/e2e/reading/number_formats.rs +131 -0
  189. duke_sheets-0.1.10/crates/ssfmt/.gitignore +15 -0
  190. duke_sheets-0.1.10/crates/ssfmt/Cargo.toml +26 -0
  191. duke_sheets-0.1.10/crates/ssfmt/README.md +44 -0
  192. duke_sheets-0.1.10/crates/ssfmt/docs/ARCHITECTURE.md +326 -0
  193. duke_sheets-0.1.10/crates/ssfmt/docs/COMPARISON.md +214 -0
  194. duke_sheets-0.1.10/crates/ssfmt/docs/TESTING.md +237 -0
  195. duke_sheets-0.1.10/crates/ssfmt/docs/plans/2026-01-09-ssfmt-design.md +271 -0
  196. duke_sheets-0.1.10/crates/ssfmt/docs/plans/2026-01-09-ssfmt-implementation.md +3356 -0
  197. duke_sheets-0.1.10/crates/ssfmt/src/ast.rs +441 -0
  198. duke_sheets-0.1.10/crates/ssfmt/src/builtin_formats.rs +162 -0
  199. duke_sheets-0.1.10/crates/ssfmt/src/cache.rs +29 -0
  200. duke_sheets-0.1.10/crates/ssfmt/src/date_serial.rs +375 -0
  201. duke_sheets-0.1.10/crates/ssfmt/src/error.rs +44 -0
  202. duke_sheets-0.1.10/crates/ssfmt/src/formatter/bigint.rs +238 -0
  203. duke_sheets-0.1.10/crates/ssfmt/src/formatter/date.rs +523 -0
  204. duke_sheets-0.1.10/crates/ssfmt/src/formatter/fraction.rs +272 -0
  205. duke_sheets-0.1.10/crates/ssfmt/src/formatter/mod.rs +511 -0
  206. duke_sheets-0.1.10/crates/ssfmt/src/formatter/number.rs +946 -0
  207. duke_sheets-0.1.10/crates/ssfmt/src/formatter/text.rs +1 -0
  208. duke_sheets-0.1.10/crates/ssfmt/src/hijri.rs +155 -0
  209. duke_sheets-0.1.10/crates/ssfmt/src/lib.rs +183 -0
  210. duke_sheets-0.1.10/crates/ssfmt/src/locale/builtin.rs +61 -0
  211. duke_sheets-0.1.10/crates/ssfmt/src/locale/mod.rs +5 -0
  212. duke_sheets-0.1.10/crates/ssfmt/src/options.rs +32 -0
  213. duke_sheets-0.1.10/crates/ssfmt/src/parser/lexer.rs +452 -0
  214. duke_sheets-0.1.10/crates/ssfmt/src/parser/mod.rs +1260 -0
  215. duke_sheets-0.1.10/crates/ssfmt/src/parser/tokens.rs +65 -0
  216. duke_sheets-0.1.10/crates/ssfmt/src/value.rs +193 -0
  217. duke_sheets-0.1.10/crates/ssfmt/tests/ast_tests.rs +65 -0
  218. duke_sheets-0.1.10/crates/ssfmt/tests/builtin_format_id_tests.rs +156 -0
  219. duke_sheets-0.1.10/crates/ssfmt/tests/convenience_tests.rs +22 -0
  220. duke_sheets-0.1.10/crates/ssfmt/tests/date_serial_tests.rs +47 -0
  221. duke_sheets-0.1.10/crates/ssfmt/tests/error_tests.rs +19 -0
  222. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/comma.tsv.gz +0 -0
  223. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/dates.tsv.gz +0 -0
  224. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/exp.tsv.gz +0 -0
  225. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/ssf_date.json +22 -0
  226. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/ssf_fraction.json +121 -0
  227. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/ssf_general.json +516 -0
  228. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/ssf_implied.json +756 -0
  229. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/ssf_is_date.json +447 -0
  230. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/ssf_oddities.json +180 -0
  231. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/times.tsv.gz +0 -0
  232. duke_sheets-0.1.10/crates/ssfmt/tests/fixtures/valid.tsv.gz +0 -0
  233. duke_sheets-0.1.10/crates/ssfmt/tests/format_dates.rs +63 -0
  234. duke_sheets-0.1.10/crates/ssfmt/tests/format_numbers.rs +96 -0
  235. duke_sheets-0.1.10/crates/ssfmt/tests/general_format_tests.rs +80 -0
  236. duke_sheets-0.1.10/crates/ssfmt/tests/integration.rs +281 -0
  237. duke_sheets-0.1.10/crates/ssfmt/tests/lexer_tests.rs +291 -0
  238. duke_sheets-0.1.10/crates/ssfmt/tests/options_tests.rs +13 -0
  239. duke_sheets-0.1.10/crates/ssfmt/tests/parser_tests.rs +68 -0
  240. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_comma_tests.rs +119 -0
  241. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_dates_tests.rs +128 -0
  242. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_exp_tests.rs +119 -0
  243. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_fraction_tests.rs +93 -0
  244. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_general_tests.rs +105 -0
  245. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_implied_tests.rs +116 -0
  246. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_oddities_tests.rs +136 -0
  247. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_times_tests.rs +129 -0
  248. duke_sheets-0.1.10/crates/ssfmt/tests/ssf_valid_tests.rs +72 -0
  249. duke_sheets-0.1.10/crates/ssfmt/tests/value_tests.rs +25 -0
  250. duke_sheets-0.1.10/pyproject.toml +49 -0
  251. duke_sheets-0.1.10/python/duke_sheets/__init__.py +40 -0
  252. duke_sheets-0.1.10/python/duke_sheets/py.typed +1 -0
@@ -0,0 +1,105 @@
1
+ [workspace]
2
+ resolver = "2"
3
+ members = [
4
+ "crates/duke-sheets-core",
5
+ "crates/duke-sheets-formula",
6
+ "crates/duke-sheets-xlsx",
7
+ "crates/duke-sheets-xls",
8
+ "crates/duke-sheets-csv",
9
+ "crates/duke-sheets-chart",
10
+ "crates/duke-sheets",
11
+ "crates/duke-sheets-ffi",
12
+ "crates/duke-sheets-cli",
13
+ "crates/excel-com-protocol",
14
+ "crates/duke-sheets-excel-com",
15
+ "crates/libreoffice-urp",
16
+ "crates/duke-sheets-libreoffice",
17
+ "crates/duke-sheets-html",
18
+ "crates/ssfmt",
19
+ ]
20
+ # Bindings are excluded from the default workspace build
21
+ exclude = [
22
+ "bindings/python",
23
+ "bindings/wasm",
24
+ "bindings/nodejs",
25
+ ]
26
+
27
+ [workspace.package]
28
+ version = "0.1.0"
29
+ edition = "2021"
30
+ license = "MIT OR Apache-2.0"
31
+ repository = "https://github.com/yourorg/duke-sheets"
32
+ rust-version = "1.82"
33
+
34
+ [workspace.dependencies]
35
+ # Internal crates
36
+ duke-sheets-core = { path = "crates/duke-sheets-core" }
37
+ duke-sheets-formula = { path = "crates/duke-sheets-formula" }
38
+ duke-sheets-xlsx = { path = "crates/duke-sheets-xlsx" }
39
+ duke-sheets-xls = { path = "crates/duke-sheets-xls" }
40
+ duke-sheets-csv = { path = "crates/duke-sheets-csv" }
41
+ duke-sheets-chart = { path = "crates/duke-sheets-chart" }
42
+ duke-sheets-html = { path = "crates/duke-sheets-html" }
43
+
44
+ # Error handling
45
+ thiserror = "1.0"
46
+ anyhow = "1.0"
47
+
48
+ # Logging
49
+ log = "0.4"
50
+ tracing = "0.1"
51
+
52
+ # XML parsing (for XLSX)
53
+ quick-xml = "0.37"
54
+
55
+ # ZIP handling (for XLSX) - only deflate needed; bzip2/lzma/zstd use C deps that break WASM
56
+ # `time` feature removed: it calls SystemTime::now() via DateTime::default_for_write(),
57
+ # which panics on wasm32-unknown-unknown. Without it, zip uses a fixed date (1980-01-01).
58
+ zip = { version = "2.1", default-features = false, features = ["deflate"] }
59
+
60
+ # CSV handling
61
+ csv = "1.3"
62
+
63
+ # Date/time
64
+ chrono = { version = "0.4", default-features = false, features = ["std", "clock"] }
65
+
66
+ # Decimal precision for financial calculations
67
+ rust_decimal = "1.35"
68
+
69
+ # Number format rendering (Excel-compatible ECMA-376 format codes)
70
+ ssfmt = { path = "crates/ssfmt" }
71
+
72
+ # Regex (for formulas, number formats)
73
+ regex = "1.10"
74
+ lazy-regex = "3.1"
75
+
76
+ # Lazy static (for FFI global context)
77
+ lazy_static = "1.4"
78
+ once_cell = "1.19"
79
+
80
+ # Hash functions (for style deduplication)
81
+ ahash = "0.8"
82
+ dashmap = "6.1"
83
+
84
+ # Parallel calculation (optional)
85
+ rayon = "1.11"
86
+
87
+ # Serialization (optional, for debugging)
88
+ serde = { version = "1.0", features = ["derive"] }
89
+ serde_json = "1.0"
90
+
91
+ # CLI
92
+ clap = { version = "4", features = ["derive"] }
93
+
94
+ # Dev dependencies (in workspace.dependencies so crates can inherit)
95
+ tempfile = "3"
96
+ criterion = { version = "0.5", features = ["html_reports"] }
97
+ proptest = "1.4"
98
+ pretty_assertions = "1.4"
99
+
100
+ [profile.release]
101
+ lto = true
102
+ codegen-units = 1
103
+
104
+ [profile.bench]
105
+ lto = true
@@ -0,0 +1,82 @@
1
+ Metadata-Version: 2.4
2
+ Name: duke-sheets
3
+ Version: 0.1.10
4
+ Classifier: Development Status :: 3 - Alpha
5
+ Classifier: Intended Audience :: Developers
6
+ Classifier: License :: OSI Approved :: MIT License
7
+ Classifier: License :: OSI Approved :: Apache Software License
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.9
10
+ Classifier: Programming Language :: Python :: 3.10
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Rust
15
+ Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
16
+ Summary: High-performance Excel file library for Python
17
+ Keywords: excel,xlsx,spreadsheet,csv
18
+ Author: Duke Sheets Authors
19
+ License: MIT OR Apache-2.0
20
+ Requires-Python: >=3.9
21
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
22
+ Project-URL: Homepage, https://github.com/guseggert/duke-sheets
23
+ Project-URL: Repository, https://github.com/guseggert/duke-sheets
24
+
25
+ # duke-sheets
26
+
27
+ High-performance Excel file library for Python, powered by Rust.
28
+
29
+ ## Installation
30
+
31
+ ```bash
32
+ pip install duke-sheets
33
+ ```
34
+
35
+ ## Quick Start
36
+
37
+ ```python
38
+ import duke_sheets
39
+
40
+ # Create a new workbook
41
+ wb = duke_sheets.Workbook()
42
+ sheet = wb.get_sheet(0)
43
+
44
+ # Set cell values
45
+ sheet.set_cell("A1", 10)
46
+ sheet.set_cell("A2", 20)
47
+ sheet.set_formula("A3", "=A1+A2")
48
+
49
+ # Calculate formulas
50
+ wb.calculate()
51
+
52
+ # Get the result
53
+ result = sheet.get_calculated_value("A3")
54
+ print(result.as_number()) # 30.0
55
+
56
+ # Save to file
57
+ wb.save("output.xlsx")
58
+ ```
59
+
60
+ ## Opening Existing Files
61
+
62
+ ```python
63
+ # Open an Excel file
64
+ wb = duke_sheets.Workbook.open("input.xlsx")
65
+
66
+ # Or a CSV file
67
+ wb = duke_sheets.Workbook.open("data.csv")
68
+ ```
69
+
70
+ ## Features
71
+
72
+ - Read and write Excel files (.xlsx)
73
+ - Read and write CSV files
74
+ - Full formula calculation engine
75
+ - Support for named ranges
76
+ - Cell merging
77
+ - Row heights and column widths
78
+
79
+ ## License
80
+
81
+ MIT OR Apache-2.0
82
+
@@ -0,0 +1,57 @@
1
+ # duke-sheets
2
+
3
+ High-performance Excel file library for Python, powered by Rust.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install duke-sheets
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```python
14
+ import duke_sheets
15
+
16
+ # Create a new workbook
17
+ wb = duke_sheets.Workbook()
18
+ sheet = wb.get_sheet(0)
19
+
20
+ # Set cell values
21
+ sheet.set_cell("A1", 10)
22
+ sheet.set_cell("A2", 20)
23
+ sheet.set_formula("A3", "=A1+A2")
24
+
25
+ # Calculate formulas
26
+ wb.calculate()
27
+
28
+ # Get the result
29
+ result = sheet.get_calculated_value("A3")
30
+ print(result.as_number()) # 30.0
31
+
32
+ # Save to file
33
+ wb.save("output.xlsx")
34
+ ```
35
+
36
+ ## Opening Existing Files
37
+
38
+ ```python
39
+ # Open an Excel file
40
+ wb = duke_sheets.Workbook.open("input.xlsx")
41
+
42
+ # Or a CSV file
43
+ wb = duke_sheets.Workbook.open("data.csv")
44
+ ```
45
+
46
+ ## Features
47
+
48
+ - Read and write Excel files (.xlsx)
49
+ - Read and write CSV files
50
+ - Full formula calculation engine
51
+ - Support for named ranges
52
+ - Cell merging
53
+ - Row heights and column widths
54
+
55
+ ## License
56
+
57
+ MIT OR Apache-2.0