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,404 @@
1
+ """
2
+ Arithmetic operators of an Array, with the Array on the left.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from typing import Self
8
+
9
+ import numpy
10
+
11
+ from numdaplot.arrays.array_data import ArrayData
12
+ from numdaplot.arrays.operations.integer_rules import require_opposite_fits
13
+ from numdaplot.arrays.operations.transformation import transform_values
14
+ from numdaplot.rules.rule_values import ScalarValue
15
+ from numdaplot.settings.argument_types import checked_arguments
16
+
17
+ ADDITION_SYMBOL = "+"
18
+ SUBTRACTION_SYMBOL = "-"
19
+ MULTIPLICATION_SYMBOL = "*"
20
+ DIVISION_SYMBOL = "/"
21
+ FLOOR_DIVISION_SYMBOL = "//"
22
+ REMAINDER_SYMBOL = "%"
23
+ POWER_SYMBOL = "**"
24
+
25
+
26
+ class ArrayArithmetic(ArrayData):
27
+ """
28
+ Arithmetic operators of an Array, with the Array on the left.
29
+
30
+ ``+``, ``-``, ``*``, ``/``, ``//``, ``%``, ``**`` and the opposite ``-array``.
31
+
32
+ .. versionadded:: 0.1.0
33
+ """
34
+
35
+ @checked_arguments
36
+ def __add__(self, other: Self | ScalarValue) -> Self:
37
+ """
38
+ Return the sum of each value and another operand, written ``array + other``.
39
+
40
+ Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
41
+ as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
42
+
43
+ .. versionadded:: 0.1.0
44
+
45
+ Parameters
46
+ ----------
47
+ other
48
+ An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
49
+
50
+ Returns
51
+ -------
52
+ Self
53
+ A new Array.
54
+
55
+ Warns
56
+ -----
57
+ CalculationWarning
58
+ When values of decimals become NaN or an infinite value.
59
+
60
+ Raises
61
+ ------
62
+ InvalidTypeError
63
+ When an argument is not of the type its annotation names.
64
+ ShapeMismatchError
65
+ When the shapes of two Arrays cannot be combined.
66
+ IncompatibleTypesError
67
+ When the operation does not apply to the types, such as a number and a text.
68
+ IntegerOverflowError
69
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
70
+ TimeOverflowError
71
+ When a date or a datetime leaves 1677 to 2262, a duration exceeds about 292 years, or a time of day moves
72
+ past midnight.
73
+
74
+ Examples
75
+ --------
76
+ >>> import numdaplot as ndp
77
+ >>> prices = ndp.Array.from_list([10, 20])
78
+ >>> prices + 5
79
+ Array([15, 25], dtype=INT64)
80
+ """
81
+ combined_array = self._combine(other, numpy.add, ADDITION_SYMBOL)
82
+
83
+ return combined_array
84
+
85
+ @checked_arguments
86
+ def __sub__(self, other: Self | ScalarValue) -> Self:
87
+ """
88
+ Return the difference of each value and another operand, written ``array - other``.
89
+
90
+ Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
91
+ as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
92
+
93
+ .. versionadded:: 0.1.0
94
+
95
+ Parameters
96
+ ----------
97
+ other
98
+ An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
99
+
100
+ Returns
101
+ -------
102
+ Self
103
+ A new Array.
104
+
105
+ Warns
106
+ -----
107
+ CalculationWarning
108
+ When values of decimals become NaN or an infinite value.
109
+
110
+ Raises
111
+ ------
112
+ InvalidTypeError
113
+ When an argument is not of the type its annotation names.
114
+ ShapeMismatchError
115
+ When the shapes of two Arrays cannot be combined.
116
+ IncompatibleTypesError
117
+ When the operation does not apply to the types, such as a number and a text.
118
+ IntegerOverflowError
119
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
120
+ TimeOverflowError
121
+ When a date or a datetime leaves 1677 to 2262, a duration exceeds about 292 years, or a time of day moves
122
+ past midnight.
123
+
124
+ Examples
125
+ --------
126
+ >>> import numdaplot as ndp
127
+ >>> prices = ndp.Array.from_list([10, 20])
128
+ >>> prices - 5
129
+ Array([ 5, 15], dtype=INT64)
130
+ """
131
+ combined_array = self._combine(other, numpy.subtract, SUBTRACTION_SYMBOL)
132
+
133
+ return combined_array
134
+
135
+ @checked_arguments
136
+ def __mul__(self, other: Self | ScalarValue) -> Self:
137
+ """
138
+ Return the product of each value and another operand, written ``array * other``.
139
+
140
+ Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
141
+ as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
142
+
143
+ .. versionadded:: 0.1.0
144
+
145
+ Parameters
146
+ ----------
147
+ other
148
+ An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
149
+
150
+ Returns
151
+ -------
152
+ Self
153
+ A new Array.
154
+
155
+ Warns
156
+ -----
157
+ CalculationWarning
158
+ When values of decimals become NaN or an infinite value.
159
+
160
+ Raises
161
+ ------
162
+ InvalidTypeError
163
+ When an argument is not of the type its annotation names.
164
+ ShapeMismatchError
165
+ When the shapes of two Arrays cannot be combined.
166
+ IncompatibleTypesError
167
+ When the operation does not apply to the types, such as a number and a text.
168
+ IntegerOverflowError
169
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
170
+ TimeOverflowError
171
+ When a date or a datetime leaves 1677 to 2262, or a duration exceeds about 292 years.
172
+
173
+ Examples
174
+ --------
175
+ >>> import numdaplot as ndp
176
+ >>> prices = ndp.Array.from_list([10, 20])
177
+ >>> prices * 2
178
+ Array([20, 40], dtype=INT64)
179
+ """
180
+ combined_array = self._combine(other, numpy.multiply, MULTIPLICATION_SYMBOL)
181
+
182
+ return combined_array
183
+
184
+ @checked_arguments
185
+ def __truediv__(self, other: Self | ScalarValue) -> Self:
186
+ """
187
+ Return the quotient of each value and another operand, written ``array / other``.
188
+
189
+ Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
190
+ as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
191
+
192
+ .. versionadded:: 0.1.0
193
+
194
+ Parameters
195
+ ----------
196
+ other
197
+ An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
198
+
199
+ Returns
200
+ -------
201
+ Self
202
+ A new Array.
203
+
204
+ Warns
205
+ -----
206
+ CalculationWarning
207
+ When values of decimals become NaN or an infinite value.
208
+
209
+ Raises
210
+ ------
211
+ InvalidTypeError
212
+ When an argument is not of the type its annotation names.
213
+ ShapeMismatchError
214
+ When the shapes of two Arrays cannot be combined.
215
+ IncompatibleTypesError
216
+ When the operation does not apply to the types, such as a number and a text.
217
+ TimeOverflowError
218
+ When a date or a datetime leaves 1677 to 2262, or a duration exceeds about 292 years.
219
+
220
+ Examples
221
+ --------
222
+ >>> import numdaplot as ndp
223
+ >>> prices = ndp.Array.from_list([10, 20])
224
+ >>> prices / 4
225
+ Array([2.5, 5. ], dtype=FLOAT64)
226
+ """
227
+ combined_array = self._combine(other, numpy.true_divide, DIVISION_SYMBOL)
228
+
229
+ return combined_array
230
+
231
+ @checked_arguments
232
+ def __floordiv__(self, other: Self | ScalarValue) -> Self:
233
+ """
234
+ Return the whole quotient of each value and another operand, written ``array // other``.
235
+
236
+ Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
237
+ as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
238
+
239
+ .. versionadded:: 0.1.0
240
+
241
+ Parameters
242
+ ----------
243
+ other
244
+ An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
245
+
246
+ Returns
247
+ -------
248
+ Self
249
+ A new Array.
250
+
251
+ Warns
252
+ -----
253
+ CalculationWarning
254
+ When values of decimals become NaN or an infinite value.
255
+
256
+ Raises
257
+ ------
258
+ InvalidTypeError
259
+ When an argument is not of the type its annotation names.
260
+ ShapeMismatchError
261
+ When the shapes of two Arrays cannot be combined.
262
+ IncompatibleTypesError
263
+ When the operation does not apply to the types, such as a number and a text.
264
+ OutOfDomainError
265
+ When integers are divided by 0: convert them to ``FLOAT64`` first.
266
+ IntegerOverflowError
267
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
268
+
269
+ Examples
270
+ --------
271
+ >>> import numdaplot as ndp
272
+ >>> prices = ndp.Array.from_list([10, 20])
273
+ >>> prices // 3
274
+ Array([3, 6], dtype=INT64)
275
+ """
276
+ combined_array = self._combine(other, numpy.floor_divide, FLOOR_DIVISION_SYMBOL)
277
+
278
+ return combined_array
279
+
280
+ @checked_arguments
281
+ def __mod__(self, other: Self | ScalarValue) -> Self:
282
+ """
283
+ Return the remainder of each value and another operand, written ``array % other``.
284
+
285
+ Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
286
+ as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
287
+
288
+ .. versionadded:: 0.1.0
289
+
290
+ Parameters
291
+ ----------
292
+ other
293
+ An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
294
+
295
+ Returns
296
+ -------
297
+ Self
298
+ A new Array.
299
+
300
+ Warns
301
+ -----
302
+ CalculationWarning
303
+ When values of decimals become NaN or an infinite value.
304
+
305
+ Raises
306
+ ------
307
+ InvalidTypeError
308
+ When an argument is not of the type its annotation names.
309
+ ShapeMismatchError
310
+ When the shapes of two Arrays cannot be combined.
311
+ IncompatibleTypesError
312
+ When the operation does not apply to the types, such as a number and a text.
313
+ OutOfDomainError
314
+ When integers are divided by 0: convert them to ``FLOAT64`` first.
315
+
316
+ Examples
317
+ --------
318
+ >>> import numdaplot as ndp
319
+ >>> prices = ndp.Array.from_list([10, 20])
320
+ >>> prices % 3
321
+ Array([1, 2], dtype=INT64)
322
+ """
323
+ combined_array = self._combine(other, numpy.remainder, REMAINDER_SYMBOL)
324
+
325
+ return combined_array
326
+
327
+ @checked_arguments
328
+ def __pow__(self, other: Self | ScalarValue) -> Self:
329
+ """
330
+ Return the power of each value and another operand, written ``array ** other``.
331
+
332
+ Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
333
+ as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
334
+
335
+ .. versionadded:: 0.1.0
336
+
337
+ Parameters
338
+ ----------
339
+ other
340
+ An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
341
+
342
+ Returns
343
+ -------
344
+ Self
345
+ A new Array.
346
+
347
+ Warns
348
+ -----
349
+ CalculationWarning
350
+ When values of decimals become NaN or an infinite value.
351
+
352
+ Raises
353
+ ------
354
+ InvalidTypeError
355
+ When an argument is not of the type its annotation names.
356
+ ShapeMismatchError
357
+ When the shapes of two Arrays cannot be combined.
358
+ IncompatibleTypesError
359
+ When the operation does not apply to the types, such as a number and a text.
360
+ OutOfDomainError
361
+ When integers are raised to a negative power: convert them to ``FLOAT64`` first.
362
+ IntegerOverflowError
363
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
364
+
365
+ Examples
366
+ --------
367
+ >>> import numdaplot as ndp
368
+ >>> prices = ndp.Array.from_list([10, 20])
369
+ >>> prices ** 2
370
+ Array([100, 400], dtype=INT64)
371
+ """
372
+ combined_array = self._combine(other, numpy.power, POWER_SYMBOL)
373
+
374
+ return combined_array
375
+
376
+ def __neg__(self) -> Self:
377
+ """
378
+ Return the opposite of each value, written ``-array``.
379
+
380
+ .. versionadded:: 0.1.0
381
+
382
+ Returns
383
+ -------
384
+ Self
385
+ A new Array.
386
+
387
+ Raises
388
+ ------
389
+ IncompatibleTypesError
390
+ When the values have no opposite, such as texts or booleans.
391
+ IntegerOverflowError
392
+ When an integer has no opposite in its type, such as any positive ``UINT8``.
393
+
394
+ Examples
395
+ --------
396
+ >>> import numdaplot as ndp
397
+ >>> -ndp.Array.from_list([1, -2])
398
+ Array([-1, 2], dtype=INT64)
399
+ """
400
+ require_opposite_fits(self._values, SUBTRACTION_SYMBOL)
401
+ negated_values = transform_values(self._values, numpy.negative, SUBTRACTION_SYMBOL)
402
+ negated_array = self._wrap(negated_values)
403
+
404
+ return negated_array
@@ -0,0 +1,143 @@
1
+ """
2
+ Statistics, math functions and time functions computed on an Array.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from typing import Self
8
+
9
+ from numdaplot.arrays.array_data import ArrayData
10
+ from numdaplot.arrays.calculation.math_function_values import apply_math_function
11
+ from numdaplot.arrays.calculation.statistic_values import compute_statistic
12
+ from numdaplot.arrays.calculation.time_function_values import apply_time_function
13
+ from numdaplot.arrays.mapping.mapped_values import map_values
14
+ from numdaplot.arrays.mapping.value_mapping import ValueMapping
15
+ from numdaplot.arrays.math_functions.math_function import MathFunction
16
+ from numdaplot.dates.time_function import TimeFunction
17
+ from numdaplot.positions.axis import Axis
18
+ from numdaplot.settings.argument_types import checked_arguments
19
+ from numdaplot.statistics.statistic import Statistic
20
+
21
+
22
+ class ArrayCalculation(ArrayData):
23
+ """
24
+ Statistics with ``compute``, math and time functions with ``apply``.
25
+
26
+ .. versionadded:: 0.1.0
27
+ """
28
+
29
+ @checked_arguments
30
+ def compute(self, statistic: Statistic, axis: Axis | None = None) -> Self:
31
+ """
32
+ Return a statistic of the values, ignoring missing values unless ``Count`` is set to include them.
33
+
34
+ .. versionadded:: 0.1.0
35
+
36
+ Parameters
37
+ ----------
38
+ statistic
39
+ A ``Statistic``, such as ``ndp.Mean()`` or ``ndp.Quantile(0.9)``: see ``Statistic`` for every statistic.
40
+ axis
41
+ ``EACH_ROW`` for one result per row, ``EACH_COLUMN`` for one per column, only for a
42
+ two-dimensional Array. A single result for the whole Array when omitted.
43
+
44
+ Returns
45
+ -------
46
+ Self
47
+ A new Array: one value when ``axis`` is omitted, read it with ``to_value``.
48
+
49
+ Raises
50
+ ------
51
+ InvalidTypeError
52
+ When an argument is not of the type its annotation names.
53
+ IncompatibleTypesError
54
+ When the statistic does not apply to the type of the values, such as the mean of texts.
55
+ DimensionError
56
+ When an axis is given for an Array that is not two-dimensional.
57
+ EmptyArrayError
58
+ When the statistic needs a value, such as ``Mean``, and the whole Array, or a row or column,
59
+ has no present value.
60
+ IntegerOverflowError
61
+ When the ``Sum`` of integers does not fit their type.
62
+
63
+ Warns
64
+ -----
65
+ CalculationWarning
66
+ When a result on decimals becomes an infinite value or NaN.
67
+
68
+ Examples
69
+ --------
70
+ >>> import numdaplot as ndp
71
+ >>> temperatures = ndp.Array.from_list([12.0, None, 18.0])
72
+ >>> temperatures.compute(ndp.Mean()).to_value()
73
+ 15.0
74
+ """
75
+ statistic_values = compute_statistic(self._values, statistic, axis)
76
+ statistic_array = self._wrap(statistic_values)
77
+
78
+ return statistic_array
79
+
80
+ @checked_arguments
81
+ def apply(self, function: MathFunction | TimeFunction | ValueMapping) -> Self:
82
+ """
83
+ Return a math function, a time function or a value mapping applied to each value.
84
+
85
+ .. versionadded:: 0.1.0
86
+
87
+ Parameters
88
+ ----------
89
+ function
90
+ A ``MathFunction``, such as ``ndp.SquareRoot()``, applied to numbers, or a ``TimeFunction``,
91
+ such as ``ndp.DatePart(unit=ndp.DatePartUnit.MONTH)``, applied to dates, datetimes, durations or
92
+ numbers as each one states: see ``MathFunction`` and ``TimeFunction`` for every function. Or a
93
+ ``ValueMapping`` giving a new value to listed values, such as codes replaced by labels.
94
+
95
+ Returns
96
+ -------
97
+ Self
98
+ A new Array of the same shape. Missing values stay missing.
99
+
100
+ Raises
101
+ ------
102
+ InvalidTypeError
103
+ When an argument is not of the type its annotation names.
104
+ IncompatibleTypesError
105
+ When the function does not apply to the type of the values.
106
+ OutOfDomainError
107
+ When a value is outside the domain of a math function, such as the square root of -1.
108
+ UnmatchedValueError
109
+ When a value has no ``ValueChange`` in a ``ValueMapping`` whose ``others`` is ``Unmatched.ERROR``.
110
+ UnsupportedMissingError
111
+ When a ``ValueMapping`` gives integers or booleans and a missing value.
112
+
113
+ Warns
114
+ -----
115
+ CalculationWarning
116
+ When a result of a math function becomes an infinite value or NaN.
117
+
118
+ Examples
119
+ --------
120
+ >>> from datetime import date
121
+ >>> import numdaplot as ndp
122
+ >>> ndp.Array.from_list([1, 4, 9]).apply(ndp.SquareRoot())
123
+ Array([1., 2., 3.], dtype=FLOAT64)
124
+ >>> ndp.Array.from_list([date(2026, 3, 14)]).apply(ndp.DatePart(unit=ndp.DatePartUnit.MONTH))
125
+ Array([3.], dtype=FLOAT64)
126
+ >>> sexes = ndp.ValueMapping(changes=[ndp.ValueChange(1, "M"), ndp.ValueChange(2, "F")])
127
+ >>> ndp.Array.from_list([2, 1]).apply(sexes)
128
+ Array(['F', 'M'], dtype=TEXT)
129
+ """
130
+ if isinstance(function, ValueMapping):
131
+ mapped_values = map_values(self._values, function)
132
+ mapped_array = self._wrap(mapped_values)
133
+ return mapped_array
134
+
135
+ if isinstance(function, TimeFunction):
136
+ time_values = apply_time_function(self._values, function)
137
+ time_array = self._wrap(time_values)
138
+ return time_array
139
+
140
+ transformed_values = apply_math_function(self._values, function)
141
+ transformed_array = self._wrap(transformed_values)
142
+
143
+ return transformed_array
@@ -0,0 +1,150 @@
1
+ """
2
+ Conversion of an Array to Python values and text, and comparison of two Arrays.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from typing import TYPE_CHECKING, Any, cast
10
+
11
+ from numdaplot.arrays.array_data import ArrayData
12
+ from numdaplot.arrays.conversion.array_text import format_array
13
+ from numdaplot.arrays.conversion.equality_check import are_equal
14
+ from numdaplot.arrays.conversion.python_values import to_python_list
15
+ from numdaplot.errors.invalid_type_error import InvalidTypeError
16
+ from numdaplot.errors.not_single_value_error import NotSingleValueError
17
+ from numdaplot.settings.argument_types import checked_arguments
18
+
19
+ if TYPE_CHECKING:
20
+ from numdaplot.arrays.equality import Equality
21
+
22
+ SINGLE_VALUE_COUNT = 1
23
+ FLAT_DIMENSIONS = (-1,)
24
+ EQUALITY_TARGET = "Array.is_equal other"
25
+ EQUALITY_EXPECTED = "an Array"
26
+
27
+
28
+ class ArrayConversion(ArrayData):
29
+ """
30
+ Conversion of an Array with ``to_list`` and ``to_value``, comparison with ``is_equal``, and its text.
31
+
32
+ .. versionadded:: 0.1.0
33
+ """
34
+
35
+ def to_list(self) -> list[Any]:
36
+ """
37
+ Return the values as a Python list, with one nested list per row for several dimensions.
38
+
39
+ This is the way to loop over the values: ``for value in array.to_list()``.
40
+
41
+ .. versionadded:: 0.1.0
42
+
43
+ Returns
44
+ -------
45
+ list[Any]
46
+ Python values, ``datetime.time`` for times of day. A missing date, datetime, duration or time of day
47
+ becomes ``None``, a missing decimal ``nan``.
48
+
49
+ Examples
50
+ --------
51
+ >>> import numdaplot as ndp
52
+ >>> ndp.Array.from_list([[1, 2], [3, 4]]).to_list()
53
+ [[1, 2], [3, 4]]
54
+ """
55
+ python_values = to_python_list(self._values)
56
+
57
+ return python_values
58
+
59
+ def to_value(self) -> Any:
60
+ """
61
+ Return the single value of an Array holding exactly one value, as a Python value.
62
+
63
+ .. versionadded:: 0.1.0
64
+
65
+ Returns
66
+ -------
67
+ Any
68
+ The value, ``None`` for a missing date, datetime or duration.
69
+
70
+ Raises
71
+ ------
72
+ NotSingleValueError
73
+ When the Array does not hold exactly one value.
74
+
75
+ Examples
76
+ --------
77
+ >>> import numdaplot as ndp
78
+ >>> ndp.Array.from_list([3, 1, 2]).compute(ndp.Max()).to_value()
79
+ 3
80
+ """
81
+ if self._values.size != SINGLE_VALUE_COUNT:
82
+ raise NotSingleValueError(self._values.size)
83
+
84
+ flat_values = self._values.reshape(FLAT_DIMENSIONS)
85
+ python_values = to_python_list(flat_values)
86
+ single_value = python_values[0]
87
+
88
+ return single_value
89
+
90
+ @checked_arguments
91
+ def is_equal(self, equality: Equality) -> bool:
92
+ """
93
+ Return whether this Array and another one have the same shape and the same values.
94
+
95
+ Two missing values at the same position are equal.
96
+
97
+ .. versionadded:: 0.1.0
98
+
99
+ Parameters
100
+ ----------
101
+ equality
102
+ The other Array, and whether the types must also be the same.
103
+
104
+ Returns
105
+ -------
106
+ bool
107
+ True when both Arrays are equal.
108
+
109
+ Raises
110
+ ------
111
+ InvalidTypeError
112
+ When an argument is not of the type its annotation names.
113
+
114
+ Examples
115
+ --------
116
+ >>> import numdaplot as ndp
117
+ >>> integers = ndp.Array.from_list([1, 2])
118
+ >>> decimals = ndp.Array.from_list([1.0, 2.0])
119
+ >>> integers.is_equal(ndp.Equality(other=decimals))
120
+ True
121
+ """
122
+ other = cast(object, equality.other)
123
+ if not isinstance(other, ArrayData):
124
+ raise InvalidTypeError(EQUALITY_TARGET, EQUALITY_EXPECTED, other)
125
+
126
+ other_values = other._values
127
+ is_equal = are_equal(self._values, other_values, equality.types)
128
+
129
+ return is_equal
130
+
131
+ def __repr__(self) -> str:
132
+ """
133
+ Return the text of the Array: its values, then its type.
134
+
135
+ .. versionadded:: 0.1.0
136
+
137
+ Returns
138
+ -------
139
+ str
140
+ The text, such as ``Array([1, 2, 3], dtype=INT64)``.
141
+
142
+ Examples
143
+ --------
144
+ >>> import numdaplot as ndp
145
+ >>> ndp.Array.from_list(["a", "b"])
146
+ Array(['a', 'b'], dtype=TEXT)
147
+ """
148
+ array_text = format_array(self._values)
149
+
150
+ return array_text