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,334 @@
1
+ """
2
+ Arithmetic operators of an Array, with a single value 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_arithmetic import (
12
+ ADDITION_SYMBOL,
13
+ DIVISION_SYMBOL,
14
+ FLOOR_DIVISION_SYMBOL,
15
+ MULTIPLICATION_SYMBOL,
16
+ POWER_SYMBOL,
17
+ REMAINDER_SYMBOL,
18
+ SUBTRACTION_SYMBOL,
19
+ )
20
+ from numdaplot.arrays.array_data import ArrayData
21
+ from numdaplot.rules.rule_values import ScalarValue
22
+ from numdaplot.settings.argument_types import checked_arguments
23
+
24
+
25
+ class ArrayReflectedArithmetic(ArrayData):
26
+ """
27
+ Arithmetic operators of an Array with a single value on the left, such as ``100 - array``.
28
+
29
+ .. versionadded:: 0.1.0
30
+ """
31
+
32
+ @checked_arguments
33
+ def __radd__(self, other: ScalarValue) -> Self:
34
+ """
35
+ Return the sum of a single value and each value, written ``value + array``.
36
+
37
+ .. versionadded:: 0.1.0
38
+
39
+ Parameters
40
+ ----------
41
+ other
42
+ A ``ScalarValue``, such as ``10`` or ``2.5``, on the left of the operator.
43
+
44
+ Returns
45
+ -------
46
+ Self
47
+ A new Array.
48
+
49
+ Warns
50
+ -----
51
+ CalculationWarning
52
+ When values of decimals become NaN or an infinite value.
53
+
54
+ Raises
55
+ ------
56
+ InvalidTypeError
57
+ When an argument is not of the type its annotation names.
58
+ IncompatibleTypesError
59
+ When the operation does not apply to the types, such as a number and a text.
60
+ IntegerOverflowError
61
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
62
+ TimeOverflowError
63
+ When a date or a datetime leaves 1677 to 2262, a duration exceeds about 292 years, or a time of day moves
64
+ past midnight.
65
+
66
+ Examples
67
+ --------
68
+ >>> import numdaplot as ndp
69
+ >>> prices = ndp.Array.from_list([10, 20])
70
+ >>> 5 + prices
71
+ Array([15, 25], dtype=INT64)
72
+ """
73
+ combined_array = self._combine_reflected(other, numpy.add, ADDITION_SYMBOL)
74
+
75
+ return combined_array
76
+
77
+ @checked_arguments
78
+ def __rsub__(self, other: ScalarValue) -> Self:
79
+ """
80
+ Return the difference of a single value and each value, written ``value - array``.
81
+
82
+ .. versionadded:: 0.1.0
83
+
84
+ Parameters
85
+ ----------
86
+ other
87
+ A ``ScalarValue``, such as ``10`` or ``2.5``, on the left of the operator.
88
+
89
+ Returns
90
+ -------
91
+ Self
92
+ A new Array.
93
+
94
+ Warns
95
+ -----
96
+ CalculationWarning
97
+ When values of decimals become NaN or an infinite value.
98
+
99
+ Raises
100
+ ------
101
+ InvalidTypeError
102
+ When an argument is not of the type its annotation names.
103
+ IncompatibleTypesError
104
+ When the operation does not apply to the types, such as a number and a text.
105
+ IntegerOverflowError
106
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
107
+ TimeOverflowError
108
+ When a date or a datetime leaves 1677 to 2262, a duration exceeds about 292 years, or a time of day moves
109
+ past midnight.
110
+
111
+ Examples
112
+ --------
113
+ >>> import numdaplot as ndp
114
+ >>> prices = ndp.Array.from_list([10, 20])
115
+ >>> 100 - prices
116
+ Array([90, 80], dtype=INT64)
117
+ """
118
+ combined_array = self._combine_reflected(other, numpy.subtract, SUBTRACTION_SYMBOL)
119
+
120
+ return combined_array
121
+
122
+ @checked_arguments
123
+ def __rmul__(self, other: ScalarValue) -> Self:
124
+ """
125
+ Return the product of a single value and each value, written ``value * array``.
126
+
127
+ .. versionadded:: 0.1.0
128
+
129
+ Parameters
130
+ ----------
131
+ other
132
+ A ``ScalarValue``, such as ``10`` or ``2.5``, on the left of the operator.
133
+
134
+ Returns
135
+ -------
136
+ Self
137
+ A new Array.
138
+
139
+ Warns
140
+ -----
141
+ CalculationWarning
142
+ When values of decimals become NaN or an infinite value.
143
+
144
+ Raises
145
+ ------
146
+ InvalidTypeError
147
+ When an argument is not of the type its annotation names.
148
+ IncompatibleTypesError
149
+ When the operation does not apply to the types, such as a number and a text.
150
+ IntegerOverflowError
151
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
152
+ TimeOverflowError
153
+ When a date or a datetime leaves 1677 to 2262, or a duration exceeds about 292 years.
154
+
155
+ Examples
156
+ --------
157
+ >>> import numdaplot as ndp
158
+ >>> prices = ndp.Array.from_list([10, 20])
159
+ >>> 2 * prices
160
+ Array([20, 40], dtype=INT64)
161
+ """
162
+ combined_array = self._combine_reflected(other, numpy.multiply, MULTIPLICATION_SYMBOL)
163
+
164
+ return combined_array
165
+
166
+ @checked_arguments
167
+ def __rtruediv__(self, other: ScalarValue) -> Self:
168
+ """
169
+ Return the quotient of a single value and each value, written ``value / array``.
170
+
171
+ .. versionadded:: 0.1.0
172
+
173
+ Parameters
174
+ ----------
175
+ other
176
+ A ``ScalarValue``, such as ``10`` or ``2.5``, on the left of the operator.
177
+
178
+ Returns
179
+ -------
180
+ Self
181
+ A new Array.
182
+
183
+ Warns
184
+ -----
185
+ CalculationWarning
186
+ When values of decimals become NaN or an infinite value.
187
+
188
+ Raises
189
+ ------
190
+ InvalidTypeError
191
+ When an argument is not of the type its annotation names.
192
+ IncompatibleTypesError
193
+ When the operation does not apply to the types, such as a number and a text.
194
+
195
+ Examples
196
+ --------
197
+ >>> import numdaplot as ndp
198
+ >>> prices = ndp.Array.from_list([10, 20])
199
+ >>> 100 / prices
200
+ Array([10., 5.], dtype=FLOAT64)
201
+ """
202
+ combined_array = self._combine_reflected(other, numpy.true_divide, DIVISION_SYMBOL)
203
+
204
+ return combined_array
205
+
206
+ @checked_arguments
207
+ def __rfloordiv__(self, other: ScalarValue) -> Self:
208
+ """
209
+ Return the whole quotient of a single value and each value, written ``value // array``.
210
+
211
+ .. versionadded:: 0.1.0
212
+
213
+ Parameters
214
+ ----------
215
+ other
216
+ A ``ScalarValue``, such as ``10`` or ``2.5``, on the left of the operator.
217
+
218
+ Returns
219
+ -------
220
+ Self
221
+ A new Array.
222
+
223
+ Warns
224
+ -----
225
+ CalculationWarning
226
+ When values of decimals become NaN or an infinite value.
227
+
228
+ Raises
229
+ ------
230
+ InvalidTypeError
231
+ When an argument is not of the type its annotation names.
232
+ IncompatibleTypesError
233
+ When the operation does not apply to the types, such as a number and a text.
234
+ OutOfDomainError
235
+ When integers are divided by 0: convert them to ``FLOAT64`` first.
236
+ IntegerOverflowError
237
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
238
+
239
+ Examples
240
+ --------
241
+ >>> import numdaplot as ndp
242
+ >>> prices = ndp.Array.from_list([10, 20])
243
+ >>> 100 // prices
244
+ Array([10, 5], dtype=INT64)
245
+ """
246
+ combined_array = self._combine_reflected(other, numpy.floor_divide, FLOOR_DIVISION_SYMBOL)
247
+
248
+ return combined_array
249
+
250
+ @checked_arguments
251
+ def __rmod__(self, other: ScalarValue) -> Self:
252
+ """
253
+ Return the remainder of a single value and each value, written ``value % array``.
254
+
255
+ .. versionadded:: 0.1.0
256
+
257
+ Parameters
258
+ ----------
259
+ other
260
+ A ``ScalarValue``, such as ``10`` or ``2.5``, on the left of the operator.
261
+
262
+ Returns
263
+ -------
264
+ Self
265
+ A new Array.
266
+
267
+ Warns
268
+ -----
269
+ CalculationWarning
270
+ When values of decimals become NaN or an infinite value.
271
+
272
+ Raises
273
+ ------
274
+ InvalidTypeError
275
+ When an argument is not of the type its annotation names.
276
+ IncompatibleTypesError
277
+ When the operation does not apply to the types, such as a number and a text.
278
+ OutOfDomainError
279
+ When integers are divided by 0: convert them to ``FLOAT64`` first.
280
+
281
+ Examples
282
+ --------
283
+ >>> import numdaplot as ndp
284
+ >>> prices = ndp.Array.from_list([10, 20])
285
+ >>> 25 % prices
286
+ Array([5, 5], dtype=INT64)
287
+ """
288
+ combined_array = self._combine_reflected(other, numpy.remainder, REMAINDER_SYMBOL)
289
+
290
+ return combined_array
291
+
292
+ @checked_arguments
293
+ def __rpow__(self, other: ScalarValue) -> Self:
294
+ """
295
+ Return the power of a single value and each value, written ``value ** array``.
296
+
297
+ .. versionadded:: 0.1.0
298
+
299
+ Parameters
300
+ ----------
301
+ other
302
+ A ``ScalarValue``, such as ``10`` or ``2.5``, on the left of the operator.
303
+
304
+ Returns
305
+ -------
306
+ Self
307
+ A new Array.
308
+
309
+ Warns
310
+ -----
311
+ CalculationWarning
312
+ When values of decimals become NaN or an infinite value.
313
+
314
+ Raises
315
+ ------
316
+ InvalidTypeError
317
+ When an argument is not of the type its annotation names.
318
+ IncompatibleTypesError
319
+ When the operation does not apply to the types, such as a number and a text.
320
+ OutOfDomainError
321
+ When integers are raised to a negative power: convert them to ``FLOAT64`` first.
322
+ IntegerOverflowError
323
+ When a result does not fit its integer type, which refuses to wrap around to a wrong number.
324
+
325
+ Examples
326
+ --------
327
+ >>> import numdaplot as ndp
328
+ >>> prices = ndp.Array.from_list([10, 20])
329
+ >>> 2 ** prices
330
+ Array([ 1024, 1048576], dtype=INT64)
331
+ """
332
+ combined_array = self._combine_reflected(other, numpy.power, POWER_SYMBOL)
333
+
334
+ return combined_array
@@ -0,0 +1,339 @@
1
+ """
2
+ Python operations refused by an Array, each pointing to the numdaplot way of doing it.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from collections.abc import Iterator
8
+ from typing import NoReturn
9
+
10
+ from numdaplot.arrays.array_data import ArrayData
11
+ from numdaplot.errors.refused_operation_error import RefusedOperationError
12
+ from numdaplot.rules.greater import Greater
13
+ from numdaplot.rules.greater_or_equal import GreaterOrEqual
14
+ from numdaplot.rules.less import Less
15
+ from numdaplot.rules.less_or_equal import LessOrEqual
16
+
17
+ COMPARISON_OPERATION = "Comparing an Array with {symbol}"
18
+ EQUALITY_ALTERNATIVE = "is_equal with ndp.Equality, or check with ndp.Equal for each value"
19
+ ORDER_ALTERNATIVE = "select or check with a rule such as ndp.{rule_name}"
20
+ BRACKETS_OPERATION = "Brackets on an Array"
21
+ BRACKETS_ALTERNATIVE = "take, replace, select or check"
22
+ ITERATION_OPERATION = "Iterating over an Array with for"
23
+ ITERATION_ALTERNATIVE = "for value in array.to_list()"
24
+ MEMBERSHIP_OPERATION = "Testing membership in an Array with in"
25
+ MEMBERSHIP_ALTERNATIVE = "check with ndp.Equal or ndp.IsIn"
26
+ LENGTH_OPERATION = "len of an Array"
27
+ LENGTH_ALTERNATIVE = "the shape attribute"
28
+ TRUTH_OPERATION = "Testing an Array as a boolean"
29
+ TRUTH_ALTERNATIVE = "compute with ndp.Count, or is_equal"
30
+ MATRIX_PRODUCT_OPERATION = "The matrix product @ of an Array"
31
+ MATRIX_PRODUCT_ALTERNATIVE = "to_numpy and numpy"
32
+ EQUAL_SYMBOL = "=="
33
+ NOT_EQUAL_SYMBOL = "!="
34
+ LESS_SYMBOL = "<"
35
+ LESS_OR_EQUAL_SYMBOL = "<="
36
+ GREATER_SYMBOL = ">"
37
+ GREATER_OR_EQUAL_SYMBOL = ">="
38
+
39
+
40
+ class ArrayRefusals(ArrayData):
41
+ """
42
+ Python operations refused by an Array, each raising ``RefusedOperationError`` with the numdaplot way of doing it.
43
+
44
+ ``==``, ``!=``, ``<``, ``<=``, ``>``, ``>=``, brackets, ``for``, ``in``, ``len``, ``bool`` and ``@`` are refused.
45
+
46
+ .. versionadded:: 0.1.0
47
+ """
48
+
49
+ def __eq__(self, other: object) -> NoReturn:
50
+ """
51
+ Refuse ``array == other``; use ``is_equal`` or ``check(ndp.Equal(...))``.
52
+
53
+ .. versionadded:: 0.1.0
54
+
55
+ Parameters
56
+ ----------
57
+ other
58
+ Any value.
59
+
60
+ Raises
61
+ ------
62
+ RefusedOperationError
63
+ Always.
64
+ """
65
+ refuse_comparison(EQUAL_SYMBOL, EQUALITY_ALTERNATIVE)
66
+
67
+ def __ne__(self, other: object) -> NoReturn:
68
+ """
69
+ Refuse ``array != other``; use ``is_equal`` or ``check(ndp.NotEqual(...))``.
70
+
71
+ .. versionadded:: 0.1.0
72
+
73
+ Parameters
74
+ ----------
75
+ other
76
+ Any value.
77
+
78
+ Raises
79
+ ------
80
+ RefusedOperationError
81
+ Always.
82
+ """
83
+ refuse_comparison(NOT_EQUAL_SYMBOL, EQUALITY_ALTERNATIVE)
84
+
85
+ def __lt__(self, other: object) -> NoReturn:
86
+ """
87
+ Refuse ``array < other``; use ``select`` or ``check`` with ``ndp.Less``.
88
+
89
+ .. versionadded:: 0.1.0
90
+
91
+ Parameters
92
+ ----------
93
+ other
94
+ Any value.
95
+
96
+ Raises
97
+ ------
98
+ RefusedOperationError
99
+ Always.
100
+
101
+ Examples
102
+ --------
103
+ >>> import numdaplot as ndp
104
+ >>> try:
105
+ ... ndp.Array.from_list([1, 2]) < 2
106
+ ... except ndp.RefusedOperationError as error:
107
+ ... print(error)
108
+ Comparing an Array with < is not available, use select or check with a rule such as ndp.Less instead.
109
+ """
110
+ alternative = ORDER_ALTERNATIVE.format(rule_name=Less.__name__)
111
+ refuse_comparison(LESS_SYMBOL, alternative)
112
+
113
+ def __le__(self, other: object) -> NoReturn:
114
+ """
115
+ Refuse ``array <= other``; use ``select`` or ``check`` with ``ndp.LessOrEqual``.
116
+
117
+ .. versionadded:: 0.1.0
118
+
119
+ Parameters
120
+ ----------
121
+ other
122
+ Any value.
123
+
124
+ Raises
125
+ ------
126
+ RefusedOperationError
127
+ Always.
128
+ """
129
+ alternative = ORDER_ALTERNATIVE.format(rule_name=LessOrEqual.__name__)
130
+ refuse_comparison(LESS_OR_EQUAL_SYMBOL, alternative)
131
+
132
+ def __gt__(self, other: object) -> NoReturn:
133
+ """
134
+ Refuse ``array > other``; use ``select`` or ``check`` with ``ndp.Greater``.
135
+
136
+ .. versionadded:: 0.1.0
137
+
138
+ Parameters
139
+ ----------
140
+ other
141
+ Any value.
142
+
143
+ Raises
144
+ ------
145
+ RefusedOperationError
146
+ Always.
147
+ """
148
+ alternative = ORDER_ALTERNATIVE.format(rule_name=Greater.__name__)
149
+ refuse_comparison(GREATER_SYMBOL, alternative)
150
+
151
+ def __ge__(self, other: object) -> NoReturn:
152
+ """
153
+ Refuse ``array >= other``; use ``select`` or ``check`` with ``ndp.GreaterOrEqual``.
154
+
155
+ .. versionadded:: 0.1.0
156
+
157
+ Parameters
158
+ ----------
159
+ other
160
+ Any value.
161
+
162
+ Raises
163
+ ------
164
+ RefusedOperationError
165
+ Always.
166
+ """
167
+ alternative = ORDER_ALTERNATIVE.format(rule_name=GreaterOrEqual.__name__)
168
+ refuse_comparison(GREATER_OR_EQUAL_SYMBOL, alternative)
169
+
170
+ def __getitem__(self, key: object) -> NoReturn:
171
+ """
172
+ Refuse ``array[...]``; use ``take``, ``select`` or ``check``.
173
+
174
+ .. versionadded:: 0.1.0
175
+
176
+ Parameters
177
+ ----------
178
+ key
179
+ Any value.
180
+
181
+ Raises
182
+ ------
183
+ RefusedOperationError
184
+ Always.
185
+ """
186
+ raise RefusedOperationError(BRACKETS_OPERATION, BRACKETS_ALTERNATIVE)
187
+
188
+ def __setitem__(self, key: object, value: object) -> NoReturn:
189
+ """
190
+ Refuse ``array[...] = value``; use ``replace``, which returns a new Array.
191
+
192
+ .. versionadded:: 0.1.0
193
+
194
+ Parameters
195
+ ----------
196
+ key
197
+ Any value.
198
+ value
199
+ Any value.
200
+
201
+ Raises
202
+ ------
203
+ RefusedOperationError
204
+ Always.
205
+ """
206
+ raise RefusedOperationError(BRACKETS_OPERATION, BRACKETS_ALTERNATIVE)
207
+
208
+ def __iter__(self) -> Iterator[object]:
209
+ """
210
+ Refuse ``for value in array``; iterate over ``array.to_list()`` instead.
211
+
212
+ .. versionadded:: 0.1.0
213
+
214
+ Raises
215
+ ------
216
+ RefusedOperationError
217
+ Always.
218
+
219
+ Examples
220
+ --------
221
+ >>> import numdaplot as ndp
222
+ >>> for price in ndp.Array.from_list([10, 20]).to_list():
223
+ ... print(price)
224
+ 10
225
+ 20
226
+ """
227
+ raise RefusedOperationError(ITERATION_OPERATION, ITERATION_ALTERNATIVE)
228
+
229
+ def __contains__(self, value: object) -> NoReturn:
230
+ """
231
+ Refuse ``value in array``; use ``check`` with ``ndp.Equal`` or ``ndp.IsIn``.
232
+
233
+ .. versionadded:: 0.1.0
234
+
235
+ Parameters
236
+ ----------
237
+ value
238
+ Any value.
239
+
240
+ Raises
241
+ ------
242
+ RefusedOperationError
243
+ Always.
244
+ """
245
+ raise RefusedOperationError(MEMBERSHIP_OPERATION, MEMBERSHIP_ALTERNATIVE)
246
+
247
+ def __len__(self) -> NoReturn:
248
+ """
249
+ Refuse ``len(array)``; read the ``shape`` attribute instead.
250
+
251
+ .. versionadded:: 0.1.0
252
+
253
+ Raises
254
+ ------
255
+ RefusedOperationError
256
+ Always.
257
+ """
258
+ raise RefusedOperationError(LENGTH_OPERATION, LENGTH_ALTERNATIVE)
259
+
260
+ def __bool__(self) -> NoReturn:
261
+ """
262
+ Refuse ``if array:`` and ``bool(array)``, whose meaning would be unclear.
263
+
264
+ .. versionadded:: 0.1.0
265
+
266
+ Raises
267
+ ------
268
+ RefusedOperationError
269
+ Always.
270
+ """
271
+ raise RefusedOperationError(TRUTH_OPERATION, TRUTH_ALTERNATIVE)
272
+
273
+ def __matmul__(self, other: object) -> NoReturn:
274
+ """
275
+ Refuse ``array @ other``; numdaplot has no linear algebra.
276
+
277
+ .. versionadded:: 0.1.0
278
+
279
+ Parameters
280
+ ----------
281
+ other
282
+ Any value.
283
+
284
+ Raises
285
+ ------
286
+ RefusedOperationError
287
+ Always.
288
+ """
289
+ raise RefusedOperationError(MATRIX_PRODUCT_OPERATION, MATRIX_PRODUCT_ALTERNATIVE)
290
+
291
+ def __rmatmul__(self, other: object) -> NoReturn:
292
+ """
293
+ Refuse ``other @ array``; numdaplot has no linear algebra.
294
+
295
+ .. versionadded:: 0.1.0
296
+
297
+ Parameters
298
+ ----------
299
+ other
300
+ Any value.
301
+
302
+ Raises
303
+ ------
304
+ RefusedOperationError
305
+ Always.
306
+ """
307
+ raise RefusedOperationError(MATRIX_PRODUCT_OPERATION, MATRIX_PRODUCT_ALTERNATIVE)
308
+
309
+
310
+ def refuse_comparison(symbol: str, alternative: str) -> NoReturn:
311
+ """
312
+ Raise the error refusing a comparison operator.
313
+
314
+ .. versionadded:: 0.1.0
315
+
316
+ Parameters
317
+ ----------
318
+ symbol
319
+ The comparison operator, such as ``"<"``.
320
+ alternative
321
+ What to use instead.
322
+
323
+ Raises
324
+ ------
325
+ RefusedOperationError
326
+ Always.
327
+
328
+ Examples
329
+ --------
330
+ >>> import numdaplot as ndp
331
+ >>> from numdaplot.arrays.array_refusals import refuse_comparison
332
+ >>> try:
333
+ ... refuse_comparison("<", "select")
334
+ ... except ndp.RefusedOperationError as error:
335
+ ... print(error)
336
+ Comparing an Array with < is not available, use select instead.
337
+ """
338
+ operation = COMPARISON_OPERATION.format(symbol=symbol)
339
+ raise RefusedOperationError(operation, alternative)