numdaplot 0.1.0__py3-none-any.whl

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 (474) hide show
  1. numdaplot/__init__.py +506 -0
  2. numdaplot/arrays/__init__.py +5 -0
  3. numdaplot/arrays/array.py +92 -0
  4. numdaplot/arrays/array_arithmetic.py +404 -0
  5. numdaplot/arrays/array_calculation.py +143 -0
  6. numdaplot/arrays/array_conversion.py +150 -0
  7. numdaplot/arrays/array_creation.py +371 -0
  8. numdaplot/arrays/array_data.py +281 -0
  9. numdaplot/arrays/array_layout.py +179 -0
  10. numdaplot/arrays/array_logic.py +227 -0
  11. numdaplot/arrays/array_reflected_arithmetic.py +334 -0
  12. numdaplot/arrays/array_refusals.py +339 -0
  13. numdaplot/arrays/array_selection.py +195 -0
  14. numdaplot/arrays/array_sorting.py +59 -0
  15. numdaplot/arrays/axis_number.py +58 -0
  16. numdaplot/arrays/calculation/__init__.py +5 -0
  17. numdaplot/arrays/calculation/counting_statistics.py +325 -0
  18. numdaplot/arrays/calculation/location_statistics.py +268 -0
  19. numdaplot/arrays/calculation/math_function_values.py +183 -0
  20. numdaplot/arrays/calculation/statistic_values.py +209 -0
  21. numdaplot/arrays/calculation/time_function_values.py +419 -0
  22. numdaplot/arrays/conversion/__init__.py +5 -0
  23. numdaplot/arrays/conversion/array_text.py +62 -0
  24. numdaplot/arrays/conversion/equality_check.py +72 -0
  25. numdaplot/arrays/conversion/python_values.py +70 -0
  26. numdaplot/arrays/conversion/time_text.py +290 -0
  27. numdaplot/arrays/creation/__init__.py +5 -0
  28. numdaplot/arrays/creation/date_parts.py +89 -0
  29. numdaplot/arrays/creation/date_parts_values.py +437 -0
  30. numdaplot/arrays/creation/distribution.py +54 -0
  31. numdaplot/arrays/creation/filled_values.py +58 -0
  32. numdaplot/arrays/creation/list_conversion.py +311 -0
  33. numdaplot/arrays/creation/list_shape.py +97 -0
  34. numdaplot/arrays/creation/normal.py +65 -0
  35. numdaplot/arrays/creation/numpy_conversion.py +149 -0
  36. numdaplot/arrays/creation/random_integers.py +104 -0
  37. numdaplot/arrays/creation/random_values.py +97 -0
  38. numdaplot/arrays/creation/range_values.py +73 -0
  39. numdaplot/arrays/creation/spacing.py +84 -0
  40. numdaplot/arrays/creation/spacing_values.py +63 -0
  41. numdaplot/arrays/creation/uniform.py +63 -0
  42. numdaplot/arrays/equality.py +68 -0
  43. numdaplot/arrays/layout/__init__.py +5 -0
  44. numdaplot/arrays/layout/sorting_values.py +113 -0
  45. numdaplot/arrays/layout/unique_values.py +49 -0
  46. numdaplot/arrays/mapping/__init__.py +5 -0
  47. numdaplot/arrays/mapping/mapped_values.py +286 -0
  48. numdaplot/arrays/mapping/unmatched.py +50 -0
  49. numdaplot/arrays/mapping/value_change.py +55 -0
  50. numdaplot/arrays/mapping/value_mapping.py +161 -0
  51. numdaplot/arrays/math_functions/__init__.py +5 -0
  52. numdaplot/arrays/math_functions/absolute.py +27 -0
  53. numdaplot/arrays/math_functions/cosine.py +28 -0
  54. numdaplot/arrays/math_functions/exponential.py +27 -0
  55. numdaplot/arrays/math_functions/logarithm.py +72 -0
  56. numdaplot/arrays/math_functions/math_function.py +58 -0
  57. numdaplot/arrays/math_functions/round.py +58 -0
  58. numdaplot/arrays/math_functions/sine.py +28 -0
  59. numdaplot/arrays/math_functions/square_root.py +27 -0
  60. numdaplot/arrays/operations/__init__.py +5 -0
  61. numdaplot/arrays/operations/boolean_operands.py +48 -0
  62. numdaplot/arrays/operations/combination.py +157 -0
  63. numdaplot/arrays/operations/float_errors.py +170 -0
  64. numdaplot/arrays/operations/integer_bounds.py +175 -0
  65. numdaplot/arrays/operations/integer_rules.py +397 -0
  66. numdaplot/arrays/operations/operand.py +139 -0
  67. numdaplot/arrays/operations/time_arithmetic.py +479 -0
  68. numdaplot/arrays/operations/time_bounds.py +286 -0
  69. numdaplot/arrays/operations/time_result_bounds.py +397 -0
  70. numdaplot/arrays/operations/transformation.py +54 -0
  71. numdaplot/arrays/operations/type_requirements.py +94 -0
  72. numdaplot/arrays/replacement.py +66 -0
  73. numdaplot/arrays/selection/__init__.py +5 -0
  74. numdaplot/arrays/selection/comparison_masks.py +131 -0
  75. numdaplot/arrays/selection/membership_masks.py +118 -0
  76. numdaplot/arrays/selection/missing_mask.py +50 -0
  77. numdaplot/arrays/selection/region_index.py +178 -0
  78. numdaplot/arrays/selection/replaced_values.py +120 -0
  79. numdaplot/arrays/selection/rule_mask.py +83 -0
  80. numdaplot/arrays/selection/time_reference.py +172 -0
  81. numdaplot/arrays/shape.py +74 -0
  82. numdaplot/arrays/type_match.py +51 -0
  83. numdaplot/data_types/__init__.py +5 -0
  84. numdaplot/data_types/library.py +57 -0
  85. numdaplot/data_types/numpy_mapping.py +207 -0
  86. numdaplot/data_types/pandas_mapping.py +114 -0
  87. numdaplot/data_types/time_of_day.py +292 -0
  88. numdaplot/data_types/type.py +224 -0
  89. numdaplot/data_types/value_family.py +149 -0
  90. numdaplot/data_types/value_type.py +147 -0
  91. numdaplot/dates/__init__.py +5 -0
  92. numdaplot/dates/custom_date_format.py +83 -0
  93. numdaplot/dates/date_format.py +120 -0
  94. numdaplot/dates/date_part.py +59 -0
  95. numdaplot/dates/date_part_unit.py +153 -0
  96. numdaplot/dates/date_period.py +57 -0
  97. numdaplot/dates/duration_in.py +58 -0
  98. numdaplot/dates/duration_unit.py +90 -0
  99. numdaplot/dates/period_unit.py +101 -0
  100. numdaplot/dates/time_function.py +56 -0
  101. numdaplot/dates/time_zone.py +68 -0
  102. numdaplot/dates/time_zone_change.py +71 -0
  103. numdaplot/dates/time_zone_mode.py +81 -0
  104. numdaplot/dates/to_duration.py +58 -0
  105. numdaplot/errors/__init__.py +7 -0
  106. numdaplot/errors/broadcast_warning.py +36 -0
  107. numdaplot/errors/calculation_warning.py +35 -0
  108. numdaplot/errors/cell_out_of_range_error.py +77 -0
  109. numdaplot/errors/column_not_found_error.py +64 -0
  110. numdaplot/errors/conflicting_settings_error.py +60 -0
  111. numdaplot/errors/dimension_error.py +62 -0
  112. numdaplot/errors/display_warning.py +32 -0
  113. numdaplot/errors/duplicate_column_error.py +82 -0
  114. numdaplot/errors/duplicate_label_error.py +55 -0
  115. numdaplot/errors/duplicate_statistic_error.py +55 -0
  116. numdaplot/errors/duplicate_value_error.py +54 -0
  117. numdaplot/errors/empty_array_error.py +55 -0
  118. numdaplot/errors/empty_list_error.py +52 -0
  119. numdaplot/errors/empty_region_error.py +34 -0
  120. numdaplot/errors/empty_text_error.py +34 -0
  121. numdaplot/errors/empty_total_error.py +62 -0
  122. numdaplot/errors/empty_values_error.py +34 -0
  123. numdaplot/errors/file_access_error.py +70 -0
  124. numdaplot/errors/file_exists_error.py +62 -0
  125. numdaplot/errors/file_not_found_error.py +56 -0
  126. numdaplot/errors/incompatible_charts_error.py +80 -0
  127. numdaplot/errors/incompatible_types_error.py +104 -0
  128. numdaplot/errors/integer_overflow_error.py +61 -0
  129. numdaplot/errors/invalid_base_error.py +52 -0
  130. numdaplot/errors/invalid_bin_width_error.py +66 -0
  131. numdaplot/errors/invalid_bounds_error.py +58 -0
  132. numdaplot/errors/invalid_chart_data_error.py +81 -0
  133. numdaplot/errors/invalid_color_count_error.py +63 -0
  134. numdaplot/errors/invalid_color_error.py +51 -0
  135. numdaplot/errors/invalid_column_name_error.py +52 -0
  136. numdaplot/errors/invalid_conversion_error.py +119 -0
  137. numdaplot/errors/invalid_count_error.py +61 -0
  138. numdaplot/errors/invalid_date_format_error.py +51 -0
  139. numdaplot/errors/invalid_deviation_error.py +52 -0
  140. numdaplot/errors/invalid_fraction_error.py +51 -0
  141. numdaplot/errors/invalid_label_count_error.py +61 -0
  142. numdaplot/errors/invalid_limits_error.py +111 -0
  143. numdaplot/errors/invalid_opacity_error.py +52 -0
  144. numdaplot/errors/invalid_point_size_error.py +52 -0
  145. numdaplot/errors/invalid_position_error.py +106 -0
  146. numdaplot/errors/invalid_resolution_error.py +51 -0
  147. numdaplot/errors/invalid_rotation_error.py +53 -0
  148. numdaplot/errors/invalid_seed_error.py +53 -0
  149. numdaplot/errors/invalid_separator_error.py +52 -0
  150. numdaplot/errors/invalid_shape_error.py +52 -0
  151. numdaplot/errors/invalid_sheet_name_error.py +54 -0
  152. numdaplot/errors/invalid_size_error.py +58 -0
  153. numdaplot/errors/invalid_step_error.py +77 -0
  154. numdaplot/errors/invalid_suffixes_error.py +61 -0
  155. numdaplot/errors/invalid_time_zone_change_error.py +63 -0
  156. numdaplot/errors/invalid_type_error.py +79 -0
  157. numdaplot/errors/irregular_list_error.py +36 -0
  158. numdaplot/errors/join_relation_error.py +183 -0
  159. numdaplot/errors/missing_dependency_error.py +58 -0
  160. numdaplot/errors/missing_type_error.py +36 -0
  161. numdaplot/errors/missing_value_error.py +62 -0
  162. numdaplot/errors/not_single_value_error.py +53 -0
  163. numdaplot/errors/numdaplot_error.py +25 -0
  164. numdaplot/errors/numdaplot_warning.py +34 -0
  165. numdaplot/errors/occupied_cell_error.py +63 -0
  166. numdaplot/errors/out_of_domain_error.py +70 -0
  167. numdaplot/errors/readability_warning.py +35 -0
  168. numdaplot/errors/refused_operation_error.py +64 -0
  169. numdaplot/errors/refused_setting_error.py +60 -0
  170. numdaplot/errors/rejected_dates.py +60 -0
  171. numdaplot/errors/repeated_key.py +36 -0
  172. numdaplot/errors/shape_mismatch_error.py +67 -0
  173. numdaplot/errors/time_overflow_error.py +131 -0
  174. numdaplot/errors/time_zone_mismatch_error.py +83 -0
  175. numdaplot/errors/unknown_time_zone_error.py +51 -0
  176. numdaplot/errors/unmatched_value_error.py +81 -0
  177. numdaplot/errors/unsupported_image_format_error.py +56 -0
  178. numdaplot/errors/unsupported_index_error.py +38 -0
  179. numdaplot/errors/unsupported_missing_error.py +129 -0
  180. numdaplot/errors/unsupported_type_error.py +62 -0
  181. numdaplot/errors/value_conversion_error.py +215 -0
  182. numdaplot/ordering/__init__.py +5 -0
  183. numdaplot/ordering/missing_position.py +46 -0
  184. numdaplot/ordering/order.py +46 -0
  185. numdaplot/package_version.py +36 -0
  186. numdaplot/plots/__init__.py +5 -0
  187. numdaplot/plots/chart_layer.py +47 -0
  188. numdaplot/plots/charts/__init__.py +5 -0
  189. numdaplot/plots/charts/bar_chart.py +98 -0
  190. numdaplot/plots/charts/bar_layout.py +58 -0
  191. numdaplot/plots/charts/bin_count.py +61 -0
  192. numdaplot/plots/charts/bin_width.py +78 -0
  193. numdaplot/plots/charts/box_chart.py +97 -0
  194. numdaplot/plots/charts/cell_values.py +61 -0
  195. numdaplot/plots/charts/chart.py +59 -0
  196. numdaplot/plots/charts/chart_settings.py +105 -0
  197. numdaplot/plots/charts/color_scale.py +147 -0
  198. numdaplot/plots/charts/heatmap_chart.py +92 -0
  199. numdaplot/plots/charts/histogram_chart.py +93 -0
  200. numdaplot/plots/charts/line_chart.py +100 -0
  201. numdaplot/plots/charts/line_type.py +75 -0
  202. numdaplot/plots/charts/marker_shape.py +113 -0
  203. numdaplot/plots/charts/missing_chart.py +60 -0
  204. numdaplot/plots/charts/missing_map_chart.py +27 -0
  205. numdaplot/plots/charts/orientation.py +58 -0
  206. numdaplot/plots/charts/outliers.py +49 -0
  207. numdaplot/plots/charts/percentages.py +55 -0
  208. numdaplot/plots/charts/pie_chart.py +87 -0
  209. numdaplot/plots/charts/scatter_chart.py +159 -0
  210. numdaplot/plots/charts/value_axis.py +66 -0
  211. numdaplot/plots/data/__init__.py +5 -0
  212. numdaplot/plots/data/array_values.py +128 -0
  213. numdaplot/plots/data/chart_data.py +143 -0
  214. numdaplot/plots/data/chart_values.py +109 -0
  215. numdaplot/plots/data/column_reading.py +468 -0
  216. numdaplot/plots/data/heatmap_values.py +63 -0
  217. numdaplot/plots/data/missing_cells.py +165 -0
  218. numdaplot/plots/data/pie_values.py +215 -0
  219. numdaplot/plots/data/point_values.py +249 -0
  220. numdaplot/plots/data/position_kind.py +83 -0
  221. numdaplot/plots/data/renamed_layers.py +340 -0
  222. numdaplot/plots/data/sample_values.py +160 -0
  223. numdaplot/plots/data/shown_columns.py +248 -0
  224. numdaplot/plots/data/table_values.py +256 -0
  225. numdaplot/plots/data/unique_labels.py +45 -0
  226. numdaplot/plots/drawing/__init__.py +5 -0
  227. numdaplot/plots/drawing/bar_drawing.py +316 -0
  228. numdaplot/plots/drawing/box_drawing.py +344 -0
  229. numdaplot/plots/drawing/cell_merging.py +237 -0
  230. numdaplot/plots/drawing/chart_texts.py +124 -0
  231. numdaplot/plots/drawing/color_bar.py +57 -0
  232. numdaplot/plots/drawing/color_scale_values.py +120 -0
  233. numdaplot/plots/drawing/default_labels.py +41 -0
  234. numdaplot/plots/drawing/drawn_chart.py +50 -0
  235. numdaplot/plots/drawing/grid_axes.py +75 -0
  236. numdaplot/plots/drawing/heatmap_drawing.py +313 -0
  237. numdaplot/plots/drawing/histogram_drawing.py +350 -0
  238. numdaplot/plots/drawing/label_room.py +344 -0
  239. numdaplot/plots/drawing/label_thinning.py +216 -0
  240. numdaplot/plots/drawing/layer_alignment.py +319 -0
  241. numdaplot/plots/drawing/layer_colors.py +123 -0
  242. numdaplot/plots/drawing/line_drawing.py +85 -0
  243. numdaplot/plots/drawing/marker_codes.py +20 -0
  244. numdaplot/plots/drawing/missing_drawing.py +360 -0
  245. numdaplot/plots/drawing/moment_period_formatter.py +253 -0
  246. numdaplot/plots/drawing/pie_drawing.py +185 -0
  247. numdaplot/plots/drawing/plot_axes.py +38 -0
  248. numdaplot/plots/drawing/plot_drawing.py +288 -0
  249. numdaplot/plots/drawing/plot_theme.py +45 -0
  250. numdaplot/plots/drawing/position_axis.py +278 -0
  251. numdaplot/plots/drawing/scatter_drawing.py +364 -0
  252. numdaplot/plots/drawing/series_colors.py +177 -0
  253. numdaplot/plots/drawing/size_inches.py +45 -0
  254. numdaplot/plots/drawing/style_drawing.py +410 -0
  255. numdaplot/plots/drawing/text_contrast.py +44 -0
  256. numdaplot/plots/drawing/tick_rotation.py +354 -0
  257. numdaplot/plots/drawing/time_axis.py +212 -0
  258. numdaplot/plots/drawing/whole_numbers.py +72 -0
  259. numdaplot/plots/figure/__init__.py +5 -0
  260. numdaplot/plots/figure/cell.py +95 -0
  261. numdaplot/plots/figure/figure.py +256 -0
  262. numdaplot/plots/figure/figure_drawing.py +99 -0
  263. numdaplot/plots/figure/figure_style.py +60 -0
  264. numdaplot/plots/figure/layout.py +71 -0
  265. numdaplot/plots/figure/placement.py +150 -0
  266. numdaplot/plots/layer_reading.py +166 -0
  267. numdaplot/plots/output/__init__.py +5 -0
  268. numdaplot/plots/output/image_saving.py +187 -0
  269. numdaplot/plots/output/plot_display.py +181 -0
  270. numdaplot/plots/output/shown_object.py +45 -0
  271. numdaplot/plots/overlay_checks.py +245 -0
  272. numdaplot/plots/plot.py +31 -0
  273. numdaplot/plots/plot_data.py +140 -0
  274. numdaplot/plots/plot_distribution_creation.py +237 -0
  275. numdaplot/plots/plot_output.py +124 -0
  276. numdaplot/plots/plot_overlays.py +273 -0
  277. numdaplot/plots/plot_overview_creation.py +195 -0
  278. numdaplot/plots/plot_series_creation.py +213 -0
  279. numdaplot/plots/style/__init__.py +5 -0
  280. numdaplot/plots/style/axis_settings.py +60 -0
  281. numdaplot/plots/style/color.py +168 -0
  282. numdaplot/plots/style/custom_color.py +65 -0
  283. numdaplot/plots/style/grid_lines.py +49 -0
  284. numdaplot/plots/style/image_options.py +71 -0
  285. numdaplot/plots/style/legend_position.py +149 -0
  286. numdaplot/plots/style/plot_style.py +136 -0
  287. numdaplot/plots/style/size.py +70 -0
  288. numdaplot/plots/style/size_unit.py +62 -0
  289. numdaplot/positions/__init__.py +5 -0
  290. numdaplot/positions/axis.py +54 -0
  291. numdaplot/positions/index.py +51 -0
  292. numdaplot/positions/range.py +90 -0
  293. numdaplot/positions/region.py +92 -0
  294. numdaplot/py.typed +0 -0
  295. numdaplot/ratios/__init__.py +5 -0
  296. numdaplot/ratios/fraction.py +40 -0
  297. numdaplot/ratios/measure.py +48 -0
  298. numdaplot/rules/__init__.py +5 -0
  299. numdaplot/rules/between.py +78 -0
  300. numdaplot/rules/bounds.py +83 -0
  301. numdaplot/rules/case.py +48 -0
  302. numdaplot/rules/contains.py +63 -0
  303. numdaplot/rules/equal.py +43 -0
  304. numdaplot/rules/greater.py +39 -0
  305. numdaplot/rules/greater_or_equal.py +38 -0
  306. numdaplot/rules/is_in.py +67 -0
  307. numdaplot/rules/is_missing.py +25 -0
  308. numdaplot/rules/is_present.py +25 -0
  309. numdaplot/rules/less.py +39 -0
  310. numdaplot/rules/less_or_equal.py +38 -0
  311. numdaplot/rules/not_equal.py +45 -0
  312. numdaplot/rules/rule.py +62 -0
  313. numdaplot/rules/rule_values.py +44 -0
  314. numdaplot/rules/value_rule.py +110 -0
  315. numdaplot/settings/__init__.py +5 -0
  316. numdaplot/settings/argument_types.py +327 -0
  317. numdaplot/settings/field_types.py +593 -0
  318. numdaplot/statistics/__init__.py +5 -0
  319. numdaplot/statistics/count.py +71 -0
  320. numdaplot/statistics/count_distinct.py +27 -0
  321. numdaplot/statistics/counted_missing.py +46 -0
  322. numdaplot/statistics/maximum.py +27 -0
  323. numdaplot/statistics/mean.py +27 -0
  324. numdaplot/statistics/median.py +27 -0
  325. numdaplot/statistics/minimum.py +27 -0
  326. numdaplot/statistics/most_frequent.py +27 -0
  327. numdaplot/statistics/most_frequent_count.py +27 -0
  328. numdaplot/statistics/quantile.py +61 -0
  329. numdaplot/statistics/standard_deviation.py +29 -0
  330. numdaplot/statistics/statistic.py +63 -0
  331. numdaplot/statistics/sum.py +27 -0
  332. numdaplot/tables/__init__.py +5 -0
  333. numdaplot/tables/aggregation/__init__.py +5 -0
  334. numdaplot/tables/aggregation/aggregated_frame.py +189 -0
  335. numdaplot/tables/aggregation/aggregation.py +97 -0
  336. numdaplot/tables/aggregation/calculation.py +123 -0
  337. numdaplot/tables/aggregation/result_column.py +108 -0
  338. numdaplot/tables/aggregation/row_groups.py +96 -0
  339. numdaplot/tables/aggregation/statistic_name.py +122 -0
  340. numdaplot/tables/columns/__init__.py +5 -0
  341. numdaplot/tables/columns/added_column.py +89 -0
  342. numdaplot/tables/columns/boolean_conversion.py +144 -0
  343. numdaplot/tables/columns/boolean_rule.py +59 -0
  344. numdaplot/tables/columns/bracket_end.py +50 -0
  345. numdaplot/tables/columns/bracket_names.py +346 -0
  346. numdaplot/tables/columns/bracketed_column.py +179 -0
  347. numdaplot/tables/columns/brackets.py +234 -0
  348. numdaplot/tables/columns/chosen_columns.py +55 -0
  349. numdaplot/tables/columns/column_choice.py +84 -0
  350. numdaplot/tables/columns/column_mode.py +64 -0
  351. numdaplot/tables/columns/column_names.py +186 -0
  352. numdaplot/tables/columns/conversion.py +103 -0
  353. numdaplot/tables/columns/converted_column.py +669 -0
  354. numdaplot/tables/columns/date_conversion.py +526 -0
  355. numdaplot/tables/columns/date_range.py +135 -0
  356. numdaplot/tables/columns/name_change.py +67 -0
  357. numdaplot/tables/columns/new_column.py +79 -0
  358. numdaplot/tables/columns/number_conversion.py +281 -0
  359. numdaplot/tables/columns/renamed_columns.py +60 -0
  360. numdaplot/tables/columns/renaming.py +81 -0
  361. numdaplot/tables/columns/text_conversion.py +70 -0
  362. numdaplot/tables/columns/time_conversion.py +313 -0
  363. numdaplot/tables/columns/time_zone_conversion.py +128 -0
  364. numdaplot/tables/conflict.py +68 -0
  365. numdaplot/tables/description/__init__.py +5 -0
  366. numdaplot/tables/description/described_frame.py +335 -0
  367. numdaplot/tables/description/description.py +155 -0
  368. numdaplot/tables/duplicates/__init__.py +5 -0
  369. numdaplot/tables/duplicates/deduplicated_frame.py +66 -0
  370. numdaplot/tables/duplicates/deduplication.py +88 -0
  371. numdaplot/tables/duplicates/keep.py +81 -0
  372. numdaplot/tables/files/__init__.py +5 -0
  373. numdaplot/tables/files/column_names.py +60 -0
  374. numdaplot/tables/files/csv_file.py +265 -0
  375. numdaplot/tables/files/csv_read_options.py +89 -0
  376. numdaplot/tables/files/csv_separator.py +41 -0
  377. numdaplot/tables/files/csv_write_options.py +79 -0
  378. numdaplot/tables/files/decimal_count.py +42 -0
  379. numdaplot/tables/files/encoding.py +82 -0
  380. numdaplot/tables/files/excel_file.py +171 -0
  381. numdaplot/tables/files/excel_read_options.py +79 -0
  382. numdaplot/tables/files/excel_sheet.py +50 -0
  383. numdaplot/tables/files/excel_time_cells.py +146 -0
  384. numdaplot/tables/files/excel_write_options.py +63 -0
  385. numdaplot/tables/files/file_access.py +152 -0
  386. numdaplot/tables/files/file_paths.py +106 -0
  387. numdaplot/tables/files/json_decimals.py +387 -0
  388. numdaplot/tables/files/json_file.py +203 -0
  389. numdaplot/tables/files/json_layout.py +63 -0
  390. numdaplot/tables/files/json_read_options.py +64 -0
  391. numdaplot/tables/files/json_write_options.py +71 -0
  392. numdaplot/tables/files/missing_texts.py +63 -0
  393. numdaplot/tables/files/optional_package.py +42 -0
  394. numdaplot/tables/files/pandas_backend.py +11 -0
  395. numdaplot/tables/files/parquet_file.py +91 -0
  396. numdaplot/tables/files/parquet_read_options.py +56 -0
  397. numdaplot/tables/files/sas_file.py +94 -0
  398. numdaplot/tables/files/sas_read_options.py +67 -0
  399. numdaplot/tables/files/stata_file.py +83 -0
  400. numdaplot/tables/files/stata_read_options.py +56 -0
  401. numdaplot/tables/files/xpt_read_options.py +65 -0
  402. numdaplot/tables/filtering/__init__.py +5 -0
  403. numdaplot/tables/filtering/checked_frame.py +60 -0
  404. numdaplot/tables/filtering/column_mask.py +71 -0
  405. numdaplot/tables/filtering/column_match.py +62 -0
  406. numdaplot/tables/filtering/condition.py +94 -0
  407. numdaplot/tables/filtering/filter.py +74 -0
  408. numdaplot/tables/filtering/filter_mode.py +67 -0
  409. numdaplot/tables/filtering/row_mask.py +152 -0
  410. numdaplot/tables/filtering/rule_moments.py +164 -0
  411. numdaplot/tables/frames/__init__.py +5 -0
  412. numdaplot/tables/frames/array_frame.py +95 -0
  413. numdaplot/tables/frames/cleaned_names.py +132 -0
  414. numdaplot/tables/frames/column.py +15 -0
  415. numdaplot/tables/frames/column_values.py +273 -0
  416. numdaplot/tables/frames/frame_equality.py +130 -0
  417. numdaplot/tables/frames/frame_normalization.py +459 -0
  418. numdaplot/tables/frames/named_column_errors.py +85 -0
  419. numdaplot/tables/frames/pandas_decimals.py +113 -0
  420. numdaplot/tables/frames/region_positions.py +113 -0
  421. numdaplot/tables/frames/table_text.py +222 -0
  422. numdaplot/tables/frames/time_columns.py +345 -0
  423. numdaplot/tables/frames/time_range_errors.py +117 -0
  424. numdaplot/tables/frames/time_zones.py +271 -0
  425. numdaplot/tables/joining/__init__.py +5 -0
  426. numdaplot/tables/joining/join.py +110 -0
  427. numdaplot/tables/joining/join_keys.py +367 -0
  428. numdaplot/tables/joining/join_mode.py +93 -0
  429. numdaplot/tables/joining/join_relation.py +149 -0
  430. numdaplot/tables/joining/join_suffixes.py +71 -0
  431. numdaplot/tables/joining/joined_frame.py +166 -0
  432. numdaplot/tables/joining/joined_names.py +107 -0
  433. numdaplot/tables/joining/joined_rows.py +235 -0
  434. numdaplot/tables/joining/key_types.py +57 -0
  435. numdaplot/tables/joining/relation.py +78 -0
  436. numdaplot/tables/missing/__init__.py +5 -0
  437. numdaplot/tables/missing/missing_count.py +59 -0
  438. numdaplot/tables/missing/missing_counts.py +214 -0
  439. numdaplot/tables/missing/missing_drop.py +98 -0
  440. numdaplot/tables/missing/missing_mode.py +63 -0
  441. numdaplot/tables/missing/missing_ratio.py +71 -0
  442. numdaplot/tables/missing/missing_removal.py +257 -0
  443. numdaplot/tables/missing/missing_summary.py +174 -0
  444. numdaplot/tables/missing/ratio_comparison.py +70 -0
  445. numdaplot/tables/pivot/__init__.py +5 -0
  446. numdaplot/tables/pivot/pivot_table.py +104 -0
  447. numdaplot/tables/pivot/pivoted_frame.py +244 -0
  448. numdaplot/tables/preview/__init__.py +5 -0
  449. numdaplot/tables/preview/notebook_display.py +238 -0
  450. numdaplot/tables/preview/preview.py +100 -0
  451. numdaplot/tables/preview/preview_rows.py +55 -0
  452. numdaplot/tables/preview/shown_columns.py +62 -0
  453. numdaplot/tables/preview/side.py +82 -0
  454. numdaplot/tables/sorting/__init__.py +5 -0
  455. numdaplot/tables/sorting/sort_key.py +71 -0
  456. numdaplot/tables/sorting/sorted_frame.py +81 -0
  457. numdaplot/tables/sorting/sorting.py +82 -0
  458. numdaplot/tables/table.py +71 -0
  459. numdaplot/tables/table_calculation.py +172 -0
  460. numdaplot/tables/table_columns.py +214 -0
  461. numdaplot/tables/table_conversion.py +351 -0
  462. numdaplot/tables/table_data.py +321 -0
  463. numdaplot/tables/table_display.py +56 -0
  464. numdaplot/tables/table_joining.py +80 -0
  465. numdaplot/tables/table_layout.py +105 -0
  466. numdaplot/tables/table_missing.py +146 -0
  467. numdaplot/tables/table_reading.py +451 -0
  468. numdaplot/tables/table_refusals.py +295 -0
  469. numdaplot/tables/table_selection.py +163 -0
  470. numdaplot/tables/table_writing.py +269 -0
  471. numdaplot-0.1.0.dist-info/METADATA +176 -0
  472. numdaplot-0.1.0.dist-info/RECORD +474 -0
  473. numdaplot-0.1.0.dist-info/WHEEL +4 -0
  474. numdaplot-0.1.0.dist-info/licenses/LICENSE +28 -0
