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.
- numdaplot/__init__.py +506 -0
- numdaplot/arrays/__init__.py +5 -0
- numdaplot/arrays/array.py +92 -0
- numdaplot/arrays/array_arithmetic.py +404 -0
- numdaplot/arrays/array_calculation.py +143 -0
- numdaplot/arrays/array_conversion.py +150 -0
- numdaplot/arrays/array_creation.py +371 -0
- numdaplot/arrays/array_data.py +281 -0
- numdaplot/arrays/array_layout.py +179 -0
- numdaplot/arrays/array_logic.py +227 -0
- numdaplot/arrays/array_reflected_arithmetic.py +334 -0
- numdaplot/arrays/array_refusals.py +339 -0
- numdaplot/arrays/array_selection.py +195 -0
- numdaplot/arrays/array_sorting.py +59 -0
- numdaplot/arrays/axis_number.py +58 -0
- numdaplot/arrays/calculation/__init__.py +5 -0
- numdaplot/arrays/calculation/counting_statistics.py +325 -0
- numdaplot/arrays/calculation/location_statistics.py +268 -0
- numdaplot/arrays/calculation/math_function_values.py +183 -0
- numdaplot/arrays/calculation/statistic_values.py +209 -0
- numdaplot/arrays/calculation/time_function_values.py +419 -0
- numdaplot/arrays/conversion/__init__.py +5 -0
- numdaplot/arrays/conversion/array_text.py +62 -0
- numdaplot/arrays/conversion/equality_check.py +72 -0
- numdaplot/arrays/conversion/python_values.py +70 -0
- numdaplot/arrays/conversion/time_text.py +290 -0
- numdaplot/arrays/creation/__init__.py +5 -0
- numdaplot/arrays/creation/date_parts.py +89 -0
- numdaplot/arrays/creation/date_parts_values.py +437 -0
- numdaplot/arrays/creation/distribution.py +54 -0
- numdaplot/arrays/creation/filled_values.py +58 -0
- numdaplot/arrays/creation/list_conversion.py +311 -0
- numdaplot/arrays/creation/list_shape.py +97 -0
- numdaplot/arrays/creation/normal.py +65 -0
- numdaplot/arrays/creation/numpy_conversion.py +149 -0
- numdaplot/arrays/creation/random_integers.py +104 -0
- numdaplot/arrays/creation/random_values.py +97 -0
- numdaplot/arrays/creation/range_values.py +73 -0
- numdaplot/arrays/creation/spacing.py +84 -0
- numdaplot/arrays/creation/spacing_values.py +63 -0
- numdaplot/arrays/creation/uniform.py +63 -0
- numdaplot/arrays/equality.py +68 -0
- numdaplot/arrays/layout/__init__.py +5 -0
- numdaplot/arrays/layout/sorting_values.py +113 -0
- numdaplot/arrays/layout/unique_values.py +49 -0
- numdaplot/arrays/mapping/__init__.py +5 -0
- numdaplot/arrays/mapping/mapped_values.py +286 -0
- numdaplot/arrays/mapping/unmatched.py +50 -0
- numdaplot/arrays/mapping/value_change.py +55 -0
- numdaplot/arrays/mapping/value_mapping.py +161 -0
- numdaplot/arrays/math_functions/__init__.py +5 -0
- numdaplot/arrays/math_functions/absolute.py +27 -0
- numdaplot/arrays/math_functions/cosine.py +28 -0
- numdaplot/arrays/math_functions/exponential.py +27 -0
- numdaplot/arrays/math_functions/logarithm.py +72 -0
- numdaplot/arrays/math_functions/math_function.py +58 -0
- numdaplot/arrays/math_functions/round.py +58 -0
- numdaplot/arrays/math_functions/sine.py +28 -0
- numdaplot/arrays/math_functions/square_root.py +27 -0
- numdaplot/arrays/operations/__init__.py +5 -0
- numdaplot/arrays/operations/boolean_operands.py +48 -0
- numdaplot/arrays/operations/combination.py +157 -0
- numdaplot/arrays/operations/float_errors.py +170 -0
- numdaplot/arrays/operations/integer_bounds.py +175 -0
- numdaplot/arrays/operations/integer_rules.py +397 -0
- numdaplot/arrays/operations/operand.py +139 -0
- numdaplot/arrays/operations/time_arithmetic.py +479 -0
- numdaplot/arrays/operations/time_bounds.py +286 -0
- numdaplot/arrays/operations/time_result_bounds.py +397 -0
- numdaplot/arrays/operations/transformation.py +54 -0
- numdaplot/arrays/operations/type_requirements.py +94 -0
- numdaplot/arrays/replacement.py +66 -0
- numdaplot/arrays/selection/__init__.py +5 -0
- numdaplot/arrays/selection/comparison_masks.py +131 -0
- numdaplot/arrays/selection/membership_masks.py +118 -0
- numdaplot/arrays/selection/missing_mask.py +50 -0
- numdaplot/arrays/selection/region_index.py +178 -0
- numdaplot/arrays/selection/replaced_values.py +120 -0
- numdaplot/arrays/selection/rule_mask.py +83 -0
- numdaplot/arrays/selection/time_reference.py +172 -0
- numdaplot/arrays/shape.py +74 -0
- numdaplot/arrays/type_match.py +51 -0
- numdaplot/data_types/__init__.py +5 -0
- numdaplot/data_types/library.py +57 -0
- numdaplot/data_types/numpy_mapping.py +207 -0
- numdaplot/data_types/pandas_mapping.py +114 -0
- numdaplot/data_types/time_of_day.py +292 -0
- numdaplot/data_types/type.py +224 -0
- numdaplot/data_types/value_family.py +149 -0
- numdaplot/data_types/value_type.py +147 -0
- numdaplot/dates/__init__.py +5 -0
- numdaplot/dates/custom_date_format.py +83 -0
- numdaplot/dates/date_format.py +120 -0
- numdaplot/dates/date_part.py +59 -0
- numdaplot/dates/date_part_unit.py +153 -0
- numdaplot/dates/date_period.py +57 -0
- numdaplot/dates/duration_in.py +58 -0
- numdaplot/dates/duration_unit.py +90 -0
- numdaplot/dates/period_unit.py +101 -0
- numdaplot/dates/time_function.py +56 -0
- numdaplot/dates/time_zone.py +68 -0
- numdaplot/dates/time_zone_change.py +71 -0
- numdaplot/dates/time_zone_mode.py +81 -0
- numdaplot/dates/to_duration.py +58 -0
- numdaplot/errors/__init__.py +7 -0
- numdaplot/errors/broadcast_warning.py +36 -0
- numdaplot/errors/calculation_warning.py +35 -0
- numdaplot/errors/cell_out_of_range_error.py +77 -0
- numdaplot/errors/column_not_found_error.py +64 -0
- numdaplot/errors/conflicting_settings_error.py +60 -0
- numdaplot/errors/dimension_error.py +62 -0
- numdaplot/errors/display_warning.py +32 -0
- numdaplot/errors/duplicate_column_error.py +82 -0
- numdaplot/errors/duplicate_label_error.py +55 -0
- numdaplot/errors/duplicate_statistic_error.py +55 -0
- numdaplot/errors/duplicate_value_error.py +54 -0
- numdaplot/errors/empty_array_error.py +55 -0
- numdaplot/errors/empty_list_error.py +52 -0
- numdaplot/errors/empty_region_error.py +34 -0
- numdaplot/errors/empty_text_error.py +34 -0
- numdaplot/errors/empty_total_error.py +62 -0
- numdaplot/errors/empty_values_error.py +34 -0
- numdaplot/errors/file_access_error.py +70 -0
- numdaplot/errors/file_exists_error.py +62 -0
- numdaplot/errors/file_not_found_error.py +56 -0
- numdaplot/errors/incompatible_charts_error.py +80 -0
- numdaplot/errors/incompatible_types_error.py +104 -0
- numdaplot/errors/integer_overflow_error.py +61 -0
- numdaplot/errors/invalid_base_error.py +52 -0
- numdaplot/errors/invalid_bin_width_error.py +66 -0
- numdaplot/errors/invalid_bounds_error.py +58 -0
- numdaplot/errors/invalid_chart_data_error.py +81 -0
- numdaplot/errors/invalid_color_count_error.py +63 -0
- numdaplot/errors/invalid_color_error.py +51 -0
- numdaplot/errors/invalid_column_name_error.py +52 -0
- numdaplot/errors/invalid_conversion_error.py +119 -0
- numdaplot/errors/invalid_count_error.py +61 -0
- numdaplot/errors/invalid_date_format_error.py +51 -0
- numdaplot/errors/invalid_deviation_error.py +52 -0
- numdaplot/errors/invalid_fraction_error.py +51 -0
- numdaplot/errors/invalid_label_count_error.py +61 -0
- numdaplot/errors/invalid_limits_error.py +111 -0
- numdaplot/errors/invalid_opacity_error.py +52 -0
- numdaplot/errors/invalid_point_size_error.py +52 -0
- numdaplot/errors/invalid_position_error.py +106 -0
- numdaplot/errors/invalid_resolution_error.py +51 -0
- numdaplot/errors/invalid_rotation_error.py +53 -0
- numdaplot/errors/invalid_seed_error.py +53 -0
- numdaplot/errors/invalid_separator_error.py +52 -0
- numdaplot/errors/invalid_shape_error.py +52 -0
- numdaplot/errors/invalid_sheet_name_error.py +54 -0
- numdaplot/errors/invalid_size_error.py +58 -0
- numdaplot/errors/invalid_step_error.py +77 -0
- numdaplot/errors/invalid_suffixes_error.py +61 -0
- numdaplot/errors/invalid_time_zone_change_error.py +63 -0
- numdaplot/errors/invalid_type_error.py +79 -0
- numdaplot/errors/irregular_list_error.py +36 -0
- numdaplot/errors/join_relation_error.py +183 -0
- numdaplot/errors/missing_dependency_error.py +58 -0
- numdaplot/errors/missing_type_error.py +36 -0
- numdaplot/errors/missing_value_error.py +62 -0
- numdaplot/errors/not_single_value_error.py +53 -0
- numdaplot/errors/numdaplot_error.py +25 -0
- numdaplot/errors/numdaplot_warning.py +34 -0
- numdaplot/errors/occupied_cell_error.py +63 -0
- numdaplot/errors/out_of_domain_error.py +70 -0
- numdaplot/errors/readability_warning.py +35 -0
- numdaplot/errors/refused_operation_error.py +64 -0
- numdaplot/errors/refused_setting_error.py +60 -0
- numdaplot/errors/rejected_dates.py +60 -0
- numdaplot/errors/repeated_key.py +36 -0
- numdaplot/errors/shape_mismatch_error.py +67 -0
- numdaplot/errors/time_overflow_error.py +131 -0
- numdaplot/errors/time_zone_mismatch_error.py +83 -0
- numdaplot/errors/unknown_time_zone_error.py +51 -0
- numdaplot/errors/unmatched_value_error.py +81 -0
- numdaplot/errors/unsupported_image_format_error.py +56 -0
- numdaplot/errors/unsupported_index_error.py +38 -0
- numdaplot/errors/unsupported_missing_error.py +129 -0
- numdaplot/errors/unsupported_type_error.py +62 -0
- numdaplot/errors/value_conversion_error.py +215 -0
- numdaplot/ordering/__init__.py +5 -0
- numdaplot/ordering/missing_position.py +46 -0
- numdaplot/ordering/order.py +46 -0
- numdaplot/package_version.py +36 -0
- numdaplot/plots/__init__.py +5 -0
- numdaplot/plots/chart_layer.py +47 -0
- numdaplot/plots/charts/__init__.py +5 -0
- numdaplot/plots/charts/bar_chart.py +98 -0
- numdaplot/plots/charts/bar_layout.py +58 -0
- numdaplot/plots/charts/bin_count.py +61 -0
- numdaplot/plots/charts/bin_width.py +78 -0
- numdaplot/plots/charts/box_chart.py +97 -0
- numdaplot/plots/charts/cell_values.py +61 -0
- numdaplot/plots/charts/chart.py +59 -0
- numdaplot/plots/charts/chart_settings.py +105 -0
- numdaplot/plots/charts/color_scale.py +147 -0
- numdaplot/plots/charts/heatmap_chart.py +92 -0
- numdaplot/plots/charts/histogram_chart.py +93 -0
- numdaplot/plots/charts/line_chart.py +100 -0
- numdaplot/plots/charts/line_type.py +75 -0
- numdaplot/plots/charts/marker_shape.py +113 -0
- numdaplot/plots/charts/missing_chart.py +60 -0
- numdaplot/plots/charts/missing_map_chart.py +27 -0
- numdaplot/plots/charts/orientation.py +58 -0
- numdaplot/plots/charts/outliers.py +49 -0
- numdaplot/plots/charts/percentages.py +55 -0
- numdaplot/plots/charts/pie_chart.py +87 -0
- numdaplot/plots/charts/scatter_chart.py +159 -0
- numdaplot/plots/charts/value_axis.py +66 -0
- numdaplot/plots/data/__init__.py +5 -0
- numdaplot/plots/data/array_values.py +128 -0
- numdaplot/plots/data/chart_data.py +143 -0
- numdaplot/plots/data/chart_values.py +109 -0
- numdaplot/plots/data/column_reading.py +468 -0
- numdaplot/plots/data/heatmap_values.py +63 -0
- numdaplot/plots/data/missing_cells.py +165 -0
- numdaplot/plots/data/pie_values.py +215 -0
- numdaplot/plots/data/point_values.py +249 -0
- numdaplot/plots/data/position_kind.py +83 -0
- numdaplot/plots/data/renamed_layers.py +340 -0
- numdaplot/plots/data/sample_values.py +160 -0
- numdaplot/plots/data/shown_columns.py +248 -0
- numdaplot/plots/data/table_values.py +256 -0
- numdaplot/plots/data/unique_labels.py +45 -0
- numdaplot/plots/drawing/__init__.py +5 -0
- numdaplot/plots/drawing/bar_drawing.py +316 -0
- numdaplot/plots/drawing/box_drawing.py +344 -0
- numdaplot/plots/drawing/cell_merging.py +237 -0
- numdaplot/plots/drawing/chart_texts.py +124 -0
- numdaplot/plots/drawing/color_bar.py +57 -0
- numdaplot/plots/drawing/color_scale_values.py +120 -0
- numdaplot/plots/drawing/default_labels.py +41 -0
- numdaplot/plots/drawing/drawn_chart.py +50 -0
- numdaplot/plots/drawing/grid_axes.py +75 -0
- numdaplot/plots/drawing/heatmap_drawing.py +313 -0
- numdaplot/plots/drawing/histogram_drawing.py +350 -0
- numdaplot/plots/drawing/label_room.py +344 -0
- numdaplot/plots/drawing/label_thinning.py +216 -0
- numdaplot/plots/drawing/layer_alignment.py +319 -0
- numdaplot/plots/drawing/layer_colors.py +123 -0
- numdaplot/plots/drawing/line_drawing.py +85 -0
- numdaplot/plots/drawing/marker_codes.py +20 -0
- numdaplot/plots/drawing/missing_drawing.py +360 -0
- numdaplot/plots/drawing/moment_period_formatter.py +253 -0
- numdaplot/plots/drawing/pie_drawing.py +185 -0
- numdaplot/plots/drawing/plot_axes.py +38 -0
- numdaplot/plots/drawing/plot_drawing.py +288 -0
- numdaplot/plots/drawing/plot_theme.py +45 -0
- numdaplot/plots/drawing/position_axis.py +278 -0
- numdaplot/plots/drawing/scatter_drawing.py +364 -0
- numdaplot/plots/drawing/series_colors.py +177 -0
- numdaplot/plots/drawing/size_inches.py +45 -0
- numdaplot/plots/drawing/style_drawing.py +410 -0
- numdaplot/plots/drawing/text_contrast.py +44 -0
- numdaplot/plots/drawing/tick_rotation.py +354 -0
- numdaplot/plots/drawing/time_axis.py +212 -0
- numdaplot/plots/drawing/whole_numbers.py +72 -0
- numdaplot/plots/figure/__init__.py +5 -0
- numdaplot/plots/figure/cell.py +95 -0
- numdaplot/plots/figure/figure.py +256 -0
- numdaplot/plots/figure/figure_drawing.py +99 -0
- numdaplot/plots/figure/figure_style.py +60 -0
- numdaplot/plots/figure/layout.py +71 -0
- numdaplot/plots/figure/placement.py +150 -0
- numdaplot/plots/layer_reading.py +166 -0
- numdaplot/plots/output/__init__.py +5 -0
- numdaplot/plots/output/image_saving.py +187 -0
- numdaplot/plots/output/plot_display.py +181 -0
- numdaplot/plots/output/shown_object.py +45 -0
- numdaplot/plots/overlay_checks.py +245 -0
- numdaplot/plots/plot.py +31 -0
- numdaplot/plots/plot_data.py +140 -0
- numdaplot/plots/plot_distribution_creation.py +237 -0
- numdaplot/plots/plot_output.py +124 -0
- numdaplot/plots/plot_overlays.py +273 -0
- numdaplot/plots/plot_overview_creation.py +195 -0
- numdaplot/plots/plot_series_creation.py +213 -0
- numdaplot/plots/style/__init__.py +5 -0
- numdaplot/plots/style/axis_settings.py +60 -0
- numdaplot/plots/style/color.py +168 -0
- numdaplot/plots/style/custom_color.py +65 -0
- numdaplot/plots/style/grid_lines.py +49 -0
- numdaplot/plots/style/image_options.py +71 -0
- numdaplot/plots/style/legend_position.py +149 -0
- numdaplot/plots/style/plot_style.py +136 -0
- numdaplot/plots/style/size.py +70 -0
- numdaplot/plots/style/size_unit.py +62 -0
- numdaplot/positions/__init__.py +5 -0
- numdaplot/positions/axis.py +54 -0
- numdaplot/positions/index.py +51 -0
- numdaplot/positions/range.py +90 -0
- numdaplot/positions/region.py +92 -0
- numdaplot/py.typed +0 -0
- numdaplot/ratios/__init__.py +5 -0
- numdaplot/ratios/fraction.py +40 -0
- numdaplot/ratios/measure.py +48 -0
- numdaplot/rules/__init__.py +5 -0
- numdaplot/rules/between.py +78 -0
- numdaplot/rules/bounds.py +83 -0
- numdaplot/rules/case.py +48 -0
- numdaplot/rules/contains.py +63 -0
- numdaplot/rules/equal.py +43 -0
- numdaplot/rules/greater.py +39 -0
- numdaplot/rules/greater_or_equal.py +38 -0
- numdaplot/rules/is_in.py +67 -0
- numdaplot/rules/is_missing.py +25 -0
- numdaplot/rules/is_present.py +25 -0
- numdaplot/rules/less.py +39 -0
- numdaplot/rules/less_or_equal.py +38 -0
- numdaplot/rules/not_equal.py +45 -0
- numdaplot/rules/rule.py +62 -0
- numdaplot/rules/rule_values.py +44 -0
- numdaplot/rules/value_rule.py +110 -0
- numdaplot/settings/__init__.py +5 -0
- numdaplot/settings/argument_types.py +327 -0
- numdaplot/settings/field_types.py +593 -0
- numdaplot/statistics/__init__.py +5 -0
- numdaplot/statistics/count.py +71 -0
- numdaplot/statistics/count_distinct.py +27 -0
- numdaplot/statistics/counted_missing.py +46 -0
- numdaplot/statistics/maximum.py +27 -0
- numdaplot/statistics/mean.py +27 -0
- numdaplot/statistics/median.py +27 -0
- numdaplot/statistics/minimum.py +27 -0
- numdaplot/statistics/most_frequent.py +27 -0
- numdaplot/statistics/most_frequent_count.py +27 -0
- numdaplot/statistics/quantile.py +61 -0
- numdaplot/statistics/standard_deviation.py +29 -0
- numdaplot/statistics/statistic.py +63 -0
- numdaplot/statistics/sum.py +27 -0
- numdaplot/tables/__init__.py +5 -0
- numdaplot/tables/aggregation/__init__.py +5 -0
- numdaplot/tables/aggregation/aggregated_frame.py +189 -0
- numdaplot/tables/aggregation/aggregation.py +97 -0
- numdaplot/tables/aggregation/calculation.py +123 -0
- numdaplot/tables/aggregation/result_column.py +108 -0
- numdaplot/tables/aggregation/row_groups.py +96 -0
- numdaplot/tables/aggregation/statistic_name.py +122 -0
- numdaplot/tables/columns/__init__.py +5 -0
- numdaplot/tables/columns/added_column.py +89 -0
- numdaplot/tables/columns/boolean_conversion.py +144 -0
- numdaplot/tables/columns/boolean_rule.py +59 -0
- numdaplot/tables/columns/bracket_end.py +50 -0
- numdaplot/tables/columns/bracket_names.py +346 -0
- numdaplot/tables/columns/bracketed_column.py +179 -0
- numdaplot/tables/columns/brackets.py +234 -0
- numdaplot/tables/columns/chosen_columns.py +55 -0
- numdaplot/tables/columns/column_choice.py +84 -0
- numdaplot/tables/columns/column_mode.py +64 -0
- numdaplot/tables/columns/column_names.py +186 -0
- numdaplot/tables/columns/conversion.py +103 -0
- numdaplot/tables/columns/converted_column.py +669 -0
- numdaplot/tables/columns/date_conversion.py +526 -0
- numdaplot/tables/columns/date_range.py +135 -0
- numdaplot/tables/columns/name_change.py +67 -0
- numdaplot/tables/columns/new_column.py +79 -0
- numdaplot/tables/columns/number_conversion.py +281 -0
- numdaplot/tables/columns/renamed_columns.py +60 -0
- numdaplot/tables/columns/renaming.py +81 -0
- numdaplot/tables/columns/text_conversion.py +70 -0
- numdaplot/tables/columns/time_conversion.py +313 -0
- numdaplot/tables/columns/time_zone_conversion.py +128 -0
- numdaplot/tables/conflict.py +68 -0
- numdaplot/tables/description/__init__.py +5 -0
- numdaplot/tables/description/described_frame.py +335 -0
- numdaplot/tables/description/description.py +155 -0
- numdaplot/tables/duplicates/__init__.py +5 -0
- numdaplot/tables/duplicates/deduplicated_frame.py +66 -0
- numdaplot/tables/duplicates/deduplication.py +88 -0
- numdaplot/tables/duplicates/keep.py +81 -0
- numdaplot/tables/files/__init__.py +5 -0
- numdaplot/tables/files/column_names.py +60 -0
- numdaplot/tables/files/csv_file.py +265 -0
- numdaplot/tables/files/csv_read_options.py +89 -0
- numdaplot/tables/files/csv_separator.py +41 -0
- numdaplot/tables/files/csv_write_options.py +79 -0
- numdaplot/tables/files/decimal_count.py +42 -0
- numdaplot/tables/files/encoding.py +82 -0
- numdaplot/tables/files/excel_file.py +171 -0
- numdaplot/tables/files/excel_read_options.py +79 -0
- numdaplot/tables/files/excel_sheet.py +50 -0
- numdaplot/tables/files/excel_time_cells.py +146 -0
- numdaplot/tables/files/excel_write_options.py +63 -0
- numdaplot/tables/files/file_access.py +152 -0
- numdaplot/tables/files/file_paths.py +106 -0
- numdaplot/tables/files/json_decimals.py +387 -0
- numdaplot/tables/files/json_file.py +203 -0
- numdaplot/tables/files/json_layout.py +63 -0
- numdaplot/tables/files/json_read_options.py +64 -0
- numdaplot/tables/files/json_write_options.py +71 -0
- numdaplot/tables/files/missing_texts.py +63 -0
- numdaplot/tables/files/optional_package.py +42 -0
- numdaplot/tables/files/pandas_backend.py +11 -0
- numdaplot/tables/files/parquet_file.py +91 -0
- numdaplot/tables/files/parquet_read_options.py +56 -0
- numdaplot/tables/files/sas_file.py +94 -0
- numdaplot/tables/files/sas_read_options.py +67 -0
- numdaplot/tables/files/stata_file.py +83 -0
- numdaplot/tables/files/stata_read_options.py +56 -0
- numdaplot/tables/files/xpt_read_options.py +65 -0
- numdaplot/tables/filtering/__init__.py +5 -0
- numdaplot/tables/filtering/checked_frame.py +60 -0
- numdaplot/tables/filtering/column_mask.py +71 -0
- numdaplot/tables/filtering/column_match.py +62 -0
- numdaplot/tables/filtering/condition.py +94 -0
- numdaplot/tables/filtering/filter.py +74 -0
- numdaplot/tables/filtering/filter_mode.py +67 -0
- numdaplot/tables/filtering/row_mask.py +152 -0
- numdaplot/tables/filtering/rule_moments.py +164 -0
- numdaplot/tables/frames/__init__.py +5 -0
- numdaplot/tables/frames/array_frame.py +95 -0
- numdaplot/tables/frames/cleaned_names.py +132 -0
- numdaplot/tables/frames/column.py +15 -0
- numdaplot/tables/frames/column_values.py +273 -0
- numdaplot/tables/frames/frame_equality.py +130 -0
- numdaplot/tables/frames/frame_normalization.py +459 -0
- numdaplot/tables/frames/named_column_errors.py +85 -0
- numdaplot/tables/frames/pandas_decimals.py +113 -0
- numdaplot/tables/frames/region_positions.py +113 -0
- numdaplot/tables/frames/table_text.py +222 -0
- numdaplot/tables/frames/time_columns.py +345 -0
- numdaplot/tables/frames/time_range_errors.py +117 -0
- numdaplot/tables/frames/time_zones.py +271 -0
- numdaplot/tables/joining/__init__.py +5 -0
- numdaplot/tables/joining/join.py +110 -0
- numdaplot/tables/joining/join_keys.py +367 -0
- numdaplot/tables/joining/join_mode.py +93 -0
- numdaplot/tables/joining/join_relation.py +149 -0
- numdaplot/tables/joining/join_suffixes.py +71 -0
- numdaplot/tables/joining/joined_frame.py +166 -0
- numdaplot/tables/joining/joined_names.py +107 -0
- numdaplot/tables/joining/joined_rows.py +235 -0
- numdaplot/tables/joining/key_types.py +57 -0
- numdaplot/tables/joining/relation.py +78 -0
- numdaplot/tables/missing/__init__.py +5 -0
- numdaplot/tables/missing/missing_count.py +59 -0
- numdaplot/tables/missing/missing_counts.py +214 -0
- numdaplot/tables/missing/missing_drop.py +98 -0
- numdaplot/tables/missing/missing_mode.py +63 -0
- numdaplot/tables/missing/missing_ratio.py +71 -0
- numdaplot/tables/missing/missing_removal.py +257 -0
- numdaplot/tables/missing/missing_summary.py +174 -0
- numdaplot/tables/missing/ratio_comparison.py +70 -0
- numdaplot/tables/pivot/__init__.py +5 -0
- numdaplot/tables/pivot/pivot_table.py +104 -0
- numdaplot/tables/pivot/pivoted_frame.py +244 -0
- numdaplot/tables/preview/__init__.py +5 -0
- numdaplot/tables/preview/notebook_display.py +238 -0
- numdaplot/tables/preview/preview.py +100 -0
- numdaplot/tables/preview/preview_rows.py +55 -0
- numdaplot/tables/preview/shown_columns.py +62 -0
- numdaplot/tables/preview/side.py +82 -0
- numdaplot/tables/sorting/__init__.py +5 -0
- numdaplot/tables/sorting/sort_key.py +71 -0
- numdaplot/tables/sorting/sorted_frame.py +81 -0
- numdaplot/tables/sorting/sorting.py +82 -0
- numdaplot/tables/table.py +71 -0
- numdaplot/tables/table_calculation.py +172 -0
- numdaplot/tables/table_columns.py +214 -0
- numdaplot/tables/table_conversion.py +351 -0
- numdaplot/tables/table_data.py +321 -0
- numdaplot/tables/table_display.py +56 -0
- numdaplot/tables/table_joining.py +80 -0
- numdaplot/tables/table_layout.py +105 -0
- numdaplot/tables/table_missing.py +146 -0
- numdaplot/tables/table_reading.py +451 -0
- numdaplot/tables/table_refusals.py +295 -0
- numdaplot/tables/table_selection.py +163 -0
- numdaplot/tables/table_writing.py +269 -0
- numdaplot-0.1.0.dist-info/METADATA +176 -0
- numdaplot-0.1.0.dist-info/RECORD +474 -0
- numdaplot-0.1.0.dist-info/WHEEL +4 -0
- numdaplot-0.1.0.dist-info/licenses/LICENSE +28 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
r"""
|
|
2
|
+
Error raised when a column name appears more than once.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
DUPLICATE_COLUMN_MESSAGE = "The column name {column_name!r} appears more than once."
|
|
10
|
+
DUPLICATE_CLEANED_MESSAGE = (
|
|
11
|
+
"The column names {first_name!r} and {second_name!r} both become {column_name!r} once cleaned. "
|
|
12
|
+
"Use ColumnNames.KEPT to keep them as written."
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class DuplicateColumnError(NumdaplotError):
|
|
17
|
+
r"""
|
|
18
|
+
Raised when a column name appears twice.
|
|
19
|
+
|
|
20
|
+
For example in a file header, in a list of columns, when renaming or adding a column, or when two names of a file
|
|
21
|
+
become the same once their spaces and line breaks are removed.
|
|
22
|
+
|
|
23
|
+
.. versionadded:: 0.1.0
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
column_name
|
|
28
|
+
The repeated name.
|
|
29
|
+
original_names
|
|
30
|
+
The two names, as written in the file, that both become ``column_name`` once cleaned. When omitted, the
|
|
31
|
+
name itself appears twice.
|
|
32
|
+
|
|
33
|
+
Attributes
|
|
34
|
+
----------
|
|
35
|
+
column_name
|
|
36
|
+
The repeated name.
|
|
37
|
+
original_names
|
|
38
|
+
The two names as written before cleaning, ``None`` when the name itself appears twice.
|
|
39
|
+
|
|
40
|
+
Examples
|
|
41
|
+
--------
|
|
42
|
+
>>> import tempfile
|
|
43
|
+
>>> from pathlib import Path
|
|
44
|
+
>>> import numdaplot as ndp
|
|
45
|
+
>>> try:
|
|
46
|
+
... ndp.ColumnChoice(columns=["price", "price"])
|
|
47
|
+
... except ndp.DuplicateColumnError as error:
|
|
48
|
+
... print(error)
|
|
49
|
+
The column name 'price' appears more than once.
|
|
50
|
+
>>> path = Path(tempfile.mkdtemp()) / "sales.csv"
|
|
51
|
+
>>> _ = path.write_text("id,id \n1,2\n")
|
|
52
|
+
>>> try:
|
|
53
|
+
... ndp.Table.from_csv(path)
|
|
54
|
+
... except ndp.DuplicateColumnError as error:
|
|
55
|
+
... print(error)
|
|
56
|
+
The column names 'id' and 'id ' both become 'id' once cleaned. Use ColumnNames.KEPT to keep them as written.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
def __init__(self, column_name: str, original_names: list[str] | None = None) -> None:
|
|
60
|
+
"""
|
|
61
|
+
Build the error message from the column name, and from the names before cleaning when they are given.
|
|
62
|
+
|
|
63
|
+
.. versionadded:: 0.1.0
|
|
64
|
+
|
|
65
|
+
Parameters
|
|
66
|
+
----------
|
|
67
|
+
column_name
|
|
68
|
+
The repeated name.
|
|
69
|
+
original_names
|
|
70
|
+
The two names before cleaning. When omitted, the name itself appears twice.
|
|
71
|
+
"""
|
|
72
|
+
message = DUPLICATE_COLUMN_MESSAGE.format(column_name=column_name)
|
|
73
|
+
if original_names is not None:
|
|
74
|
+
first_name, second_name = original_names
|
|
75
|
+
message = DUPLICATE_CLEANED_MESSAGE.format(
|
|
76
|
+
first_name=first_name, second_name=second_name, column_name=column_name
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
super().__init__(message)
|
|
80
|
+
|
|
81
|
+
self.column_name = column_name
|
|
82
|
+
self.original_names = original_names
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a chart labels two values with the same text.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
DUPLICATE_LABEL_MESSAGE = "The label {label!r} appears more than once."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class DuplicateLabelError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when two slices of a ``PieChart`` have the same label, which could not tell them apart.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
label
|
|
21
|
+
The repeated label.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
label
|
|
26
|
+
The repeated label.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> cities = ndp.Array.from_list(["Paris", "Paris"])
|
|
32
|
+
>>> sales = ndp.Array.from_list([120.0, 80.0])
|
|
33
|
+
>>> shares = ndp.Table.from_arrays({"city": cities, "sales": sales})
|
|
34
|
+
>>> chart = ndp.PieChart(labels="city", values="sales")
|
|
35
|
+
>>> try:
|
|
36
|
+
... ndp.Plot.pie(shares, chart)
|
|
37
|
+
... except ndp.DuplicateLabelError as error:
|
|
38
|
+
... print(error)
|
|
39
|
+
The label 'Paris' appears more than once.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def __init__(self, label: str) -> None:
|
|
43
|
+
"""
|
|
44
|
+
Build the error message from the label.
|
|
45
|
+
|
|
46
|
+
.. versionadded:: 0.1.0
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
label
|
|
51
|
+
The repeated label.
|
|
52
|
+
"""
|
|
53
|
+
message = DUPLICATE_LABEL_MESSAGE.format(label=label)
|
|
54
|
+
super().__init__(message)
|
|
55
|
+
self.label = label
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a statistic appears twice in a list of statistics.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
DUPLICATE_STATISTIC_MESSAGE = "The statistic {statistic!r} appears more than once."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class DuplicateStatisticError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the same statistic appears twice in the functions of a ``Description``, which would give two equal rows.
|
|
15
|
+
|
|
16
|
+
Two statistics are the same when they have the same class and the same settings, so ``Quantile(0.25)`` and
|
|
17
|
+
``Quantile(0.75)`` are different.
|
|
18
|
+
|
|
19
|
+
.. versionadded:: 0.1.0
|
|
20
|
+
|
|
21
|
+
Parameters
|
|
22
|
+
----------
|
|
23
|
+
statistic
|
|
24
|
+
The statistic given twice.
|
|
25
|
+
|
|
26
|
+
Attributes
|
|
27
|
+
----------
|
|
28
|
+
statistic
|
|
29
|
+
The statistic given twice.
|
|
30
|
+
|
|
31
|
+
Examples
|
|
32
|
+
--------
|
|
33
|
+
>>> import numdaplot as ndp
|
|
34
|
+
>>> try:
|
|
35
|
+
... ndp.Description(functions=[ndp.Sum(), ndp.Sum()])
|
|
36
|
+
... except ndp.DuplicateStatisticError as error:
|
|
37
|
+
... print(error)
|
|
38
|
+
The statistic Sum() appears more than once.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(self, statistic: object) -> None:
|
|
42
|
+
"""
|
|
43
|
+
Build the error message from the statistic given twice.
|
|
44
|
+
|
|
45
|
+
.. versionadded:: 0.1.0
|
|
46
|
+
|
|
47
|
+
Parameters
|
|
48
|
+
----------
|
|
49
|
+
statistic
|
|
50
|
+
The statistic given twice.
|
|
51
|
+
"""
|
|
52
|
+
message = DUPLICATE_STATISTIC_MESSAGE.format(statistic=statistic)
|
|
53
|
+
super().__init__(message)
|
|
54
|
+
|
|
55
|
+
self.statistic = statistic
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a value is given twice where each value must be unique.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
DUPLICATE_VALUE_MESSAGE = "The value {value!r} appears more than once."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class DuplicateValueError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a value is given twice where each value must be unique.
|
|
15
|
+
|
|
16
|
+
For example, the same old value in two ``ValueChange`` of a ``ValueMapping``.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
value
|
|
23
|
+
The repeated value.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
value
|
|
28
|
+
The repeated value.
|
|
29
|
+
|
|
30
|
+
Examples
|
|
31
|
+
--------
|
|
32
|
+
>>> import numdaplot as ndp
|
|
33
|
+
>>> try:
|
|
34
|
+
... ndp.ValueMapping(changes=[ndp.ValueChange(2, "Femme"), ndp.ValueChange(2, "F")])
|
|
35
|
+
... except ndp.DuplicateValueError as error:
|
|
36
|
+
... print(error)
|
|
37
|
+
The value 2 appears more than once.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(self, value: object) -> None:
|
|
41
|
+
"""
|
|
42
|
+
Build the error message from the repeated value.
|
|
43
|
+
|
|
44
|
+
.. versionadded:: 0.1.0
|
|
45
|
+
|
|
46
|
+
Parameters
|
|
47
|
+
----------
|
|
48
|
+
value
|
|
49
|
+
The repeated value.
|
|
50
|
+
"""
|
|
51
|
+
message = DUPLICATE_VALUE_MESSAGE.format(value=value)
|
|
52
|
+
super().__init__(message)
|
|
53
|
+
|
|
54
|
+
self.value = value
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a statistic needs at least one present value and gets none.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
EMPTY_ARRAY_MESSAGE = "Cannot compute {statistic_name} without any present value."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EmptyArrayError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a statistic that needs at least one value gets none.
|
|
15
|
+
|
|
16
|
+
``Mean`` or ``Max`` cannot be computed on values that are all missing, or on no value at all.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
statistic_name
|
|
23
|
+
Name of the statistic.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
statistic_name
|
|
28
|
+
Name of the statistic.
|
|
29
|
+
|
|
30
|
+
Examples
|
|
31
|
+
--------
|
|
32
|
+
>>> import numdaplot as ndp
|
|
33
|
+
>>> array = ndp.Array.from_list([None, None], dtype=ndp.Type.FLOAT64)
|
|
34
|
+
>>> try:
|
|
35
|
+
... array.compute(ndp.Mean())
|
|
36
|
+
... except ndp.EmptyArrayError as error:
|
|
37
|
+
... print(error)
|
|
38
|
+
Cannot compute Mean without any present value.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(self, statistic_name: str) -> None:
|
|
42
|
+
"""
|
|
43
|
+
Build the error message from the statistic name.
|
|
44
|
+
|
|
45
|
+
.. versionadded:: 0.1.0
|
|
46
|
+
|
|
47
|
+
Parameters
|
|
48
|
+
----------
|
|
49
|
+
statistic_name
|
|
50
|
+
Name of the statistic.
|
|
51
|
+
"""
|
|
52
|
+
message = EMPTY_ARRAY_MESSAGE.format(statistic_name=statistic_name)
|
|
53
|
+
super().__init__(message)
|
|
54
|
+
|
|
55
|
+
self.statistic_name = statistic_name
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a setting receives an empty list.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
EMPTY_LIST_MESSAGE = "Expected at least one {item_name}, got an empty list."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EmptyListError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a setting needs at least one element, such as the conditions of a ``Filter``.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
item_name
|
|
21
|
+
What the list holds, such as ``condition``.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
item_name
|
|
26
|
+
What the list holds, such as ``condition``.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.Filter(conditions=[])
|
|
33
|
+
... except ndp.EmptyListError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected at least one condition, got an empty list.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, item_name: str) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the item name.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
item_name
|
|
47
|
+
What the list holds, such as ``condition``.
|
|
48
|
+
"""
|
|
49
|
+
message = EMPTY_LIST_MESSAGE.format(item_name=item_name)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
|
|
52
|
+
self.item_name = item_name
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a Region chooses neither rows nor columns.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
EMPTY_REGION_MESSAGE = "A Region needs rows, columns or both, got neither."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EmptyRegionError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a ``Region`` is created without rows and without columns, which would choose the whole object.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Examples
|
|
19
|
+
--------
|
|
20
|
+
>>> import numdaplot as ndp
|
|
21
|
+
>>> try:
|
|
22
|
+
... ndp.Region()
|
|
23
|
+
... except ndp.EmptyRegionError as error:
|
|
24
|
+
... print(error)
|
|
25
|
+
A Region needs rows, columns or both, got neither.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(self) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Build the error message.
|
|
31
|
+
|
|
32
|
+
.. versionadded:: 0.1.0
|
|
33
|
+
"""
|
|
34
|
+
super().__init__(EMPTY_REGION_MESSAGE)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a searched text is empty.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
EMPTY_TEXT_MESSAGE = "Expected a non-empty text to search for."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EmptyTextError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a rule receives an empty text to search for, which every text would contain.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Examples
|
|
19
|
+
--------
|
|
20
|
+
>>> import numdaplot as ndp
|
|
21
|
+
>>> try:
|
|
22
|
+
... ndp.Contains("")
|
|
23
|
+
... except ndp.EmptyTextError as error:
|
|
24
|
+
... print(error)
|
|
25
|
+
Expected a non-empty text to search for.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(self) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Build the error message.
|
|
31
|
+
|
|
32
|
+
.. versionadded:: 0.1.0
|
|
33
|
+
"""
|
|
34
|
+
super().__init__(EMPTY_TEXT_MESSAGE)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when the values a chart shares out add up to 0.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
EMPTY_TOTAL_MESSAGE = "{chart_name} needs a positive total, the values of {column_name!r} add up to 0."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EmptyTotalError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the values of a ``PieChart`` add up to 0, which leaves nothing to share out.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
chart_name
|
|
21
|
+
Name of the chart class, such as ``PieChart``.
|
|
22
|
+
column_name
|
|
23
|
+
The column of the values.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
chart_name
|
|
28
|
+
Name of the chart class, such as ``PieChart``.
|
|
29
|
+
column_name
|
|
30
|
+
The column of the values.
|
|
31
|
+
|
|
32
|
+
Examples
|
|
33
|
+
--------
|
|
34
|
+
>>> import numdaplot as ndp
|
|
35
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon"])
|
|
36
|
+
>>> sales = ndp.Array.from_list([0.0, 0.0])
|
|
37
|
+
>>> shares = ndp.Table.from_arrays({"city": cities, "sales": sales})
|
|
38
|
+
>>> chart = ndp.PieChart(labels="city", values="sales")
|
|
39
|
+
>>> try:
|
|
40
|
+
... ndp.Plot.pie(shares, chart)
|
|
41
|
+
... except ndp.EmptyTotalError as error:
|
|
42
|
+
... print(error)
|
|
43
|
+
PieChart needs a positive total, the values of 'sales' add up to 0.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
def __init__(self, chart_name: str, column_name: str) -> None:
|
|
47
|
+
"""
|
|
48
|
+
Build the error message from the chart and the column.
|
|
49
|
+
|
|
50
|
+
.. versionadded:: 0.1.0
|
|
51
|
+
|
|
52
|
+
Parameters
|
|
53
|
+
----------
|
|
54
|
+
chart_name
|
|
55
|
+
Name of the chart class, such as ``PieChart``.
|
|
56
|
+
column_name
|
|
57
|
+
The column of the values.
|
|
58
|
+
"""
|
|
59
|
+
message = EMPTY_TOTAL_MESSAGE.format(chart_name=chart_name, column_name=column_name)
|
|
60
|
+
super().__init__(message)
|
|
61
|
+
self.chart_name = chart_name
|
|
62
|
+
self.column_name = column_name
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a list of accepted values is empty.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
EMPTY_VALUES_MESSAGE = "Expected at least one accepted value, got an empty list."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EmptyValuesError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a rule receives an empty list of accepted values, which would never keep anything.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Examples
|
|
19
|
+
--------
|
|
20
|
+
>>> import numdaplot as ndp
|
|
21
|
+
>>> try:
|
|
22
|
+
... ndp.IsIn([])
|
|
23
|
+
... except ndp.EmptyValuesError as error:
|
|
24
|
+
... print(error)
|
|
25
|
+
Expected at least one accepted value, got an empty list.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(self) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Build the error message.
|
|
31
|
+
|
|
32
|
+
.. versionadded:: 0.1.0
|
|
33
|
+
"""
|
|
34
|
+
super().__init__(EMPTY_VALUES_MESSAGE)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when the file system refuses to read or to write a file.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
FILE_ACCESS_MESSAGE = "Cannot {operation} {path}: {reason}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FileAccessError(NumdaplotError, OSError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a file cannot be read or written: missing folder, missing permission, full disk and so on.
|
|
15
|
+
|
|
16
|
+
It is also a Python ``OSError``. A missing file and an existing file have their own errors,
|
|
17
|
+
``FileNotFoundError`` and ``FileExistsError``.
|
|
18
|
+
|
|
19
|
+
.. versionadded:: 0.1.0
|
|
20
|
+
|
|
21
|
+
Parameters
|
|
22
|
+
----------
|
|
23
|
+
operation
|
|
24
|
+
What was attempted: ``"read"`` or ``"write to"``.
|
|
25
|
+
path
|
|
26
|
+
The path of the file.
|
|
27
|
+
reason
|
|
28
|
+
Why it failed.
|
|
29
|
+
|
|
30
|
+
Attributes
|
|
31
|
+
----------
|
|
32
|
+
operation
|
|
33
|
+
What was attempted: ``"read"`` or ``"write to"``.
|
|
34
|
+
path
|
|
35
|
+
The path of the file.
|
|
36
|
+
reason
|
|
37
|
+
Why it failed.
|
|
38
|
+
|
|
39
|
+
Examples
|
|
40
|
+
--------
|
|
41
|
+
>>> import numdaplot as ndp
|
|
42
|
+
>>> prices = ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5])})
|
|
43
|
+
>>> try:
|
|
44
|
+
... prices.to_csv("missing_folder/prices.csv")
|
|
45
|
+
... except ndp.FileAccessError as error:
|
|
46
|
+
... print(error)
|
|
47
|
+
Cannot write to missing_folder/prices.csv: the folder missing_folder does not exist.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
def __init__(self, operation: str, path: str, reason: str) -> None:
|
|
51
|
+
"""
|
|
52
|
+
Build the error message from the operation, the path and the reason.
|
|
53
|
+
|
|
54
|
+
.. versionadded:: 0.1.0
|
|
55
|
+
|
|
56
|
+
Parameters
|
|
57
|
+
----------
|
|
58
|
+
operation
|
|
59
|
+
What was attempted: ``"read"`` or ``"write to"``.
|
|
60
|
+
path
|
|
61
|
+
The path of the file.
|
|
62
|
+
reason
|
|
63
|
+
Why it failed.
|
|
64
|
+
"""
|
|
65
|
+
message = FILE_ACCESS_MESSAGE.format(operation=operation, path=path, reason=reason)
|
|
66
|
+
super().__init__(message)
|
|
67
|
+
|
|
68
|
+
self.operation = operation
|
|
69
|
+
self.path = path
|
|
70
|
+
self.reason = reason
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a Table would overwrite an existing file.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import builtins
|
|
8
|
+
|
|
9
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
10
|
+
|
|
11
|
+
FILE_EXISTS_MESSAGE = "A file already exists at {path}, pass on_conflict=ndp.Conflict.REPLACE to overwrite it."
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class FileExistsError(NumdaplotError, builtins.FileExistsError):
|
|
15
|
+
"""
|
|
16
|
+
Raised when a Table is written to a path where a file exists and ``on_conflict`` is ``Conflict.ERROR``.
|
|
17
|
+
|
|
18
|
+
It is also a Python ``FileExistsError``, so code catching the Python error keeps working.
|
|
19
|
+
|
|
20
|
+
.. versionadded:: 0.1.0
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
path
|
|
25
|
+
The path of the file, as given.
|
|
26
|
+
|
|
27
|
+
Attributes
|
|
28
|
+
----------
|
|
29
|
+
path
|
|
30
|
+
The path of the file, as given.
|
|
31
|
+
|
|
32
|
+
Examples
|
|
33
|
+
--------
|
|
34
|
+
>>> import tempfile
|
|
35
|
+
>>> from pathlib import Path
|
|
36
|
+
>>> import numdaplot as ndp
|
|
37
|
+
>>> path = Path(tempfile.mkdtemp()) / "prices.csv"
|
|
38
|
+
>>> prices = ndp.Table.from_arrays({"price": ndp.Array.from_list([1.5])})
|
|
39
|
+
>>> prices.to_csv(path)
|
|
40
|
+
>>> try:
|
|
41
|
+
... prices.to_csv(path)
|
|
42
|
+
... except ndp.FileExistsError as error:
|
|
43
|
+
... print(error) # doctest: +ELLIPSIS
|
|
44
|
+
A file already exists at .../prices.csv, pass on_conflict=ndp.Conflict.REPLACE to overwrite it.
|
|
45
|
+
>>> prices.to_csv(path, on_conflict=ndp.Conflict.REPLACE)
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(self, path: str) -> None:
|
|
49
|
+
"""
|
|
50
|
+
Build the error message from the path.
|
|
51
|
+
|
|
52
|
+
.. versionadded:: 0.1.0
|
|
53
|
+
|
|
54
|
+
Parameters
|
|
55
|
+
----------
|
|
56
|
+
path
|
|
57
|
+
The path of the file, as given.
|
|
58
|
+
"""
|
|
59
|
+
message = FILE_EXISTS_MESSAGE.format(path=path)
|
|
60
|
+
super().__init__(message)
|
|
61
|
+
|
|
62
|
+
self.path = path
|