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,214 @@
1
+ """
2
+ Column operations of a Table: choice, renaming, conversion and addition.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from typing import Self
8
+
9
+ from numdaplot.settings.argument_types import checked_arguments
10
+ from numdaplot.tables.columns.added_column import add_frame_column
11
+ from numdaplot.tables.columns.chosen_columns import choose_frame_columns
12
+ from numdaplot.tables.columns.column_choice import ColumnChoice
13
+ from numdaplot.tables.columns.conversion import Conversion
14
+ from numdaplot.tables.columns.converted_column import convert_column
15
+ from numdaplot.tables.columns.new_column import NewColumn
16
+ from numdaplot.tables.columns.renamed_columns import rename_frame_columns
17
+ from numdaplot.tables.columns.renaming import Renaming
18
+ from numdaplot.tables.frames.named_column_errors import NamedColumnErrors
19
+ from numdaplot.tables.table_data import TableData
20
+
21
+
22
+ class TableColumns(TableData):
23
+ """
24
+ Column operations of a Table: ``choose_columns``, ``rename``, ``convert`` and ``add_column``.
25
+
26
+ .. versionadded:: 0.1.0
27
+ """
28
+
29
+ @checked_arguments
30
+ def choose_columns(self, choice: ColumnChoice) -> Self:
31
+ """
32
+ Return the Table with only some columns, or without some columns.
33
+
34
+ .. versionadded:: 0.1.0
35
+
36
+ Parameters
37
+ ----------
38
+ choice
39
+ The columns, and whether to keep them, in the order of the list, or to drop them.
40
+
41
+ Returns
42
+ -------
43
+ Self
44
+ A new Table.
45
+
46
+ Raises
47
+ ------
48
+ InvalidTypeError
49
+ When an argument is not of the type its annotation names.
50
+ ColumnNotFoundError
51
+ When a named column does not exist.
52
+
53
+ Examples
54
+ --------
55
+ >>> import numdaplot as ndp
56
+ >>> cities = ndp.Array.from_list(["Paris"])
57
+ >>> prices = ndp.Array.from_list([1.5])
58
+ >>> table = ndp.Table.from_arrays({"city": cities, "price": prices})
59
+ >>> table.choose_columns(ndp.ColumnChoice(columns=["city"], mode=ndp.ColumnMode.DROP)).column_names
60
+ ['price']
61
+ """
62
+ chosen_frame = choose_frame_columns(self._frame, choice)
63
+ chosen_table = self._wrap(chosen_frame)
64
+
65
+ return chosen_table
66
+
67
+ @checked_arguments
68
+ def rename(self, renaming: Renaming) -> Self:
69
+ """
70
+ Return the Table with renamed columns, every renaming applied at once.
71
+
72
+ Two columns can swap their names in a single call.
73
+
74
+ .. versionadded:: 0.1.0
75
+
76
+ Parameters
77
+ ----------
78
+ renaming
79
+ The ``NameChange`` of each renamed column.
80
+
81
+ Returns
82
+ -------
83
+ Self
84
+ A new Table, columns in the same order.
85
+
86
+ Raises
87
+ ------
88
+ InvalidTypeError
89
+ When an argument is not of the type its annotation names.
90
+ ColumnNotFoundError
91
+ When a renamed column does not exist.
92
+ DuplicateColumnError
93
+ When a new name is the name of a column kept as it is.
94
+
95
+ Examples
96
+ --------
97
+ >>> import numdaplot as ndp
98
+ >>> table = ndp.Table.from_arrays({"prix": ndp.Array.from_list([1.5])})
99
+ >>> table.rename(ndp.Renaming(changes=[ndp.NameChange(old_name="prix", new_name="price")])).column_names
100
+ ['price']
101
+ """
102
+ renamed_frame = rename_frame_columns(self._frame, renaming)
103
+ renamed_table = self._wrap(renamed_frame)
104
+
105
+ return renamed_table
106
+
107
+ @checked_arguments
108
+ def convert(self, conversion: Conversion) -> Self:
109
+ """
110
+ Return the Table with a column converted to another type, missing values staying missing.
111
+
112
+ .. versionadded:: 0.1.0
113
+
114
+ Parameters
115
+ ----------
116
+ conversion
117
+ The column, its new type, and the date format or the time zone change. Accepted: between number
118
+ types, from numbers, booleans, categories, dates, datetimes and durations to texts, from texts and
119
+ categories to numbers, booleans (``"true"`` or ``"false"`` in any case), dates or datetimes, from any
120
+ other type to categories, between dates and datetimes, and a time zone change of datetimes.
121
+
122
+ Returns
123
+ -------
124
+ Self
125
+ A new Table, the column at its place.
126
+
127
+ Raises
128
+ ------
129
+ InvalidTypeError
130
+ When an argument is not of the type its annotation names.
131
+ ColumnNotFoundError
132
+ When the column does not exist.
133
+ IncompatibleTypesError
134
+ When the conversion is not accepted.
135
+ InvalidConversionError
136
+ When the format, the time zone change or the boolean rule does not apply to the conversion.
137
+ InvalidLimitsError
138
+ When ``Brackets`` cut integers and a bracket between two limits holds no integer.
139
+ UnmatchedValueError
140
+ When a number is in no bracket of ``Brackets`` whose ``others`` is ``Unmatched.ERROR``.
141
+ ValueConversionError
142
+ At the first value that cannot be stored in the new type, such as ``"abc"`` read as a number,
143
+ 2.5 stored as an integer, 3 read as a boolean with ``ZERO_ONE``, ``"31/02/2026"`` read as a date, or
144
+ ``"25:00"`` read as a time of day.
145
+ TimeOverflowError
146
+ When a value converted to ``DATETIME`` is outside 1677 to 2262.
147
+ TimeZoneMismatchError
148
+ When the time zone change does not apply to whether the datetimes have a zone.
149
+
150
+ Examples
151
+ --------
152
+ >>> import numdaplot as ndp
153
+ >>> table = ndp.Table.from_arrays({"zip_code": ndp.Array.from_list(["06000", "75001"])})
154
+ >>> table.convert(ndp.Conversion(column="zip_code", dtype=ndp.Type.INT32))
155
+ zip_code
156
+ INT32
157
+ 0 6000
158
+ 1 75001
159
+ """
160
+ column = self._read_column(conversion.column)
161
+ with NamedColumnErrors(column):
162
+ converted_column = convert_column(column, conversion)
163
+
164
+ converted_frame = self._frame.copy(deep=False)
165
+ converted_frame[conversion.column] = converted_column
166
+ converted_table = self._wrap(converted_frame)
167
+
168
+ return converted_table
169
+
170
+ @checked_arguments
171
+ def add_column(self, new_column: NewColumn) -> Self:
172
+ """
173
+ Return the Table with one more column, or with a column replaced.
174
+
175
+ .. versionadded:: 0.1.0
176
+
177
+ Parameters
178
+ ----------
179
+ new_column
180
+ The name, a one-dimensional Array with one value per row, and what to do when the name exists.
181
+
182
+ Returns
183
+ -------
184
+ Self
185
+ A new Table. A new column is placed last; a replaced column keeps its place.
186
+
187
+ Raises
188
+ ------
189
+ InvalidTypeError
190
+ When an argument is not of the type its annotation names.
191
+ DimensionError
192
+ When the Array does not have one dimension.
193
+ ShapeMismatchError
194
+ When the Array does not have one value per row.
195
+ DuplicateColumnError
196
+ When the name exists and ``on_conflict`` is ``Conflict.ERROR``.
197
+ TimeOverflowError
198
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
199
+
200
+ Examples
201
+ --------
202
+ >>> import numdaplot as ndp
203
+ >>> table = ndp.Table.from_arrays({"price": ndp.Array.from_list([10.0, 20.0])})
204
+ >>> taxed_prices = table.column("price") * 1.2
205
+ >>> table.add_column(ndp.NewColumn(name="taxed_price", values=taxed_prices))
206
+ price taxed_price
207
+ FLOAT64 FLOAT64
208
+ 0 10.0 12.0
209
+ 1 20.0 24.0
210
+ """
211
+ extended_frame = add_frame_column(self._frame, new_column)
212
+ extended_table = self._wrap(extended_frame)
213
+
214
+ return extended_table
@@ -0,0 +1,351 @@
1
+ """
2
+ Conversion of a Table to and from pandas, Arrays and Python values.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from typing import TYPE_CHECKING, Any, Self, cast
10
+
11
+ import pandas
12
+
13
+ from numdaplot.arrays.array import Array, create_array
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
+ from numdaplot.tables.files.column_names import ColumnNames
19
+ from numdaplot.tables.frames.array_frame import build_array_frame
20
+ from numdaplot.tables.frames.column_values import convert_column_values, find_column_missing, read_array_values
21
+ from numdaplot.tables.frames.frame_equality import are_frames_equal
22
+ from numdaplot.tables.frames.table_text import format_table
23
+ from numdaplot.tables.frames.time_columns import read_time_objects_frame
24
+ from numdaplot.tables.frames.time_zones import find_column_time_zone
25
+ from numdaplot.tables.preview.notebook_display import format_table_html
26
+ from numdaplot.tables.preview.shown_columns import ShownColumns
27
+ from numdaplot.tables.table_data import TableData
28
+
29
+ if TYPE_CHECKING:
30
+ from numdaplot.arrays.equality import Equality
31
+
32
+ SINGLE_VALUE_COUNT = 1
33
+ FIRST_POSITION = 0
34
+ EQUALITY_TARGET = "Table.is_equal other"
35
+ EQUALITY_EXPECTED = "a Table"
36
+
37
+
38
+ class TableConversion(TableData):
39
+ """
40
+ Conversion of a Table to and from pandas, Arrays and Python values.
41
+
42
+ .. versionadded:: 0.1.0
43
+ """
44
+
45
+ @classmethod
46
+ @checked_arguments
47
+ def from_pandas(cls, frame: pandas.DataFrame, column_names: ColumnNames = ColumnNames.CLEANED) -> Self:
48
+ """
49
+ Return a Table holding a copy of a pandas DataFrame; changing the DataFrame never changes the Table.
50
+
51
+ .. versionadded:: 0.1.0
52
+
53
+ Parameters
54
+ ----------
55
+ frame
56
+ A pandas DataFrame whose index is the row numbers 0, 1, 2... Python objects become dates, datetimes,
57
+ durations, times of day, integers, decimals or booleans when they all are, and texts otherwise. Durations
58
+ of any unit become ``DURATION``, and ``datetime.time`` objects ``TIME``.
59
+ column_names
60
+ Whether the column names are cleaned, ``ColumnNames.CLEANED`` by default: the spaces, tabs and line breaks
61
+ at the start and the end of each name are removed. ``ColumnNames.KEPT`` keeps the names as written.
62
+
63
+ Returns
64
+ -------
65
+ Self
66
+ A new Table.
67
+
68
+ Raises
69
+ ------
70
+ InvalidTypeError
71
+ When an argument is not of the type its annotation names.
72
+ UnsupportedIndexError
73
+ When the index holds other values: call ``reset_index()`` first to keep them as a column.
74
+ InvalidColumnNameError, DuplicateColumnError
75
+ When a column name is not a non-empty text, even once cleaned, or appears twice, or two names become the
76
+ same once cleaned.
77
+ UnsupportedTypeError
78
+ When a column has a type numdaplot does not support, such as complex numbers
79
+ or datetimes with a time zone.
80
+ TimeOverflowError
81
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
82
+
83
+ Examples
84
+ --------
85
+ >>> import pandas
86
+ >>> import numdaplot as ndp
87
+ >>> ndp.Table.from_pandas(pandas.DataFrame({"city": ["Pau", None], "count": [2, 3]}))
88
+ city count
89
+ TEXT INT64
90
+ 0 Pau 2
91
+ 1 <NA> 3
92
+ """
93
+ table = cls._from_read_frame(frame, column_names)
94
+
95
+ return table
96
+
97
+ @classmethod
98
+ @checked_arguments
99
+ def from_arrays(cls, columns: dict[str, Array]) -> Self:
100
+ """
101
+ Return a Table whose columns hold the values of one-dimensional Arrays.
102
+
103
+ .. versionadded:: 0.1.0
104
+
105
+ Parameters
106
+ ----------
107
+ columns
108
+ One Array per column, by column name, all of the same length.
109
+
110
+ Returns
111
+ -------
112
+ Self
113
+ A new Table, columns in the order of the dictionary.
114
+
115
+ Raises
116
+ ------
117
+ InvalidTypeError
118
+ When an argument is not of the type its annotation names.
119
+ EmptyListError
120
+ When there is no column.
121
+ InvalidColumnNameError
122
+ When a column name is not a non-empty text.
123
+ DimensionError
124
+ When an Array does not have one dimension.
125
+ ShapeMismatchError
126
+ When the Arrays do not have the same length.
127
+ TimeOverflowError
128
+ When a column holds a datetime outside 1677 to 2262, or a duration beyond about 292 years.
129
+
130
+ Examples
131
+ --------
132
+ >>> import numdaplot as ndp
133
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon"])
134
+ >>> prices = ndp.Array.from_list([1.5, 8.0])
135
+ >>> ndp.Table.from_arrays({"city": cities, "price": prices})
136
+ city price
137
+ TEXT FLOAT64
138
+ 0 Paris 1.5
139
+ 1 Lyon 8.0
140
+ """
141
+ frame = build_array_frame(columns)
142
+ table = cls._create(frame)
143
+
144
+ return table
145
+
146
+ def to_pandas(self) -> pandas.DataFrame:
147
+ """
148
+ Return a pandas copy of the Table; changing it never changes the Table.
149
+
150
+ Integers, booleans and texts use the pandas dtypes that accept missing values (``pd.NA``).
151
+
152
+ .. versionadded:: 0.1.0
153
+
154
+ Returns
155
+ -------
156
+ pandas.DataFrame
157
+ A copy, rows numbered from 0. Times of day are ``datetime.time`` objects, as pandas has no type for them.
158
+
159
+ Examples
160
+ --------
161
+ >>> import numdaplot as ndp
162
+ >>> ndp.Table.from_arrays({"count": ndp.Array.from_list([2, 3])}).to_pandas().dtypes.tolist()
163
+ [Int64Dtype()]
164
+ """
165
+ pandas_frame = read_time_objects_frame(self._frame)
166
+
167
+ return pandas_frame
168
+
169
+ @checked_arguments
170
+ def column(self, column_name: str) -> Array:
171
+ """
172
+ Return the values of a column as an Array.
173
+
174
+ .. versionadded:: 0.1.0
175
+
176
+ Parameters
177
+ ----------
178
+ column_name
179
+ The name of the column.
180
+
181
+ Returns
182
+ -------
183
+ Array
184
+ A one-dimensional Array of the type of the column, with the same number of values as the Table has rows;
185
+ a ``CATEGORY`` column gives a ``TEXT`` Array.
186
+
187
+ Raises
188
+ ------
189
+ InvalidTypeError
190
+ When an argument is not of the type its annotation names.
191
+ ColumnNotFoundError
192
+ When no column has this name.
193
+ UnsupportedMissingError
194
+ When an integer or boolean column has missing values, which an Array cannot hold: remove them with
195
+ ``drop_missing``, or convert an integer column to ``FLOAT64`` first.
196
+ TimeZoneMismatchError
197
+ When the column holds datetimes with a time zone, which an Array cannot hold: remove the zone first
198
+ with ``TimeZoneMode.REMOVE``.
199
+
200
+ Examples
201
+ --------
202
+ >>> import numdaplot as ndp
203
+ >>> table = ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5, 8.0])})
204
+ >>> table.column("price").compute(ndp.Sum()).to_value()
205
+ 9.5
206
+ """
207
+ column = self._read_column(column_name)
208
+ array_values = read_array_values(column)
209
+ column_array = create_array(array_values)
210
+
211
+ return column_array
212
+
213
+ def to_value(self) -> Any:
214
+ """
215
+ Return the single value of a Table of one row and one column, as a Python value.
216
+
217
+ .. versionadded:: 0.1.0
218
+
219
+ Returns
220
+ -------
221
+ Any
222
+ The value, ``None`` when it is missing. A datetime with a time zone keeps its zone.
223
+
224
+ Raises
225
+ ------
226
+ NotSingleValueError
227
+ When the Table does not hold exactly one value.
228
+
229
+ Examples
230
+ --------
231
+ >>> import numdaplot as ndp
232
+ >>> table = ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5, 8.0])})
233
+ >>> highest_price = ndp.Calculation(column="price", function=ndp.Max())
234
+ >>> table.aggregate(ndp.Aggregation(calculations=[highest_price])).to_value()
235
+ 8.0
236
+ """
237
+ value_count = self.row_count * self.column_count
238
+ if value_count != SINGLE_VALUE_COUNT:
239
+ raise NotSingleValueError(value_count)
240
+
241
+ column = self._frame.iloc[:, FIRST_POSITION]
242
+ missing = find_column_missing(column)
243
+ is_missing = bool(missing[FIRST_POSITION])
244
+ if is_missing:
245
+ return None
246
+
247
+ time_zone = find_column_time_zone(column)
248
+ if time_zone is not None:
249
+ moment = column.iloc[FIRST_POSITION]
250
+ zone_datetime = moment.to_pydatetime()
251
+ return zone_datetime
252
+
253
+ values = convert_column_values(column)
254
+ python_values = to_python_list(values)
255
+ single_value = python_values[FIRST_POSITION]
256
+
257
+ return single_value
258
+
259
+ @checked_arguments
260
+ def is_equal(self, equality: Equality) -> bool:
261
+ """
262
+ Return whether this Table and another one have the same columns, in the same order, with the same values.
263
+
264
+ Two missing values at the same row are equal. Datetime columns in different time zones are different,
265
+ even for the same instants.
266
+
267
+ .. versionadded:: 0.1.0
268
+
269
+ Parameters
270
+ ----------
271
+ equality
272
+ The other Table, and whether the type of each column must also be the same.
273
+
274
+ Returns
275
+ -------
276
+ bool
277
+ True when both Tables are equal.
278
+
279
+ Raises
280
+ ------
281
+ InvalidTypeError
282
+ When an argument is not of the type its annotation names.
283
+
284
+ Examples
285
+ --------
286
+ >>> import numdaplot as ndp
287
+ >>> integers = ndp.Table.from_arrays({"count": ndp.Array.from_list([1, 2])})
288
+ >>> decimals = ndp.Table.from_arrays({"count": ndp.Array.from_list([1.0, 2.0])})
289
+ >>> integers.is_equal(ndp.Equality(other=decimals))
290
+ True
291
+ """
292
+ other = cast(object, equality.other)
293
+ if not isinstance(other, TableData):
294
+ raise InvalidTypeError(EQUALITY_TARGET, EQUALITY_EXPECTED, other)
295
+
296
+ other_frame = other._frame
297
+ is_equal = are_frames_equal(self._frame, other_frame, equality.types)
298
+
299
+ return is_equal
300
+
301
+ def __repr__(self) -> str:
302
+ """
303
+ Return the text of the Table, with the type of each column under its name.
304
+
305
+ A long Table only shows its first and last rows, as in pandas. Every column is shown, going on after a line
306
+ break, ended by a backslash, when they do not fit in the width of the terminal.
307
+
308
+ .. versionadded:: 0.1.0
309
+
310
+ Returns
311
+ -------
312
+ str
313
+ The text shown by ``print(table)``.
314
+
315
+ Examples
316
+ --------
317
+ >>> import numdaplot as ndp
318
+ >>> print(ndp.Table.from_arrays({"paid": ndp.Array.from_list([True, False])}))
319
+ paid
320
+ BOOL
321
+ 0 True
322
+ 1 False
323
+ """
324
+ table_text = format_table(self._frame)
325
+
326
+ return table_text
327
+
328
+ def _repr_html_(self) -> str:
329
+ """
330
+ Return the HTML table a Jupyter notebook shows for a Table written at the end of a cell.
331
+
332
+ The table is the one of ``preview``: every column, with the type of each column under its name. A long Table
333
+ only shows its first and last rows, as its text does.
334
+
335
+ .. versionadded:: 0.1.0
336
+
337
+ Returns
338
+ -------
339
+ str
340
+ The HTML table, or a note for a Table without rows or without columns.
341
+
342
+ Examples
343
+ --------
344
+ >>> import numdaplot as ndp
345
+ >>> table = ndp.Table.from_arrays({"paid": ndp.Array.from_list([True, False])})
346
+ >>> "BOOL" in table._repr_html_()
347
+ True
348
+ """
349
+ table_html = format_table_html(self._frame, ShownColumns.ALL)
350
+
351
+ return table_html