@@ -0,0 +1,451 @@
1
+ """
2
+ Creation of a Table from a file.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from pathlib import Path
8
+ from typing import Self
9
+
10
+ from numdaplot.settings.argument_types import checked_arguments
11
+ from numdaplot.tables.files.csv_file import read_csv_file
12
+ from numdaplot.tables.files.csv_read_options import CsvReadOptions
13
+ from numdaplot.tables.files.excel_file import read_excel_file
14
+ from numdaplot.tables.files.excel_read_options import ExcelReadOptions
15
+ from numdaplot.tables.files.file_access import READ_OPERATION, FileAccessErrors
16
+ from numdaplot.tables.files.file_paths import FilePath, require_existing_file
17
+ from numdaplot.tables.files.json_file import read_json_file
18
+ from numdaplot.tables.files.json_read_options import JsonReadOptions
19
+ from numdaplot.tables.files.parquet_file import read_parquet_file
20
+ from numdaplot.tables.files.parquet_read_options import ParquetReadOptions
21
+ from numdaplot.tables.files.sas_file import read_sas_file, read_xpt_file
22
+ from numdaplot.tables.files.sas_read_options import SasReadOptions
23
+ from numdaplot.tables.files.stata_file import read_stata_file
24
+ from numdaplot.tables.files.stata_read_options import StataReadOptions
25
+ from numdaplot.tables.files.xpt_read_options import XptReadOptions
26
+ from numdaplot.tables.table_data import TableData
27
+
28
+
29
+ class TableReading(TableData):
30
+ """
31
+ Creation of a Table from a CSV, JSON, Excel, Parquet, Stata, SAS or XPT file.
32
+
33
+ Integers become ``INT64``, decimals ``FLOAT64`` and true or false values ``BOOL``. Any other column of a CSV
34
+ or JSON file becomes ``TEXT``, dates included: convert them afterwards. Empty cells and the usual markers
35
+ such as ``NA`` or ``null`` are read as missing values; ``missing_texts`` of ``CsvReadOptions`` and
36
+ ``ExcelReadOptions`` chooses other ones.
37
+
38
+ .. versionadded:: 0.1.0
39
+ """
40
+
41
+ @classmethod
42
+ @checked_arguments
43
+ def from_csv(cls, path: FilePath, options: CsvReadOptions | None = None) -> Self:
44
+ r"""
45
+ Return a Table read from a CSV file whose first row holds the column names.
46
+
47
+ Each column takes the type of all its values, even in a long file: a column mixing numbers and texts is read
48
+ as texts written as in the file, such as ``01``.
49
+
50
+ .. versionadded:: 0.1.0
51
+
52
+ Parameters
53
+ ----------
54
+ path
55
+ The path of the file, a ``FilePath`` such as ``"sales.csv"`` or ``Path("data/sales.csv")``.
56
+ options
57
+ The separator and the encoding, ``","`` and UTF-8 when omitted.
58
+
59
+ Returns
60
+ -------
61
+ Self
62
+ A new Table, empty for an empty file.
63
+
64
+ Raises
65
+ ------
66
+ InvalidTypeError
67
+ When an argument is not of the type its annotation names.
68
+ FileNotFoundError
69
+ When there is no file at the path.
70
+ FileAccessError
71
+ When the file system refuses the file, for a missing permission for example.
72
+ InvalidColumnNameError, DuplicateColumnError
73
+ When a column name is empty, even once cleaned, or appears twice, or two names become the same once
74
+ cleaned.
75
+
76
+ Examples
77
+ --------
78
+ >>> import tempfile
79
+ >>> from pathlib import Path
80
+ >>> import numdaplot as ndp
81
+ >>> path = Path(tempfile.mkdtemp()) / "sales.csv"
82
+ >>> _ = path.write_text("city;price\nParis;1.5\nLyon;\n")
83
+ >>> ndp.Table.from_csv(path, ndp.CsvReadOptions(separator=";"))
84
+ city price
85
+ TEXT FLOAT64
86
+ 0 Paris 1.5
87
+ 1 Lyon NaN
88
+ """
89
+ if options is None:
90
+ options = CsvReadOptions()
91
+
92
+ file_path = Path(path)
93
+ require_existing_file(file_path)
94
+ with FileAccessErrors(READ_OPERATION, file_path):
95
+ frame = read_csv_file(file_path, options)
96
+
97
+ table = cls._from_read_frame(frame, options.column_names)
98
+
99
+ return table
100
+
101
+ @classmethod
102
+ @checked_arguments
103
+ def from_json(cls, path: FilePath, options: JsonReadOptions | None = None) -> Self:
104
+ r"""
105
+ Return a Table read from a JSON file in UTF-8 holding one object per row.
106
+
107
+ Each column takes the type of its JSON values: a text that looks like a number or a date stays a text.
108
+
109
+ .. versionadded:: 0.1.0
110
+
111
+ Parameters
112
+ ----------
113
+ path
114
+ The path of the file, a ``FilePath`` such as ``"sales.json"`` or ``Path("data/sales.json")``.
115
+ options
116
+ The layout of the rows, one list of objects when omitted.
117
+
118
+ Returns
119
+ -------
120
+ Self
121
+ A new Table, with one column per name found in the objects.
122
+
123
+ Raises
124
+ ------
125
+ InvalidTypeError
126
+ When an argument is not of the type its annotation names.
127
+ FileNotFoundError
128
+ When there is no file at the path.
129
+ FileAccessError
130
+ When the file system refuses the file, for a missing permission for example.
131
+ InvalidColumnNameError, DuplicateColumnError
132
+ When a column name is empty, even once cleaned, or two names become the same once cleaned.
133
+
134
+ Examples
135
+ --------
136
+ >>> import tempfile
137
+ >>> from pathlib import Path
138
+ >>> import numdaplot as ndp
139
+ >>> path = Path(tempfile.mkdtemp()) / "sales.jsonl"
140
+ >>> _ = path.write_text('{"city": "Paris", "count": 2}\n{"city": "Lyon", "count": null}\n')
141
+ >>> ndp.Table.from_json(path, ndp.JsonReadOptions(layout=ndp.JsonLayout.LINES))
142
+ city count
143
+ TEXT INT64
144
+ 0 Paris 2
145
+ 1 Lyon <NA>
146
+ """
147
+ file_path = Path(path)
148
+ require_existing_file(file_path)
149
+ if options is None:
150
+ options = JsonReadOptions()
151
+
152
+ with FileAccessErrors(READ_OPERATION, file_path):
153
+ frame = read_json_file(file_path, options)
154
+
155
+ table = cls._from_read_frame(frame, options.column_names)
156
+
157
+ return table
158
+
159
+ @classmethod
160
+ @checked_arguments
161
+ def from_excel(cls, path: FilePath, options: ExcelReadOptions | None = None) -> Self:
162
+ """
163
+ Return a Table read from a sheet of an Excel file whose first row holds the column names.
164
+
165
+ Needs the ``excel`` extra: ``pip install numdaplot[excel]``.
166
+
167
+ .. versionadded:: 0.1.0
168
+
169
+ Parameters
170
+ ----------
171
+ path
172
+ The path of the file, a ``FilePath`` such as ``"sales.xlsx"`` or ``Path("data/sales.xlsx")``.
173
+ options
174
+ The sheet to read, the first one when omitted.
175
+
176
+ Returns
177
+ -------
178
+ Self
179
+ A new Table. Dates of the sheet become ``DATETIME`` columns. A column of time cells only, such as
180
+ ``hh:mm``, becomes ``TIME``, and a column of duration cells only, such as ``[h]:mm``, ``DURATION``: a
181
+ column mixing them with texts stays ``TEXT``.
182
+
183
+ Raises
184
+ ------
185
+ InvalidTypeError
186
+ When an argument is not of the type its annotation names.
187
+ FileNotFoundError
188
+ When there is no file at the path.
189
+ FileAccessError
190
+ When the file system refuses the file, for a missing permission for example.
191
+ MissingDependencyError
192
+ When the ``excel`` extra is not installed.
193
+ InvalidColumnNameError, DuplicateColumnError
194
+ When a cell of the first row is empty, even once cleaned, is not a text, or repeats another one, or two
195
+ names become the same once cleaned.
196
+ TimeOverflowError
197
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
198
+
199
+ Examples
200
+ --------
201
+ >>> import tempfile
202
+ >>> from pathlib import Path
203
+ >>> import numdaplot as ndp
204
+ >>> path = Path(tempfile.mkdtemp()) / "sales.xlsx"
205
+ >>> ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5])}).to_excel(path)
206
+ >>> ndp.Table.from_excel(path).column_types
207
+ {'price': <Type.FLOAT64: 10>}
208
+ """
209
+ file_path = Path(path)
210
+ require_existing_file(file_path)
211
+ if options is None:
212
+ options = ExcelReadOptions()
213
+
214
+ with FileAccessErrors(READ_OPERATION, file_path):
215
+ frame = read_excel_file(file_path, options)
216
+
217
+ table = cls._from_read_frame(frame, options.column_names)
218
+
219
+ return table
220
+
221
+ @classmethod
222
+ @checked_arguments
223
+ def from_parquet(cls, path: FilePath, options: ParquetReadOptions | None = None) -> Self:
224
+ """
225
+ Return a Table read from a Parquet file.
226
+
227
+ Needs the ``parquet`` extra: ``pip install numdaplot[parquet]``.
228
+
229
+ .. versionadded:: 0.1.0
230
+
231
+ Parameters
232
+ ----------
233
+ path
234
+ The path of the file, a ``FilePath`` such as ``"sales.parquet"`` or ``Path("data/sales.parquet")``.
235
+ options
236
+ Whether the column names are cleaned, cleaned when omitted.
237
+
238
+ Returns
239
+ -------
240
+ Self
241
+ A new Table, with the types stored in the file.
242
+
243
+ Raises
244
+ ------
245
+ InvalidTypeError
246
+ When an argument is not of the type its annotation names.
247
+ FileNotFoundError
248
+ When there is no file at the path.
249
+ FileAccessError
250
+ When the file system refuses the file, for a missing permission for example.
251
+ MissingDependencyError
252
+ When the ``parquet`` extra is not installed.
253
+ TimeOverflowError
254
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
255
+ DuplicateColumnError
256
+ When two column names become the same once cleaned.
257
+
258
+ Examples
259
+ --------
260
+ >>> import tempfile
261
+ >>> from pathlib import Path
262
+ >>> import numdaplot as ndp
263
+ >>> path = Path(tempfile.mkdtemp()) / "sales.parquet"
264
+ >>> ndp.Table.from_arrays({"count": ndp.Array.from_list([3])}).to_parquet(path)
265
+ >>> ndp.Table.from_parquet(path).column_types
266
+ {'count': <Type.INT64: 4>}
267
+ """
268
+ if options is None:
269
+ options = ParquetReadOptions()
270
+
271
+ file_path = Path(path)
272
+ require_existing_file(file_path)
273
+ with FileAccessErrors(READ_OPERATION, file_path):
274
+ frame = read_parquet_file(file_path)
275
+
276
+ table = cls._from_read_frame(frame, options.column_names)
277
+
278
+ return table
279
+
280
+ @classmethod
281
+ @checked_arguments
282
+ def from_stata(cls, path: FilePath, options: StataReadOptions | None = None) -> Self:
283
+ """
284
+ Return a Table read from a Stata file (``.dta``).
285
+
286
+ .. versionadded:: 0.1.0
287
+
288
+ Parameters
289
+ ----------
290
+ path
291
+ The path of the file, a ``FilePath`` such as ``"sales.dta"`` or ``Path("data/sales.dta")``.
292
+ options
293
+ Whether the column names are cleaned, cleaned when omitted.
294
+
295
+ Returns
296
+ -------
297
+ Self
298
+ A new Table, with the types stored in the file.
299
+
300
+ Raises
301
+ ------
302
+ InvalidTypeError
303
+ When an argument is not of the type its annotation names.
304
+ FileNotFoundError
305
+ When there is no file at the path.
306
+ FileAccessError
307
+ When the file system refuses the file, for a missing permission for example.
308
+ TimeOverflowError
309
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
310
+ DuplicateColumnError
311
+ When two column names become the same once cleaned.
312
+
313
+ Examples
314
+ --------
315
+ >>> import tempfile
316
+ >>> from pathlib import Path
317
+ >>> import numdaplot as ndp
318
+ >>> path = Path(tempfile.mkdtemp()) / "sales.dta"
319
+ >>> ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5])}).to_stata(path)
320
+ >>> ndp.Table.from_stata(path).column_types
321
+ {'price': <Type.FLOAT64: 10>}
322
+ """
323
+ if options is None:
324
+ options = StataReadOptions()
325
+
326
+ file_path = Path(path)
327
+ require_existing_file(file_path)
328
+ with FileAccessErrors(READ_OPERATION, file_path):
329
+ frame = read_stata_file(file_path)
330
+
331
+ table = cls._from_read_frame(frame, options.column_names)
332
+
333
+ return table
334
+
335
+ @classmethod
336
+ @checked_arguments
337
+ def from_sas(cls, path: FilePath, options: SasReadOptions | None = None) -> Self:
338
+ """
339
+ Return a Table read from a SAS data file (``.sas7bdat``). numdaplot does not write this format.
340
+
341
+ The example reads
342
+ [airline.sas7bdat](https://github.com/Ryieru/numdaplot/blob/main/tests/data/airline.sas7bdat),
343
+ a SAS data file of 32 rows.
344
+
345
+ .. versionadded:: 0.1.0
346
+
347
+ Parameters
348
+ ----------
349
+ path
350
+ The path of the file, a ``FilePath`` such as ``"sales.sas7bdat"`` or ``Path("data/sales.sas7bdat")``.
351
+ options
352
+ The encoding of the texts, UTF-8 when omitted.
353
+
354
+ Returns
355
+ -------
356
+ Self
357
+ A new Table. SAS stores every number as a decimal, so numbers become ``FLOAT64``.
358
+
359
+ Raises
360
+ ------
361
+ InvalidTypeError
362
+ When an argument is not of the type its annotation names.
363
+ FileNotFoundError
364
+ When there is no file at the path.
365
+ FileAccessError
366
+ When the file system refuses the file, for a missing permission for example.
367
+ TimeOverflowError
368
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
369
+ DuplicateColumnError
370
+ When two column names become the same once cleaned.
371
+
372
+ Examples
373
+ --------
374
+ >>> import numdaplot as ndp
375
+ >>> airline = ndp.Table.from_sas("airline.sas7bdat")
376
+ >>> airline.preview(ndp.Preview(count=3))
377
+ YEAR Y W R L K
378
+ FLOAT64 FLOAT64 FLOAT64 FLOAT64 FLOAT64 FLOAT64
379
+ 0 1948.0 1.214 0.243 0.1454 1.415 0.612
380
+ 1 1949.0 1.354 0.260 0.2181 1.384 0.559
381
+ 2 1950.0 1.569 0.278 0.3157 1.388 0.573
382
+ """
383
+ file_path = Path(path)
384
+ require_existing_file(file_path)
385
+ if options is None:
386
+ options = SasReadOptions()
387
+
388
+ with FileAccessErrors(READ_OPERATION, file_path):
389
+ frame = read_sas_file(file_path, options)
390
+
391
+ table = cls._from_read_frame(frame, options.column_names)
392
+
393
+ return table
394
+
395
+ @classmethod
396
+ @checked_arguments
397
+ def from_xpt(cls, path: FilePath, options: XptReadOptions | None = None) -> Self:
398
+ """
399
+ Return a Table read from a SAS transport file (``.xpt``). numdaplot does not write this format.
400
+
401
+ The example reads
402
+ [paxraw_d_short.xpt](https://github.com/Ryieru/numdaplot/blob/main/tests/data/paxraw_d_short.xpt),
403
+ a SAS transport file of 100 rows.
404
+
405
+ .. versionadded:: 0.1.0
406
+
407
+ Parameters
408
+ ----------
409
+ path
410
+ The path of the file, a ``FilePath`` such as ``"sales.xpt"`` or ``Path("data/sales.xpt")``.
411
+ options
412
+ The encoding of the texts, UTF-8 when omitted.
413
+
414
+ Returns
415
+ -------
416
+ Self
417
+ A new Table. SAS stores every number as a decimal, so numbers become ``FLOAT64``.
418
+
419
+ Raises
420
+ ------
421
+ InvalidTypeError
422
+ When an argument is not of the type its annotation names.
423
+ FileNotFoundError
424
+ When there is no file at the path.
425
+ FileAccessError
426
+ When the file system refuses the file, for a missing permission for example.
427
+ TimeOverflowError
428
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
429
+ DuplicateColumnError
430
+ When two column names become the same once cleaned.
431
+
432
+ Examples
433
+ --------
434
+ >>> import numdaplot as ndp
435
+ >>> activity = ndp.Table.from_xpt("paxraw_d_short.xpt")
436
+ >>> activity.row_count
437
+ 100
438
+ >>> activity.column_names
439
+ ['SEQN', 'PAXSTAT', 'PAXCAL', 'PAXDAY', 'PAXN', 'PAXHOUR', 'PAXMINUT', 'PAXINTEN', 'PAXSTEP']
440
+ """
441
+ file_path = Path(path)
442
+ require_existing_file(file_path)
443
+ if options is None:
444
+ options = XptReadOptions()
445
+
446
+ with FileAccessErrors(READ_OPERATION, file_path):
447
+ frame = read_xpt_file(file_path, options)
448
+
449
+ table = cls._from_read_frame(frame, options.column_names)
450
+
451
+ return table