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,147 @@
1
+ """
2
+ Color scales of a HeatmapChart and of a ScatterChart.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from enum import Enum, auto
8
+
9
+
10
+ class ColorScale(Enum):
11
+ """
12
+ Color scales of a ``HeatmapChart`` and of a ``ScatterChart``, from the smallest value to the largest one.
13
+
14
+ .. versionadded:: 0.1.0
15
+
16
+ Examples
17
+ --------
18
+ >>> import numdaplot as ndp
19
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
20
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
21
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
22
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
23
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
24
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.BLUES)
25
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
26
+ >>> plot.show()
27
+ """
28
+
29
+ VIRIDIS = auto()
30
+ """
31
+ From dark purple for the smallest values to yellow for the largest. Default value.
32
+
33
+ Examples
34
+ --------
35
+ >>> import numdaplot as ndp
36
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
37
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
38
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
39
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
40
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
41
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.VIRIDIS)
42
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
43
+ >>> plot.show()
44
+ """
45
+
46
+ BLUES = auto()
47
+ """
48
+ From white for the smallest values to dark blue for the largest.
49
+
50
+ Examples
51
+ --------
52
+ >>> import numdaplot as ndp
53
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
54
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
55
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
56
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
57
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
58
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.BLUES)
59
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
60
+ >>> plot.show()
61
+ """
62
+
63
+ REDS = auto()
64
+ """
65
+ From white for the smallest values to dark red for the largest.
66
+
67
+ Examples
68
+ --------
69
+ >>> import numdaplot as ndp
70
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
71
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
72
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
73
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
74
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
75
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.REDS)
76
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
77
+ >>> plot.show()
78
+ """
79
+
80
+ RED_BLUE = auto()
81
+ """
82
+ From blue for the smallest values to red for the largest, through white. When the values are on both
83
+ sides of 0, the scale is centered on 0, so white means 0.
84
+
85
+ Examples
86
+ --------
87
+ >>> import numdaplot as ndp
88
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
89
+ >>> january = ndp.Array.from_list([1.5, -2.0, 0.5])
90
+ >>> february = ndp.Array.from_list([-0.5, 1.0, 2.5])
91
+ >>> march = ndp.Array.from_list([-3.0, 0.5, 1.0])
92
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
93
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.RED_BLUE)
94
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
95
+ >>> plot.show()
96
+ """
97
+
98
+ GREENS = auto()
99
+ """
100
+ From white for the smallest values to dark green for the largest.
101
+
102
+ Examples
103
+ --------
104
+ >>> import numdaplot as ndp
105
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
106
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
107
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
108
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
109
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
110
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.GREENS)
111
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
112
+ >>> plot.show()
113
+ """
114
+
115
+ GRAYS = auto()
116
+ """
117
+ From white for the smallest values to black for the largest, for a printing in black and white.
118
+
119
+ Examples
120
+ --------
121
+ >>> import numdaplot as ndp
122
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
123
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
124
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
125
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
126
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
127
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.GRAYS)
128
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
129
+ >>> plot.show()
130
+ """
131
+
132
+ CIVIDIS = auto()
133
+ """
134
+ From dark blue for the smallest values to yellow for the largest, readable with most forms of color blindness.
135
+
136
+ Examples
137
+ --------
138
+ >>> import numdaplot as ndp
139
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
140
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
141
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
142
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
143
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
144
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", scale=ndp.ColorScale.CIVIDIS)
145
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
146
+ >>> plot.show()
147
+ """
@@ -0,0 +1,92 @@
1
+ """
2
+ Chart coloring each value of a grid of numbers.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from dataclasses import dataclass
8
+
9
+ from numdaplot.plots.charts.cell_values import CellValues
10
+ from numdaplot.plots.charts.chart import Chart
11
+ from numdaplot.plots.charts.chart_settings import copy_columns
12
+ from numdaplot.plots.charts.color_scale import ColorScale
13
+ from numdaplot.settings.field_types import require_field_types
14
+ from numdaplot.tables.columns.column_names import require_optional_column_name
15
+
16
+
17
+ @dataclass(frozen=True)
18
+ class HeatmapChart(Chart):
19
+ """
20
+ Chart drawing each value as a cell colored along a color scale, used by ``Plot.heatmap``.
21
+
22
+ The columns are side by side and the rows go down from the first one. A color bar next to the cells shows
23
+ the scale. A missing value leaves its cell light gray.
24
+
25
+ .. versionadded:: 0.1.0
26
+
27
+ Parameters
28
+ ----------
29
+ columns
30
+ For a Table, the columns drawn, holding numbers. A Table needs it, even for a single column. An Array of one or
31
+ two dimensions takes none: when omitted, each of its columns is drawn.
32
+ labels
33
+ For a Table, the column labeling the rows: numbers, dates, datetimes, times of day (labeled ``HH:MM``), texts or
34
+ booleans, the row numbers when omitted. A row whose label text is missing is left out. An Array takes none, its
35
+ rows being numbered.
36
+ scale
37
+ The colors of the cells, ``ColorScale.VIRIDIS`` by default.
38
+ values
39
+ Whether each cell shows its value, ``CellValues.HIDDEN`` by default.
40
+
41
+ Raises
42
+ ------
43
+ InvalidTypeError
44
+ When a setting is not of the type its annotation names.
45
+ InvalidColumnNameError
46
+ When ``labels`` or a name in ``columns`` is an empty text.
47
+ EmptyListError
48
+ When ``columns`` is an empty list.
49
+ DuplicateColumnError
50
+ When a column name appears twice in ``columns``.
51
+
52
+ Examples
53
+ --------
54
+ >>> import numdaplot as ndp
55
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
56
+ >>> january = ndp.Array.from_list([5.5, 3.0, 8.0])
57
+ >>> february = ndp.Array.from_list([6.0, 4.5, 9.0])
58
+ >>> march = ndp.Array.from_list([9.5, 8.0, 11.5])
59
+ >>> temperatures = ndp.Table.from_arrays({"city": cities, "jan": january, "feb": february, "mar": march})
60
+ >>> chart = ndp.HeatmapChart(columns=["jan", "feb", "mar"], labels="city", values=ndp.CellValues.SHOWN)
61
+ >>> plot = ndp.Plot.heatmap(temperatures, chart)
62
+ >>> plot.show()
63
+ """
64
+
65
+ columns: list[str] | None = None
66
+ labels: str | None = None
67
+ scale: ColorScale = ColorScale.VIRIDIS
68
+ values: CellValues = CellValues.HIDDEN
69
+
70
+ def __post_init__(self) -> None:
71
+ """
72
+ Check the columns and replace them with a copy that only the chart holds.
73
+
74
+ .. versionadded:: 0.1.0
75
+
76
+ Raises
77
+ ------
78
+ InvalidTypeError
79
+ When a setting is not of the type its annotation names.
80
+ InvalidColumnNameError
81
+ When ``labels`` or a name in ``columns`` is an empty text.
82
+ EmptyListError
83
+ When ``columns`` is an empty list.
84
+ DuplicateColumnError
85
+ When a column name appears twice in ``columns``.
86
+ """
87
+ require_field_types(self)
88
+
89
+ require_optional_column_name(self.labels)
90
+
91
+ columns_copy = copy_columns(self.columns)
92
+ object.__setattr__(self, "columns", columns_copy)
@@ -0,0 +1,93 @@
1
+ """
2
+ Chart counting the values of each bin.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from collections.abc import Sequence
8
+ from dataclasses import dataclass
9
+
10
+ from numdaplot.plots.charts.bin_count import BinCount
11
+ from numdaplot.plots.charts.bin_width import BinWidth
12
+ from numdaplot.plots.charts.chart import Chart
13
+ from numdaplot.plots.charts.chart_settings import copy_colors, copy_columns
14
+ from numdaplot.plots.style.color import Color
15
+ from numdaplot.plots.style.custom_color import CustomColor
16
+ from numdaplot.ratios.measure import Measure
17
+ from numdaplot.settings.field_types import require_field_types
18
+
19
+
20
+ @dataclass(frozen=True)
21
+ class HistogramChart(Chart):
22
+ """
23
+ Chart drawing how many values of each column fall in each bin, used by ``Plot.histogram``.
24
+
25
+ Several columns share the same bins and are drawn over each other, half transparent. Missing values are
26
+ left out.
27
+
28
+ .. versionadded:: 0.1.0
29
+
30
+ Parameters
31
+ ----------
32
+ columns
33
+ For a Table, the columns drawn, holding numbers or times of day, not both. A Table needs it, even for a
34
+ single column. An Array takes none: when omitted, each of its columns is drawn.
35
+ bins
36
+ The bins, ``BinCount(10)`` for numbers and one bin per hour from 00:00 to 24:00 for times of day when
37
+ omitted, or ``BinWidth`` for bins of a given width: a number for numbers, a duration for times of day.
38
+ measure
39
+ ``Measure.COUNT`` by default for the number of values of each bin, ``Measure.RATIO`` for their share
40
+ of the values of the column.
41
+ colors
42
+ One color per column, the colors of the default cycle when omitted. The chart keeps its own list.
43
+
44
+ Raises
45
+ ------
46
+ InvalidTypeError
47
+ When a setting is not of the type its annotation names.
48
+ InvalidColumnNameError
49
+ When a name in ``columns`` is an empty text.
50
+ EmptyListError
51
+ When ``columns`` or ``colors`` is an empty list.
52
+ DuplicateColumnError
53
+ When a column name appears twice in ``columns``.
54
+
55
+ Examples
56
+ --------
57
+ >>> import numdaplot as ndp
58
+ >>> prices_2025 = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0, 13.5, 16.0, 14.5, 15.0])
59
+ >>> prices_2026 = ndp.Array.from_list([14.0, 17.5, 16.0, 19.0, 15.5, 18.0, 16.5, 17.0])
60
+ >>> prices = ndp.Table.from_arrays({"2025": prices_2025, "2026": prices_2026})
61
+ >>> chart = ndp.HistogramChart(columns=["2025", "2026"], bins=ndp.BinWidth(1.0))
62
+ >>> plot = ndp.Plot.histogram(prices, chart)
63
+ >>> plot.show()
64
+ """
65
+
66
+ columns: list[str] | None = None
67
+ bins: BinCount | BinWidth | None = None
68
+ measure: Measure = Measure.COUNT
69
+ colors: Sequence[Color | CustomColor] | None = None
70
+
71
+ def __post_init__(self) -> None:
72
+ """
73
+ Check the columns and the colors and replace them with copies that only the chart holds.
74
+
75
+ .. versionadded:: 0.1.0
76
+
77
+ Raises
78
+ ------
79
+ InvalidTypeError
80
+ When a setting is not of the type its annotation names.
81
+ InvalidColumnNameError
82
+ When a name in ``columns`` is an empty text.
83
+ EmptyListError
84
+ When ``columns`` or ``colors`` is an empty list.
85
+ DuplicateColumnError
86
+ When a column name appears twice in ``columns``.
87
+ """
88
+ require_field_types(self)
89
+
90
+ columns_copy = copy_columns(self.columns)
91
+ colors_copy = copy_colors(self.colors)
92
+ object.__setattr__(self, "columns", columns_copy)
93
+ object.__setattr__(self, "colors", colors_copy)
@@ -0,0 +1,100 @@
1
+ """
2
+ Chart drawing each series as a line.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from collections.abc import Sequence
8
+ from dataclasses import dataclass
9
+
10
+ from numdaplot.plots.charts.chart import Chart
11
+ from numdaplot.plots.charts.chart_settings import copy_colors, copy_columns
12
+ from numdaplot.plots.charts.line_type import LineType
13
+ from numdaplot.plots.charts.marker_shape import MarkerShape
14
+ from numdaplot.plots.style.color import Color
15
+ from numdaplot.plots.style.custom_color import CustomColor
16
+ from numdaplot.settings.field_types import require_field_types
17
+ from numdaplot.tables.columns.column_names import require_optional_column_name
18
+
19
+
20
+ @dataclass(frozen=True)
21
+ class LineChart(Chart):
22
+ """
23
+ Chart drawing each series as a line joining its values, used by ``Plot.line``.
24
+
25
+ A missing value breaks the line, which starts again at the next present value.
26
+
27
+ .. versionadded:: 0.1.0
28
+
29
+ Parameters
30
+ ----------
31
+ x
32
+ For a Table, the column of the horizontal positions: numbers, dates, datetimes, times of day, texts or
33
+ booleans, the row numbers when omitted. An Array takes none, its rows being numbered. Times of day are placed
34
+ on an axis of one day labeled ``HH:MM``.
35
+ y
36
+ For a Table, the columns drawn, holding numbers or times of day, not both, one line each. A Table needs it,
37
+ even for a single column. An Array takes none: when omitted, each of its columns is a line. Times of day are
38
+ measured on an axis labeled ``HH:MM``.
39
+ colors
40
+ One color per line, the colors of the default cycle when omitted. The chart keeps its own list.
41
+ line
42
+ How the lines are drawn, ``LineType.SOLID`` by default.
43
+ marker
44
+ The shape drawn at each value, ``MarkerShape.NONE`` by default.
45
+
46
+ Raises
47
+ ------
48
+ InvalidTypeError
49
+ When a setting is not of the type its annotation names.
50
+ InvalidColumnNameError
51
+ When ``x`` or a name in ``y`` is an empty text.
52
+ EmptyListError
53
+ When ``y`` or ``colors`` is an empty list.
54
+ DuplicateColumnError
55
+ When a column name appears twice in ``y``.
56
+
57
+ Examples
58
+ --------
59
+ >>> import numdaplot as ndp
60
+ >>> days = ndp.Array.from_list([1, 2, 3, 4])
61
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0])
62
+ >>> costs = ndp.Array.from_list([8.0, 9.5, None, 10.0])
63
+ >>> sales = ndp.Table.from_arrays({"day": days, "price": prices, "cost": costs})
64
+ >>> colors = [ndp.Color.BLUE, ndp.CustomColor("#ff8800")]
65
+ >>> chart = ndp.LineChart(x="day", y=["price", "cost"], colors=colors, marker=ndp.MarkerShape.CIRCLE)
66
+ >>> plot = ndp.Plot.line(sales, chart)
67
+ >>> plot.show()
68
+ """
69
+
70
+ x: str | None = None
71
+ y: list[str] | None = None
72
+ colors: Sequence[Color | CustomColor] | None = None
73
+ line: LineType = LineType.SOLID
74
+ marker: MarkerShape = MarkerShape.NONE
75
+
76
+ def __post_init__(self) -> None:
77
+ """
78
+ Check the columns and the colors and replace them with copies that only the chart holds.
79
+
80
+ .. versionadded:: 0.1.0
81
+
82
+ Raises
83
+ ------
84
+ InvalidTypeError
85
+ When a setting is not of the type its annotation names.
86
+ InvalidColumnNameError
87
+ When ``x`` or a name in ``y`` is an empty text.
88
+ EmptyListError
89
+ When ``y`` or ``colors`` is an empty list.
90
+ DuplicateColumnError
91
+ When a column name appears twice in ``y``.
92
+ """
93
+ require_field_types(self)
94
+
95
+ require_optional_column_name(self.x)
96
+
97
+ columns_copy = copy_columns(self.y)
98
+ colors_copy = copy_colors(self.colors)
99
+ object.__setattr__(self, "y", columns_copy)
100
+ object.__setattr__(self, "colors", colors_copy)
@@ -0,0 +1,75 @@
1
+ """
2
+ How the lines of a LineChart are drawn.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from enum import Enum, auto
8
+
9
+
10
+ class LineType(Enum):
11
+ """
12
+ How the lines of a ``LineChart`` are drawn.
13
+
14
+ .. versionadded:: 0.1.0
15
+
16
+ Examples
17
+ --------
18
+ >>> import numdaplot as ndp
19
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0])
20
+ >>> chart = ndp.LineChart(line=ndp.LineType.DASHED)
21
+ >>> plot = ndp.Plot.line(prices, chart)
22
+ >>> plot.show()
23
+ """
24
+
25
+ SOLID = auto()
26
+ """
27
+ A continuous line. Default value.
28
+
29
+ Examples
30
+ --------
31
+ >>> import numdaplot as ndp
32
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0])
33
+ >>> chart = ndp.LineChart(line=ndp.LineType.SOLID)
34
+ >>> plot = ndp.Plot.line(prices, chart)
35
+ >>> plot.show()
36
+ """
37
+
38
+ DASHED = auto()
39
+ """
40
+ A line of dashes.
41
+
42
+ Examples
43
+ --------
44
+ >>> import numdaplot as ndp
45
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0])
46
+ >>> chart = ndp.LineChart(line=ndp.LineType.DASHED)
47
+ >>> plot = ndp.Plot.line(prices, chart)
48
+ >>> plot.show()
49
+ """
50
+
51
+ DOTTED = auto()
52
+ """
53
+ A line of dots.
54
+
55
+ Examples
56
+ --------
57
+ >>> import numdaplot as ndp
58
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0])
59
+ >>> chart = ndp.LineChart(line=ndp.LineType.DOTTED)
60
+ >>> plot = ndp.Plot.line(prices, chart)
61
+ >>> plot.show()
62
+ """
63
+
64
+ DASH_DOT = auto()
65
+ """
66
+ A line of dashes and dots in turn.
67
+
68
+ Examples
69
+ --------
70
+ >>> import numdaplot as ndp
71
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0])
72
+ >>> chart = ndp.LineChart(line=ndp.LineType.DASH_DOT)
73
+ >>> plot = ndp.Plot.line(prices, chart)
74
+ >>> plot.show()
75
+ """
@@ -0,0 +1,113 @@
1
+ """
2
+ Shapes drawn at the values of a chart.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from enum import Enum, auto
8
+
9
+
10
+ class MarkerShape(Enum):
11
+ """
12
+ Shapes drawn at the values of a ``LineChart`` or a ``ScatterChart``.
13
+
14
+ .. versionadded:: 0.1.0
15
+
16
+ Examples
17
+ --------
18
+ >>> import numdaplot as ndp
19
+ >>> surfaces = ndp.Array.from_list([30.0, 45.0, 60.0, 80.0])
20
+ >>> prices = ndp.Array.from_list([150.0, 210.0, 260.0, 330.0])
21
+ >>> flats = ndp.Table.from_arrays({"surface": surfaces, "price": prices})
22
+ >>> chart = ndp.ScatterChart(x="surface", y="price", marker=ndp.MarkerShape.SQUARE)
23
+ >>> plot = ndp.Plot.scatter(flats, chart)
24
+ >>> plot.show()
25
+ """
26
+
27
+ NONE = auto()
28
+ """
29
+ No marker, only the line. Default value of ``LineChart``, refused by ``ScatterChart``.
30
+
31
+ Examples
32
+ --------
33
+ >>> import numdaplot as ndp
34
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0, 17.0])
35
+ >>> chart = ndp.LineChart(marker=ndp.MarkerShape.NONE)
36
+ >>> plot = ndp.Plot.line(prices, chart)
37
+ >>> plot.show()
38
+ """
39
+
40
+ CIRCLE = auto()
41
+ """
42
+ A disc. Default value of ``ScatterChart``.
43
+
44
+ Examples
45
+ --------
46
+ >>> import numdaplot as ndp
47
+ >>> surfaces = ndp.Array.from_list([30.0, 45.0, 60.0, 80.0])
48
+ >>> prices = ndp.Array.from_list([150.0, 210.0, 260.0, 330.0])
49
+ >>> flats = ndp.Table.from_arrays({"surface": surfaces, "price": prices})
50
+ >>> chart = ndp.ScatterChart(x="surface", y="price", marker=ndp.MarkerShape.CIRCLE)
51
+ >>> plot = ndp.Plot.scatter(flats, chart)
52
+ >>> plot.show()
53
+ """
54
+
55
+ SQUARE = auto()
56
+ """
57
+ A square.
58
+
59
+ Examples
60
+ --------
61
+ >>> import numdaplot as ndp
62
+ >>> surfaces = ndp.Array.from_list([30.0, 45.0, 60.0, 80.0])
63
+ >>> prices = ndp.Array.from_list([150.0, 210.0, 260.0, 330.0])
64
+ >>> flats = ndp.Table.from_arrays({"surface": surfaces, "price": prices})
65
+ >>> chart = ndp.ScatterChart(x="surface", y="price", marker=ndp.MarkerShape.SQUARE)
66
+ >>> plot = ndp.Plot.scatter(flats, chart)
67
+ >>> plot.show()
68
+ """
69
+
70
+ TRIANGLE = auto()
71
+ """
72
+ A triangle pointing up.
73
+
74
+ Examples
75
+ --------
76
+ >>> import numdaplot as ndp
77
+ >>> surfaces = ndp.Array.from_list([30.0, 45.0, 60.0, 80.0])
78
+ >>> prices = ndp.Array.from_list([150.0, 210.0, 260.0, 330.0])
79
+ >>> flats = ndp.Table.from_arrays({"surface": surfaces, "price": prices})
80
+ >>> chart = ndp.ScatterChart(x="surface", y="price", marker=ndp.MarkerShape.TRIANGLE)
81
+ >>> plot = ndp.Plot.scatter(flats, chart)
82
+ >>> plot.show()
83
+ """
84
+
85
+ CROSS = auto()
86
+ """
87
+ A cross made of two diagonal strokes.
88
+
89
+ Examples
90
+ --------
91
+ >>> import numdaplot as ndp
92
+ >>> surfaces = ndp.Array.from_list([30.0, 45.0, 60.0, 80.0])
93
+ >>> prices = ndp.Array.from_list([150.0, 210.0, 260.0, 330.0])
94
+ >>> flats = ndp.Table.from_arrays({"surface": surfaces, "price": prices})
95
+ >>> chart = ndp.ScatterChart(x="surface", y="price", marker=ndp.MarkerShape.CROSS)
96
+ >>> plot = ndp.Plot.scatter(flats, chart)
97
+ >>> plot.show()
98
+ """
99
+
100
+ DIAMOND = auto()
101
+ """
102
+ A diamond.
103
+
104
+ Examples
105
+ --------
106
+ >>> import numdaplot as ndp
107
+ >>> surfaces = ndp.Array.from_list([30.0, 45.0, 60.0, 80.0])
108
+ >>> prices = ndp.Array.from_list([150.0, 210.0, 260.0, 330.0])
109
+ >>> flats = ndp.Table.from_arrays({"surface": surfaces, "price": prices})
110
+ >>> chart = ndp.ScatterChart(x="surface", y="price", marker=ndp.MarkerShape.DIAMOND)
111
+ >>> plot = ndp.Plot.scatter(flats, chart)
112
+ >>> plot.show()
113
+ """
@@ -0,0 +1,60 @@
1
+ """
2
+ Chart drawing the missing values of each column of a Table as bars.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from dataclasses import dataclass
8
+
9
+ from numdaplot.plots.charts.chart import Chart
10
+ from numdaplot.ratios.measure import Measure
11
+ from numdaplot.settings.field_types import require_field_types
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class MissingChart(Chart):
16
+ """
17
+ Chart drawing one bar per column of a Table, as high as its missing values, used by ``Plot.missing_by_column``.
18
+
19
+ Every column has its bar, even without missing value.
20
+
21
+ .. versionadded:: 0.1.0
22
+
23
+ Parameters
24
+ ----------
25
+ measure
26
+ ``Measure.COUNT`` by default for the number of missing values of each column, ``Measure.RATIO`` for their
27
+ share, on an axis from 0 to 1.
28
+
29
+
30
+ Raises
31
+ ------
32
+ InvalidTypeError
33
+ When a setting is not of the type its annotation names.
34
+
35
+ Examples
36
+ --------
37
+ >>> import numdaplot as ndp
38
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Nice", "Pau"])
39
+ >>> prices = ndp.Array.from_list([12.0, None, None, 15.5])
40
+ >>> rooms = ndp.Array.from_list([2, 3, 1, 4])
41
+ >>> flats = ndp.Table.from_arrays({"city": cities, "price": prices, "rooms": rooms})
42
+ >>> chart = ndp.MissingChart(measure=ndp.Measure.RATIO)
43
+ >>> plot = ndp.Plot.missing_by_column(flats, chart)
44
+ >>> plot.show()
45
+ """
46
+
47
+ measure: Measure = Measure.COUNT
48
+
49
+ def __post_init__(self) -> None:
50
+ """
51
+ Check the type of every setting.
52
+
53
+ .. versionadded:: 0.1.0
54
+
55
+ Raises
56
+ ------
57
+ InvalidTypeError
58
+ When a setting is not of the type its annotation names.
59
+ """
60
+ require_field_types(self)