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,106 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a position is not a whole number inside its dimension.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_POSITION_MESSAGE = "Expected a whole position between {lowest} and {highest}, got {position}."
|
|
10
|
+
DEFAULT_LOWEST_POSITION = 0
|
|
11
|
+
MINIMUM_POSITION_MESSAGE = "Expected a whole position of at least {lowest}, got {position}."
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InvalidPositionError(NumdaplotError):
|
|
15
|
+
"""
|
|
16
|
+
Raised when a position falls outside its dimension.
|
|
17
|
+
|
|
18
|
+
A dimension of size 5 accepts the positions from -5 to 4. Without a size, as when an ``Index`` or a ``Cell`` is
|
|
19
|
+
created, the message names the lowest accepted position.
|
|
20
|
+
|
|
21
|
+
.. versionadded:: 0.1.0
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
position
|
|
26
|
+
The rejected position.
|
|
27
|
+
size
|
|
28
|
+
Size of the dimension. When omitted, the size is not known yet, as when an ``Index`` is created.
|
|
29
|
+
lowest
|
|
30
|
+
The lowest accepted position, named when the size is not known, 0 by default.
|
|
31
|
+
|
|
32
|
+
Attributes
|
|
33
|
+
----------
|
|
34
|
+
position
|
|
35
|
+
The rejected position.
|
|
36
|
+
size
|
|
37
|
+
Size of the dimension, or None.
|
|
38
|
+
lowest
|
|
39
|
+
The lowest accepted position.
|
|
40
|
+
|
|
41
|
+
Examples
|
|
42
|
+
--------
|
|
43
|
+
>>> import numdaplot as ndp
|
|
44
|
+
>>> array = ndp.Array.from_list([1, 2, 3])
|
|
45
|
+
>>> try:
|
|
46
|
+
... array.take(ndp.Region(rows=ndp.Index(5)))
|
|
47
|
+
... except ndp.InvalidPositionError as error:
|
|
48
|
+
... print(error)
|
|
49
|
+
Expected a whole position between -3 and 2, got 5.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
def __init__(self, position: object, size: int | None = None, lowest: int = DEFAULT_LOWEST_POSITION) -> None:
|
|
53
|
+
"""
|
|
54
|
+
Build the error message from the position, and the size or the lowest accepted position.
|
|
55
|
+
|
|
56
|
+
.. versionadded:: 0.1.0
|
|
57
|
+
|
|
58
|
+
Parameters
|
|
59
|
+
----------
|
|
60
|
+
position
|
|
61
|
+
The rejected position.
|
|
62
|
+
size
|
|
63
|
+
Size of the dimension. When omitted, the size is not known yet, as when an ``Index`` is created.
|
|
64
|
+
lowest
|
|
65
|
+
The lowest accepted position, named when the size is not known, 0 by default.
|
|
66
|
+
"""
|
|
67
|
+
message = build_position_message(position, size, lowest)
|
|
68
|
+
super().__init__(message)
|
|
69
|
+
|
|
70
|
+
self.position = position
|
|
71
|
+
self.size = size
|
|
72
|
+
self.lowest = lowest
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def build_position_message(position: object, size: int | None, lowest: int) -> str:
|
|
76
|
+
"""
|
|
77
|
+
Return the message of a rejected position, naming the accepted positions that are known.
|
|
78
|
+
|
|
79
|
+
.. versionadded:: 0.1.0
|
|
80
|
+
|
|
81
|
+
Parameters
|
|
82
|
+
----------
|
|
83
|
+
position
|
|
84
|
+
The rejected position.
|
|
85
|
+
size
|
|
86
|
+
Size of the dimension, or None.
|
|
87
|
+
lowest
|
|
88
|
+
The lowest accepted position.
|
|
89
|
+
|
|
90
|
+
Returns
|
|
91
|
+
-------
|
|
92
|
+
str
|
|
93
|
+
The message naming the accepted interval, or the lowest accepted position.
|
|
94
|
+
|
|
95
|
+
Examples
|
|
96
|
+
--------
|
|
97
|
+
>>> from numdaplot.errors.invalid_position_error import build_position_message
|
|
98
|
+
>>> build_position_message(-1, None, 0)
|
|
99
|
+
'Expected a whole position of at least 0, got -1.'
|
|
100
|
+
"""
|
|
101
|
+
if size is not None:
|
|
102
|
+
highest_position = size - 1
|
|
103
|
+
message = INVALID_POSITION_MESSAGE.format(lowest=-size, highest=highest_position, position=position)
|
|
104
|
+
return message
|
|
105
|
+
|
|
106
|
+
return MINIMUM_POSITION_MESSAGE.format(lowest=lowest, position=position)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when an image resolution is lower than 1 dot per inch.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_RESOLUTION_MESSAGE = "Expected a resolution of at least 1 dot per inch, got {dpi}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidResolutionError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the ``dpi`` of ``ImageOptions`` is lower than 1.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
dpi
|
|
21
|
+
The rejected number of dots per inch.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
dpi
|
|
26
|
+
The rejected number of dots per inch.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.ImageOptions(dpi=0)
|
|
33
|
+
... except ndp.InvalidResolutionError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected a resolution of at least 1 dot per inch, got 0.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, dpi: int) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the rejected resolution.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
dpi
|
|
47
|
+
The rejected number of dots per inch.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_RESOLUTION_MESSAGE.format(dpi=dpi)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
self.dpi = dpi
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a rotation is outside the accepted angles.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_ROTATION_MESSAGE = "Expected a rotation from -90 to 90 degrees, got {rotation}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidRotationError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the ``x_tick_rotation`` or the ``y_tick_rotation`` of a ``PlotStyle`` is outside -90 to 90 degrees.
|
|
15
|
+
|
|
16
|
+
Beyond these angles, the labels would be written upside down.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
rotation
|
|
23
|
+
The rotation given.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
rotation
|
|
28
|
+
The rotation given.
|
|
29
|
+
|
|
30
|
+
Examples
|
|
31
|
+
--------
|
|
32
|
+
>>> import numdaplot as ndp
|
|
33
|
+
>>> try:
|
|
34
|
+
... ndp.PlotStyle(x_tick_rotation=120)
|
|
35
|
+
... except ndp.InvalidRotationError as error:
|
|
36
|
+
... print(error)
|
|
37
|
+
Expected a rotation from -90 to 90 degrees, got 120.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(self, rotation: float) -> None:
|
|
41
|
+
"""
|
|
42
|
+
Build the error message from the rotation.
|
|
43
|
+
|
|
44
|
+
.. versionadded:: 0.1.0
|
|
45
|
+
|
|
46
|
+
Parameters
|
|
47
|
+
----------
|
|
48
|
+
rotation
|
|
49
|
+
The rotation given.
|
|
50
|
+
"""
|
|
51
|
+
message = INVALID_ROTATION_MESSAGE.format(rotation=rotation)
|
|
52
|
+
super().__init__(message)
|
|
53
|
+
self.rotation = rotation
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a random seed is negative.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_SEED_MESSAGE = "Expected a seed of at least 0, got {seed}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidSeedError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a random draw is given a negative seed.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
seed
|
|
21
|
+
The rejected seed.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
seed
|
|
26
|
+
The rejected seed.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> dice = ndp.RandomIntegers(low=1, high=6)
|
|
32
|
+
>>> try:
|
|
33
|
+
... ndp.Array.random(dice, shape=ndp.Shape([3]), seed=-1)
|
|
34
|
+
... except ndp.InvalidSeedError as error:
|
|
35
|
+
... print(error)
|
|
36
|
+
Expected a seed of at least 0, got -1.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, seed: int) -> None:
|
|
40
|
+
"""
|
|
41
|
+
Build the error message from the seed.
|
|
42
|
+
|
|
43
|
+
.. versionadded:: 0.1.0
|
|
44
|
+
|
|
45
|
+
Parameters
|
|
46
|
+
----------
|
|
47
|
+
seed
|
|
48
|
+
The rejected seed.
|
|
49
|
+
"""
|
|
50
|
+
message = INVALID_SEED_MESSAGE.format(seed=seed)
|
|
51
|
+
super().__init__(message)
|
|
52
|
+
|
|
53
|
+
self.seed = seed
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a CSV separator is not exactly one character.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_SEPARATOR_MESSAGE = "Expected a separator of exactly one character, got {separator!r}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidSeparatorError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the separator of ``CsvReadOptions`` or ``CsvWriteOptions`` is empty or longer than one character.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
separator
|
|
21
|
+
The rejected separator.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
separator
|
|
26
|
+
The rejected separator.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.CsvReadOptions(separator=";;")
|
|
33
|
+
... except ndp.InvalidSeparatorError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected a separator of exactly one character, got ';;'.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, separator: str) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the separator.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
separator
|
|
47
|
+
The rejected separator.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_SEPARATOR_MESSAGE.format(separator=separator)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
|
|
52
|
+
self.separator = separator
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a shape has no dimension or a negative dimension.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_SHAPE_MESSAGE = "Expected at least one dimension and no negative dimension, got {dimensions}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidShapeError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a shape has no dimension at all, or a dimension lower than 0.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
dimensions
|
|
21
|
+
The rejected dimensions.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
dimensions
|
|
26
|
+
The rejected dimensions.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> try:
|
|
32
|
+
... ndp.Shape([3, -1])
|
|
33
|
+
... except ndp.InvalidShapeError as error:
|
|
34
|
+
... print(error)
|
|
35
|
+
Expected at least one dimension and no negative dimension, got [3, -1].
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, dimensions: list[int]) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Build the error message from the dimensions.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
dimensions
|
|
47
|
+
The rejected dimensions.
|
|
48
|
+
"""
|
|
49
|
+
message = INVALID_SHAPE_MESSAGE.format(dimensions=dimensions)
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
|
|
52
|
+
self.dimensions = dimensions
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when an Excel sheet name is not accepted by Excel.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_SHEET_NAME_MESSAGE = "Expected a sheet name of 1 to 31 characters without [ ] : * ? / \\, got {sheet!r}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidSheetNameError(NumdaplotError):
|
|
13
|
+
r"""
|
|
14
|
+
Raised when Excel would refuse the sheet name of ``ExcelReadOptions`` or ``ExcelWriteOptions``.
|
|
15
|
+
|
|
16
|
+
The name is empty, longer than 31 characters, or holds ``[ ] : * ? / \``.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
sheet
|
|
23
|
+
The rejected sheet name.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
sheet
|
|
28
|
+
The rejected sheet name.
|
|
29
|
+
|
|
30
|
+
Examples
|
|
31
|
+
--------
|
|
32
|
+
>>> import numdaplot as ndp
|
|
33
|
+
>>> try:
|
|
34
|
+
... ndp.ExcelWriteOptions(sheet="Sales/2026")
|
|
35
|
+
... except ndp.InvalidSheetNameError as error:
|
|
36
|
+
... print(error)
|
|
37
|
+
Expected a sheet name of 1 to 31 characters without [ ] : * ? / \, got 'Sales/2026'.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(self, sheet: str) -> None:
|
|
41
|
+
"""
|
|
42
|
+
Build the error message from the sheet name.
|
|
43
|
+
|
|
44
|
+
.. versionadded:: 0.1.0
|
|
45
|
+
|
|
46
|
+
Parameters
|
|
47
|
+
----------
|
|
48
|
+
sheet
|
|
49
|
+
The rejected sheet name.
|
|
50
|
+
"""
|
|
51
|
+
message = INVALID_SHEET_NAME_MESSAGE.format(sheet=sheet)
|
|
52
|
+
super().__init__(message)
|
|
53
|
+
|
|
54
|
+
self.sheet = sheet
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a size is not positive.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_SIZE_MESSAGE = "Expected a positive width and height, got {width} and {height}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidSizeError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the width or the height of a ``Size`` is zero or negative.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
width
|
|
21
|
+
The width given.
|
|
22
|
+
height
|
|
23
|
+
The height given.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
width
|
|
28
|
+
The width given.
|
|
29
|
+
height
|
|
30
|
+
The height given.
|
|
31
|
+
|
|
32
|
+
Examples
|
|
33
|
+
--------
|
|
34
|
+
>>> import numdaplot as ndp
|
|
35
|
+
>>> try:
|
|
36
|
+
... ndp.Size(width=0, height=4.8)
|
|
37
|
+
... except ndp.InvalidSizeError as error:
|
|
38
|
+
... print(error)
|
|
39
|
+
Expected a positive width and height, got 0 and 4.8.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def __init__(self, width: float, height: float) -> None:
|
|
43
|
+
"""
|
|
44
|
+
Build the error message from the width and the height.
|
|
45
|
+
|
|
46
|
+
.. versionadded:: 0.1.0
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
width
|
|
51
|
+
The width given.
|
|
52
|
+
height
|
|
53
|
+
The height given.
|
|
54
|
+
"""
|
|
55
|
+
message = INVALID_SIZE_MESSAGE.format(width=width, height=height)
|
|
56
|
+
super().__init__(message)
|
|
57
|
+
self.width = width
|
|
58
|
+
self.height = height
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when the step of a range is zero, or goes away from its stop.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_STEP_MESSAGE = "Expected a non-zero step, got {step}."
|
|
10
|
+
WRONG_DIRECTION_MESSAGE = "Expected a step going from start to stop, got step {step} from {start} to {stop}."
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class InvalidStepError(NumdaplotError):
|
|
14
|
+
"""
|
|
15
|
+
Raised when a range is given a step of zero, or a step going away from its stop, which never reach the stop.
|
|
16
|
+
|
|
17
|
+
.. versionadded:: 0.1.0
|
|
18
|
+
|
|
19
|
+
Parameters
|
|
20
|
+
----------
|
|
21
|
+
step
|
|
22
|
+
The rejected step.
|
|
23
|
+
start
|
|
24
|
+
The start of the range when the step goes away from the stop. When omitted, the message is about a step of zero.
|
|
25
|
+
stop
|
|
26
|
+
The stop of the range when the step goes away from it. When omitted, the message is about a step of zero.
|
|
27
|
+
|
|
28
|
+
Attributes
|
|
29
|
+
----------
|
|
30
|
+
step
|
|
31
|
+
The rejected step.
|
|
32
|
+
start
|
|
33
|
+
The start of the range, or None for a step of zero.
|
|
34
|
+
stop
|
|
35
|
+
The stop of the range, or None for a step of zero.
|
|
36
|
+
|
|
37
|
+
Examples
|
|
38
|
+
--------
|
|
39
|
+
>>> import numdaplot as ndp
|
|
40
|
+
>>> try:
|
|
41
|
+
... ndp.Range(start=0, stop=10, step=0)
|
|
42
|
+
... except ndp.InvalidStepError as error:
|
|
43
|
+
... print(error)
|
|
44
|
+
Expected a non-zero step, got 0.
|
|
45
|
+
>>> try:
|
|
46
|
+
... ndp.Range(start=5, stop=1)
|
|
47
|
+
... except ndp.InvalidStepError as error:
|
|
48
|
+
... print(error)
|
|
49
|
+
Expected a step going from start to stop, got step 1 from 5 to 1.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
def __init__(self, step: float, start: float | None = None, stop: float | None = None) -> None:
|
|
53
|
+
"""
|
|
54
|
+
Build the error message from the rejected step, and the start and the stop when the step goes away.
|
|
55
|
+
|
|
56
|
+
.. versionadded:: 0.1.0
|
|
57
|
+
|
|
58
|
+
Parameters
|
|
59
|
+
----------
|
|
60
|
+
step
|
|
61
|
+
The rejected step.
|
|
62
|
+
start
|
|
63
|
+
The start of the range when the step goes away from the stop. When omitted, the message is about a step of
|
|
64
|
+
zero.
|
|
65
|
+
stop
|
|
66
|
+
The stop of the range when the step goes away from it. When omitted, the message is about a step of zero.
|
|
67
|
+
"""
|
|
68
|
+
if start is None or stop is None:
|
|
69
|
+
message = INVALID_STEP_MESSAGE.format(step=step)
|
|
70
|
+
else:
|
|
71
|
+
message = WRONG_DIRECTION_MESSAGE.format(step=step, start=start, stop=stop)
|
|
72
|
+
|
|
73
|
+
super().__init__(message)
|
|
74
|
+
|
|
75
|
+
self.step = step
|
|
76
|
+
self.start = start
|
|
77
|
+
self.stop = stop
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when the suffixes of a join are empty or the same.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
INVALID_SUFFIXES_MESSAGE = "Expected two different non-empty suffixes, got {left!r} and {right!r}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidSuffixesError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a ``JoinSuffixes`` has an empty suffix, or the same suffix on both sides.
|
|
15
|
+
|
|
16
|
+
Either would leave two columns of a join with the same name.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
left
|
|
23
|
+
The suffix of the columns of the joined Table.
|
|
24
|
+
right
|
|
25
|
+
The suffix of the columns of the other Table.
|
|
26
|
+
|
|
27
|
+
Attributes
|
|
28
|
+
----------
|
|
29
|
+
left
|
|
30
|
+
The suffix of the columns of the joined Table.
|
|
31
|
+
right
|
|
32
|
+
The suffix of the columns of the other Table.
|
|
33
|
+
|
|
34
|
+
Examples
|
|
35
|
+
--------
|
|
36
|
+
>>> import numdaplot as ndp
|
|
37
|
+
>>> try:
|
|
38
|
+
... ndp.JoinSuffixes(left="_2025", right="_2025")
|
|
39
|
+
... except ndp.InvalidSuffixesError as error:
|
|
40
|
+
... print(error)
|
|
41
|
+
Expected two different non-empty suffixes, got '_2025' and '_2025'.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
def __init__(self, left: str, right: str) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Build the error message from the two suffixes.
|
|
47
|
+
|
|
48
|
+
.. versionadded:: 0.1.0
|
|
49
|
+
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
left
|
|
53
|
+
The suffix of the columns of the joined Table.
|
|
54
|
+
right
|
|
55
|
+
The suffix of the columns of the other Table.
|
|
56
|
+
"""
|
|
57
|
+
message = INVALID_SUFFIXES_MESSAGE.format(left=left, right=right)
|
|
58
|
+
super().__init__(message)
|
|
59
|
+
|
|
60
|
+
self.left = left
|
|
61
|
+
self.right = right
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a time zone change has a zone it does not use, or misses the zone it needs.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
MISSING_ZONE_MESSAGE = "TimeZoneMode.{mode_name} needs a zone."
|
|
10
|
+
EXTRA_ZONE_MESSAGE = "TimeZoneMode.{mode_name} takes no zone."
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class InvalidTimeZoneChangeError(NumdaplotError):
|
|
14
|
+
"""
|
|
15
|
+
Raised when ``TimeZoneMode.ATTRIBUTE`` or ``SHIFT`` has no zone, or ``TimeZoneMode.REMOVE`` has one.
|
|
16
|
+
|
|
17
|
+
.. versionadded:: 0.1.0
|
|
18
|
+
|
|
19
|
+
Parameters
|
|
20
|
+
----------
|
|
21
|
+
mode_name
|
|
22
|
+
Name of the ``TimeZoneMode`` member of the change.
|
|
23
|
+
needs_zone
|
|
24
|
+
True when the mode needs a zone that is missing, False when it has a zone it does not use.
|
|
25
|
+
|
|
26
|
+
Attributes
|
|
27
|
+
----------
|
|
28
|
+
mode_name
|
|
29
|
+
Name of the ``TimeZoneMode`` member of the change.
|
|
30
|
+
needs_zone
|
|
31
|
+
True when the mode needs a zone that is missing, False when it has a zone it does not use.
|
|
32
|
+
|
|
33
|
+
Examples
|
|
34
|
+
--------
|
|
35
|
+
>>> import numdaplot as ndp
|
|
36
|
+
>>> try:
|
|
37
|
+
... ndp.TimeZoneChange(mode=ndp.TimeZoneMode.SHIFT)
|
|
38
|
+
... except ndp.InvalidTimeZoneChangeError as error:
|
|
39
|
+
... print(error)
|
|
40
|
+
TimeZoneMode.SHIFT needs a zone.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def __init__(self, mode_name: str, needs_zone: bool) -> None:
|
|
44
|
+
"""
|
|
45
|
+
Build the error message from the mode and whether its zone is missing or extra.
|
|
46
|
+
|
|
47
|
+
.. versionadded:: 0.1.0
|
|
48
|
+
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
mode_name
|
|
52
|
+
Name of the ``TimeZoneMode`` member of the change.
|
|
53
|
+
needs_zone
|
|
54
|
+
True when the mode needs a zone that is missing, False when it has a zone it does not use.
|
|
55
|
+
"""
|
|
56
|
+
message_template = EXTRA_ZONE_MESSAGE
|
|
57
|
+
if needs_zone:
|
|
58
|
+
message_template = MISSING_ZONE_MESSAGE
|
|
59
|
+
|
|
60
|
+
message = message_template.format(mode_name=mode_name)
|
|
61
|
+
super().__init__(message)
|
|
62
|
+
self.mode_name = mode_name
|
|
63
|
+
self.needs_zone = needs_zone
|