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,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a column name is not a non-empty text.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_COLUMN_NAME_MESSAGE = "Expected a column name as a non-empty text, got {column_name!r}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidColumnNameError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a column name is empty or is not a text, such as a number in a pandas DataFrame.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
column_name
|
|
21
|
+
The rejected name.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
column_name
|
|
26
|
+
The rejected name.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.NameChange(old_name="price", new_name="")
|
|
33
|
+
... except ndp.InvalidColumnNameError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected a column name as a non-empty text, got ''.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, column_name: object) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the column name.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
column_name
|
|
47
|
+
The rejected name.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_COLUMN_NAME_MESSAGE.format(column_name=column_name)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
|
|
52
|
+
self.column_name = column_name
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a setting of a conversion does not apply to it.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_CONVERSION_MESSAGE = (
|
|
10
|
+
"The setting {setting_name} does not apply to a conversion from {source_type_name} to {target_type_name}."
|
|
11
|
+
)
|
|
12
|
+
DATE_FORMAT_ON_TIME_MESSAGE = (
|
|
13
|
+
"The format {date_format_name} has a date, which TIME cannot hold. Give a CustomDateFormat of a time only, "
|
|
14
|
+
'such as "%H:%M".'
|
|
15
|
+
)
|
|
16
|
+
TIME_TYPE_NAME = "TIME"
|
|
17
|
+
TIME_FORMAT_ON_DATE_MESSAGE = (
|
|
18
|
+
"The format {date_format_name} has a time, which DATE cannot hold. "
|
|
19
|
+
"Convert the column to DATETIME first, then to {target_type_name}."
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class InvalidConversionError(NumdaplotError):
|
|
24
|
+
"""
|
|
25
|
+
Raised when a setting of a ``Conversion`` does not apply to the types it converts.
|
|
26
|
+
|
|
27
|
+
For example, a date format given to a conversion between numbers, a format with a time given to
|
|
28
|
+
a ``DATE`` column, or a time zone change given to a conversion from texts.
|
|
29
|
+
|
|
30
|
+
.. versionadded:: 0.1.0
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
setting_name
|
|
35
|
+
Name of the setting, such as ``"format"``.
|
|
36
|
+
source_type_name
|
|
37
|
+
Name of the ``ndp.Type`` member of the column.
|
|
38
|
+
target_type_name
|
|
39
|
+
Name of the ``ndp.Type`` member it is converted to.
|
|
40
|
+
date_format_name
|
|
41
|
+
The name or the pattern of a format with a time, when dates are read or written with it. When omitted, the
|
|
42
|
+
message names the setting and the types.
|
|
43
|
+
|
|
44
|
+
Attributes
|
|
45
|
+
----------
|
|
46
|
+
setting_name
|
|
47
|
+
Name of the setting.
|
|
48
|
+
source_type_name
|
|
49
|
+
Name of the ``ndp.Type`` member of the column.
|
|
50
|
+
target_type_name
|
|
51
|
+
Name of the ``ndp.Type`` member it is converted to.
|
|
52
|
+
date_format_name
|
|
53
|
+
The name or the pattern of a format with a time used on dates, ``None`` for other conversions.
|
|
54
|
+
|
|
55
|
+
Examples
|
|
56
|
+
--------
|
|
57
|
+
>>> import numdaplot as ndp
|
|
58
|
+
>>> prices = ndp.Table.from_arrays({"price": ndp.Array.from_list([12.5])})
|
|
59
|
+
>>> day_first = ndp.DateFormat.DAY_MONTH_YEAR
|
|
60
|
+
>>> try:
|
|
61
|
+
... prices.convert(ndp.Conversion(column="price", dtype=ndp.Type.TEXT, format=day_first))
|
|
62
|
+
... except ndp.InvalidConversionError as error:
|
|
63
|
+
... print(error)
|
|
64
|
+
The setting format does not apply to a conversion from FLOAT64 to TEXT.
|
|
65
|
+
>>> days = ndp.Table.from_arrays({"day": ndp.Array.from_list(["31/12/2026 14:30"])})
|
|
66
|
+
>>> day_and_time = ndp.DateFormat.DAY_MONTH_YEAR_TIME
|
|
67
|
+
>>> try:
|
|
68
|
+
... days.convert(ndp.Conversion(column="day", dtype=ndp.Type.DATE, format=day_and_time))
|
|
69
|
+
... except ndp.InvalidConversionError as error:
|
|
70
|
+
... print(error)
|
|
71
|
+
The format DAY_MONTH_YEAR_TIME has a time, which DATE cannot hold.
|
|
72
|
+
Convert the column to DATETIME first, then to DATE.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
def __init__(
|
|
76
|
+
self,
|
|
77
|
+
setting_name: str,
|
|
78
|
+
source_type_name: str,
|
|
79
|
+
target_type_name: str,
|
|
80
|
+
date_format_name: str | None = None,
|
|
81
|
+
) -> None:
|
|
82
|
+
"""
|
|
83
|
+
Build the error message from the setting and the types of the conversion.
|
|
84
|
+
|
|
85
|
+
.. versionadded:: 0.1.0
|
|
86
|
+
|
|
87
|
+
Parameters
|
|
88
|
+
----------
|
|
89
|
+
setting_name
|
|
90
|
+
Name of the setting.
|
|
91
|
+
source_type_name
|
|
92
|
+
Name of the ``ndp.Type`` member of the column.
|
|
93
|
+
target_type_name
|
|
94
|
+
Name of the ``ndp.Type`` member it is converted to.
|
|
95
|
+
date_format_name
|
|
96
|
+
The name or the pattern of a format with a time, when dates are read or written with it, or of a format with
|
|
97
|
+
a date, when times of day are read or written with it. When omitted, the message names the setting and the
|
|
98
|
+
types.
|
|
99
|
+
"""
|
|
100
|
+
message = INVALID_CONVERSION_MESSAGE.format(
|
|
101
|
+
setting_name=setting_name,
|
|
102
|
+
source_type_name=source_type_name,
|
|
103
|
+
target_type_name=target_type_name,
|
|
104
|
+
)
|
|
105
|
+
converts_times = TIME_TYPE_NAME in (source_type_name, target_type_name)
|
|
106
|
+
if date_format_name is not None and converts_times:
|
|
107
|
+
message = DATE_FORMAT_ON_TIME_MESSAGE.format(date_format_name=date_format_name)
|
|
108
|
+
|
|
109
|
+
if date_format_name is not None and not converts_times:
|
|
110
|
+
message = TIME_FORMAT_ON_DATE_MESSAGE.format(
|
|
111
|
+
date_format_name=date_format_name,
|
|
112
|
+
target_type_name=target_type_name,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
super().__init__(message)
|
|
116
|
+
self.setting_name = setting_name
|
|
117
|
+
self.source_type_name = source_type_name
|
|
118
|
+
self.target_type_name = target_type_name
|
|
119
|
+
self.date_format_name = date_format_name
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a count of values is too low.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_COUNT_MESSAGE = "Expected a count of at least {minimum}, got {count}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidCountError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a count of values is lower than the minimum it needs.
|
|
15
|
+
|
|
16
|
+
``Spacing`` needs at least 2 values when both bounds are included, and at least 1 otherwise.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
count
|
|
23
|
+
The rejected count.
|
|
24
|
+
minimum
|
|
25
|
+
The lowest accepted count.
|
|
26
|
+
|
|
27
|
+
Attributes
|
|
28
|
+
----------
|
|
29
|
+
count
|
|
30
|
+
The rejected count.
|
|
31
|
+
minimum
|
|
32
|
+
The lowest accepted count.
|
|
33
|
+
|
|
34
|
+
Examples
|
|
35
|
+
--------
|
|
36
|
+
>>> import numdaplot as ndp
|
|
37
|
+
>>> try:
|
|
38
|
+
... ndp.Spacing(start=0, stop=1, count=0)
|
|
39
|
+
... except ndp.InvalidCountError as error:
|
|
40
|
+
... print(error)
|
|
41
|
+
Expected a count of at least 2, got 0.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
def __init__(self, count: int, minimum: int) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Build the error message from the count and the minimum.
|
|
47
|
+
|
|
48
|
+
.. versionadded:: 0.1.0
|
|
49
|
+
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
count
|
|
53
|
+
The rejected count.
|
|
54
|
+
minimum
|
|
55
|
+
The lowest accepted count.
|
|
56
|
+
"""
|
|
57
|
+
message = INVALID_COUNT_MESSAGE.format(count=count, minimum=minimum)
|
|
58
|
+
super().__init__(message)
|
|
59
|
+
|
|
60
|
+
self.count = count
|
|
61
|
+
self.minimum = minimum
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a custom date pattern cannot read dates.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_DATE_FORMAT_MESSAGE = "Expected a pattern with a date or a time code and no time zone code, got {pattern!r}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidDateFormatError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a custom pattern has no date nor time code, or has a time zone code.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
pattern
|
|
21
|
+
The rejected pattern.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
pattern
|
|
26
|
+
The rejected pattern.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.CustomDateFormat("%d/%m/%Y %z")
|
|
33
|
+
... except ndp.InvalidDateFormatError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected a pattern with a date or a time code and no time zone code, got '%d/%m/%Y %z'.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, pattern: str) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the rejected pattern.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
pattern
|
|
47
|
+
The rejected pattern.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_DATE_FORMAT_MESSAGE.format(pattern=pattern)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
self.pattern = pattern
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a standard deviation is negative.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_DEVIATION_MESSAGE = "Expected a deviation of at least 0, got {deviation}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidDeviationError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a normal distribution is given a negative standard deviation.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
deviation
|
|
21
|
+
The rejected standard deviation.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
deviation
|
|
26
|
+
The rejected standard deviation.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.Normal(mean=0, deviation=-1)
|
|
33
|
+
... except ndp.InvalidDeviationError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected a deviation of at least 0, got -1.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, deviation: float) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the deviation.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
deviation
|
|
47
|
+
The rejected standard deviation.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_DEVIATION_MESSAGE.format(deviation=deviation)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
|
|
52
|
+
self.deviation = deviation
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a fraction is outside 0 to 1.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_FRACTION_MESSAGE = "Expected a fraction between 0 and 1, got {value}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidFractionError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a value expected to be a fraction is lower than 0, greater than 1 or not a number.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
value
|
|
21
|
+
The rejected value.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
value
|
|
26
|
+
The rejected value.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.Quantile(1.5)
|
|
33
|
+
... except ndp.InvalidFractionError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected a fraction between 0 and 1, got 1.5.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, value: float) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the rejected value.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
value
|
|
47
|
+
The rejected value.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_FRACTION_MESSAGE.format(value=value)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
self.value = value
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when Brackets are not given exactly one label per bracket.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_LABEL_COUNT_MESSAGE = "Expected {bracket_count} labels, one per bracket, got {label_count}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidLabelCountError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the labels of ``Brackets`` are not exactly one per bracket.
|
|
15
|
+
|
|
16
|
+
There is one bracket between two limits, plus one for each open end.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
bracket_count
|
|
23
|
+
The number of brackets.
|
|
24
|
+
label_count
|
|
25
|
+
The number of labels given.
|
|
26
|
+
|
|
27
|
+
Attributes
|
|
28
|
+
----------
|
|
29
|
+
bracket_count
|
|
30
|
+
The number of brackets.
|
|
31
|
+
label_count
|
|
32
|
+
The number of labels given.
|
|
33
|
+
|
|
34
|
+
Examples
|
|
35
|
+
--------
|
|
36
|
+
>>> import numdaplot as ndp
|
|
37
|
+
>>> try:
|
|
38
|
+
... ndp.Brackets(limits=[0, 18, 65], labels=["child", "adult", "senior"])
|
|
39
|
+
... except ndp.InvalidLabelCountError as error:
|
|
40
|
+
... print(error)
|
|
41
|
+
Expected 2 labels, one per bracket, got 3.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
def __init__(self, bracket_count: int, label_count: int) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Build the error message from the two counts.
|
|
47
|
+
|
|
48
|
+
.. versionadded:: 0.1.0
|
|
49
|
+
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
bracket_count
|
|
53
|
+
The number of brackets.
|
|
54
|
+
label_count
|
|
55
|
+
The number of labels given.
|
|
56
|
+
"""
|
|
57
|
+
message = INVALID_LABEL_COUNT_MESSAGE.format(bracket_count=bracket_count, label_count=label_count)
|
|
58
|
+
super().__init__(message)
|
|
59
|
+
|
|
60
|
+
self.bracket_count = bracket_count
|
|
61
|
+
self.label_count = label_count
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when the limits of Brackets do not form valid brackets.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
TOO_FEW_LIMITS_MESSAGE = "Expected at least 2 limits, or 1 with an open first or last bracket, got {limit_count}."
|
|
10
|
+
UNORDERED_LIMITS_MESSAGE = "Expected limits in strictly increasing order, got {later_limit} after {earlier_limit}."
|
|
11
|
+
EMPTY_BRACKET_MESSAGE = "The bracket from {low} to {high} holds no integer."
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InvalidLimitsError(NumdaplotError):
|
|
15
|
+
"""
|
|
16
|
+
Raised when the limits of ``Brackets`` do not form valid brackets.
|
|
17
|
+
|
|
18
|
+
The limits must strictly increase, and form at least one bracket. On a column of integers, each bracket between two
|
|
19
|
+
limits must hold an integer.
|
|
20
|
+
|
|
21
|
+
.. versionadded:: 0.1.0
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
limits
|
|
26
|
+
The limits of the brackets.
|
|
27
|
+
empty_bracket
|
|
28
|
+
The low and the high limit of a bracket holding no integer, when the limits are valid but that bracket is not.
|
|
29
|
+
When omitted, the limits themselves are wrong.
|
|
30
|
+
|
|
31
|
+
Attributes
|
|
32
|
+
----------
|
|
33
|
+
limits
|
|
34
|
+
The limits of the brackets.
|
|
35
|
+
empty_bracket
|
|
36
|
+
The limits of the bracket holding no integer, ``None`` when the limits themselves are wrong.
|
|
37
|
+
|
|
38
|
+
Examples
|
|
39
|
+
--------
|
|
40
|
+
>>> import numdaplot as ndp
|
|
41
|
+
>>> try:
|
|
42
|
+
... ndp.Brackets(limits=[0, 10, 10])
|
|
43
|
+
... except ndp.InvalidLimitsError as error:
|
|
44
|
+
... print(error)
|
|
45
|
+
Expected limits in strictly increasing order, got 10 after 10.
|
|
46
|
+
>>> try:
|
|
47
|
+
... ndp.Brackets(limits=[0])
|
|
48
|
+
... except ndp.InvalidLimitsError as error:
|
|
49
|
+
... print(error)
|
|
50
|
+
Expected at least 2 limits, or 1 with an open first or last bracket, got 1.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
def __init__(self, limits: list[int | float], empty_bracket: list[int | float] | None = None) -> None:
|
|
54
|
+
"""
|
|
55
|
+
Build the error message from the first problem of the limits.
|
|
56
|
+
|
|
57
|
+
.. versionadded:: 0.1.0
|
|
58
|
+
|
|
59
|
+
Parameters
|
|
60
|
+
----------
|
|
61
|
+
limits
|
|
62
|
+
The limits of the brackets.
|
|
63
|
+
empty_bracket
|
|
64
|
+
The low and the high limit of a bracket holding no integer. When omitted, the limits themselves are wrong.
|
|
65
|
+
"""
|
|
66
|
+
message = write_limits_message(limits, empty_bracket)
|
|
67
|
+
super().__init__(message)
|
|
68
|
+
|
|
69
|
+
self.limits = limits
|
|
70
|
+
self.empty_bracket = empty_bracket
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def write_limits_message(limits: list[int | float], empty_bracket: list[int | float] | None) -> str:
|
|
74
|
+
"""
|
|
75
|
+
Return the message naming the first problem of the limits of brackets.
|
|
76
|
+
|
|
77
|
+
.. versionadded:: 0.1.0
|
|
78
|
+
|
|
79
|
+
Parameters
|
|
80
|
+
----------
|
|
81
|
+
limits
|
|
82
|
+
The limits of the brackets.
|
|
83
|
+
empty_bracket
|
|
84
|
+
The low and the high limit of a bracket holding no integer, or None.
|
|
85
|
+
|
|
86
|
+
Returns
|
|
87
|
+
-------
|
|
88
|
+
str
|
|
89
|
+
The empty bracket, else the first limit not greater than the previous one, else the number of limits.
|
|
90
|
+
|
|
91
|
+
Examples
|
|
92
|
+
--------
|
|
93
|
+
>>> from numdaplot.errors.invalid_limits_error import write_limits_message
|
|
94
|
+
>>> write_limits_message([5.2, 5.8], [5.2, 5.8])
|
|
95
|
+
'The bracket from 5.2 to 5.8 holds no integer.'
|
|
96
|
+
"""
|
|
97
|
+
if empty_bracket is not None:
|
|
98
|
+
low, high = empty_bracket
|
|
99
|
+
empty_message = EMPTY_BRACKET_MESSAGE.format(low=low, high=high)
|
|
100
|
+
return empty_message
|
|
101
|
+
|
|
102
|
+
for earlier_limit, later_limit in zip(limits, limits[1:], strict=False):
|
|
103
|
+
is_greater = later_limit > earlier_limit
|
|
104
|
+
if not is_greater:
|
|
105
|
+
unordered_message = UNORDERED_LIMITS_MESSAGE.format(earlier_limit=earlier_limit, later_limit=later_limit)
|
|
106
|
+
return unordered_message
|
|
107
|
+
|
|
108
|
+
limit_count = len(limits)
|
|
109
|
+
too_few_message = TOO_FEW_LIMITS_MESSAGE.format(limit_count=limit_count)
|
|
110
|
+
|
|
111
|
+
return too_few_message
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when an opacity is outside what can be drawn.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_OPACITY_MESSAGE = "Expected an opacity above 0 and up to 1, got {opacity}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidOpacityError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when an opacity is 0 or lower, which would draw nothing, greater than 1, or not a number.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
opacity
|
|
21
|
+
The rejected opacity.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
opacity
|
|
26
|
+
The rejected opacity.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.ScatterChart(opacity=0.0)
|
|
33
|
+
... except ndp.InvalidOpacityError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected an opacity above 0 and up to 1, got 0.0.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, opacity: float) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the opacity.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
opacity
|
|
47
|
+
The rejected opacity.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_OPACITY_MESSAGE.format(opacity=opacity)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
|
|
52
|
+
self.opacity = opacity
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when the size of a point cannot be drawn.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_POINT_SIZE_MESSAGE = "Expected a point size above 0, got {point_size}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidPointSizeError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the size of a point is 0 or lower, infinite, or not a number.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
point_size
|
|
21
|
+
The rejected size.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
point_size
|
|
26
|
+
The rejected size.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.ScatterChart(point_size=-1.0)
|
|
33
|
+
... except ndp.InvalidPointSizeError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected a point size above 0, got -1.0.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, point_size: float) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the size.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
point_size
|
|
47
|
+
The rejected size.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_POINT_SIZE_MESSAGE.format(point_size=point_size)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
|
|
52
|
+
self.point_size = point_size
|