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,273 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Conversion between the pandas columns of a Table and numpy values.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
import numpy
|
|
10
|
+
import pandas
|
|
11
|
+
from numpy.typing import NDArray
|
|
12
|
+
|
|
13
|
+
from numdaplot.data_types.numpy_mapping import from_numpy_dtype, to_numpy_dtype
|
|
14
|
+
from numdaplot.data_types.pandas_mapping import from_pandas_dtype, to_pandas_dtype
|
|
15
|
+
from numdaplot.data_types.type import Type
|
|
16
|
+
from numdaplot.errors.time_zone_mismatch_error import TimeZoneMismatchError
|
|
17
|
+
from numdaplot.errors.unsupported_missing_error import UnsupportedMissingError
|
|
18
|
+
from numdaplot.tables.frames.column import Column
|
|
19
|
+
from numdaplot.tables.frames.time_zones import find_column_time_zone, remove_utc_zone
|
|
20
|
+
|
|
21
|
+
MISSING_CAPABLE_TYPES = frozenset(
|
|
22
|
+
{Type.FLOAT32, Type.FLOAT64, Type.TEXT, Type.CATEGORY, Type.DATE, Type.DATETIME, Type.DURATION, Type.TIME}
|
|
23
|
+
)
|
|
24
|
+
TEXT_TYPES = frozenset({Type.TEXT, Type.CATEGORY})
|
|
25
|
+
PYTHON_OBJECT_DTYPE = numpy.dtype(object)
|
|
26
|
+
ARRAY_OPERATION = "An Array"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def find_column_type(column: Column) -> Type:
|
|
30
|
+
"""
|
|
31
|
+
Return the numdaplot type of a Table column.
|
|
32
|
+
|
|
33
|
+
.. versionadded:: 0.1.0
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
column
|
|
38
|
+
A column stored with one of the dtypes given by ``to_pandas_dtype``.
|
|
39
|
+
|
|
40
|
+
Returns
|
|
41
|
+
-------
|
|
42
|
+
Type
|
|
43
|
+
The type of the column.
|
|
44
|
+
|
|
45
|
+
Examples
|
|
46
|
+
--------
|
|
47
|
+
>>> import pandas
|
|
48
|
+
>>> from numdaplot.tables.frames.column_values import find_column_type
|
|
49
|
+
>>> find_column_type(pandas.Series([1.5], dtype="float64"))
|
|
50
|
+
<Type.FLOAT64: 10>
|
|
51
|
+
"""
|
|
52
|
+
column_type = from_pandas_dtype(column.dtype)
|
|
53
|
+
|
|
54
|
+
return column_type
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def find_column_missing(column: Column) -> NDArray[numpy.bool_]:
|
|
58
|
+
"""
|
|
59
|
+
Return which values of a Table column are missing.
|
|
60
|
+
|
|
61
|
+
.. versionadded:: 0.1.0
|
|
62
|
+
|
|
63
|
+
Parameters
|
|
64
|
+
----------
|
|
65
|
+
column
|
|
66
|
+
A Table column.
|
|
67
|
+
|
|
68
|
+
Returns
|
|
69
|
+
-------
|
|
70
|
+
NDArray[numpy.bool_]
|
|
71
|
+
True at each missing value.
|
|
72
|
+
|
|
73
|
+
Examples
|
|
74
|
+
--------
|
|
75
|
+
>>> import pandas
|
|
76
|
+
>>> from numdaplot.tables.frames.column_values import find_column_missing
|
|
77
|
+
>>> find_column_missing(pandas.Series([1, None], dtype="Int64"))
|
|
78
|
+
array([False, True])
|
|
79
|
+
"""
|
|
80
|
+
missing = column.isna()
|
|
81
|
+
missing_values = missing.to_numpy(dtype=numpy.bool_)
|
|
82
|
+
|
|
83
|
+
return missing_values
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def convert_column_values(column: Column) -> NDArray[Any]:
|
|
87
|
+
"""
|
|
88
|
+
Return the numpy values of a Table column, whose integers and booleans have no missing value.
|
|
89
|
+
|
|
90
|
+
.. versionadded:: 0.1.0
|
|
91
|
+
|
|
92
|
+
Parameters
|
|
93
|
+
----------
|
|
94
|
+
column
|
|
95
|
+
A Table column. Integers and booleans must have no missing value.
|
|
96
|
+
|
|
97
|
+
Returns
|
|
98
|
+
-------
|
|
99
|
+
NDArray
|
|
100
|
+
The values in the numpy dtype of an Array of the same type. Categories become texts, and datetimes
|
|
101
|
+
with a time zone become their UTC clock time.
|
|
102
|
+
|
|
103
|
+
Examples
|
|
104
|
+
--------
|
|
105
|
+
>>> import pandas
|
|
106
|
+
>>> from numdaplot.tables.frames.column_values import convert_column_values
|
|
107
|
+
>>> convert_column_values(pandas.Series([1, 2], dtype="Int64"))
|
|
108
|
+
array([1, 2])
|
|
109
|
+
"""
|
|
110
|
+
column_type = find_column_type(column)
|
|
111
|
+
time_zone = find_column_time_zone(column)
|
|
112
|
+
if time_zone is not None:
|
|
113
|
+
utc_column = remove_utc_zone(column)
|
|
114
|
+
utc_values = convert_column_values(utc_column)
|
|
115
|
+
return utc_values
|
|
116
|
+
|
|
117
|
+
if column_type in TEXT_TYPES:
|
|
118
|
+
object_values = column.to_numpy(dtype=PYTHON_OBJECT_DTYPE, na_value=numpy.nan)
|
|
119
|
+
text_dtype = to_numpy_dtype(Type.TEXT)
|
|
120
|
+
text_values = object_values.astype(text_dtype)
|
|
121
|
+
return text_values
|
|
122
|
+
|
|
123
|
+
numpy_dtype = to_numpy_dtype(column_type)
|
|
124
|
+
numpy_values = column.to_numpy(dtype=numpy_dtype)
|
|
125
|
+
|
|
126
|
+
return numpy_values
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def read_present_values(column: Column) -> NDArray[Any]:
|
|
130
|
+
"""
|
|
131
|
+
Return the present values of a Table column, in numpy.
|
|
132
|
+
|
|
133
|
+
.. versionadded:: 0.1.0
|
|
134
|
+
|
|
135
|
+
Parameters
|
|
136
|
+
----------
|
|
137
|
+
column
|
|
138
|
+
A Table column.
|
|
139
|
+
|
|
140
|
+
Returns
|
|
141
|
+
-------
|
|
142
|
+
NDArray
|
|
143
|
+
Every value that is not missing, in order, in the numpy dtype of an Array of the same type.
|
|
144
|
+
|
|
145
|
+
Examples
|
|
146
|
+
--------
|
|
147
|
+
>>> import pandas
|
|
148
|
+
>>> from numdaplot.tables.frames.column_values import read_present_values
|
|
149
|
+
>>> read_present_values(pandas.Series([1, None, 3], dtype="Int64"))
|
|
150
|
+
array([1, 3])
|
|
151
|
+
"""
|
|
152
|
+
present_column = column.dropna()
|
|
153
|
+
present_values = convert_column_values(present_column)
|
|
154
|
+
|
|
155
|
+
return present_values
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def read_array_values(column: Column) -> NDArray[Any]:
|
|
159
|
+
"""
|
|
160
|
+
Return every value of a Table column, in the numpy form an Array stores.
|
|
161
|
+
|
|
162
|
+
.. versionadded:: 0.1.0
|
|
163
|
+
|
|
164
|
+
Parameters
|
|
165
|
+
----------
|
|
166
|
+
column
|
|
167
|
+
A Table column.
|
|
168
|
+
|
|
169
|
+
Returns
|
|
170
|
+
-------
|
|
171
|
+
NDArray
|
|
172
|
+
The values, with NaN at the missing decimals and texts, and NaT at the missing dates, datetimes and durations.
|
|
173
|
+
|
|
174
|
+
Raises
|
|
175
|
+
------
|
|
176
|
+
UnsupportedMissingError
|
|
177
|
+
When an integer or boolean column has a missing value, which an Array cannot hold.
|
|
178
|
+
TimeZoneMismatchError
|
|
179
|
+
When the column holds datetimes with a time zone, which an Array cannot hold.
|
|
180
|
+
|
|
181
|
+
Examples
|
|
182
|
+
--------
|
|
183
|
+
>>> import pandas
|
|
184
|
+
>>> from numdaplot.tables.frames.column_values import read_array_values
|
|
185
|
+
>>> read_array_values(pandas.Series([1.5, None], dtype="float64"))
|
|
186
|
+
array([1.5, nan])
|
|
187
|
+
"""
|
|
188
|
+
column_type = find_column_type(column)
|
|
189
|
+
time_zone = find_column_time_zone(column)
|
|
190
|
+
if time_zone is not None:
|
|
191
|
+
raise TimeZoneMismatchError(ARRAY_OPERATION, False)
|
|
192
|
+
|
|
193
|
+
missing = find_column_missing(column)
|
|
194
|
+
has_missing = bool(missing.any())
|
|
195
|
+
rejects_missing = has_missing and column_type not in MISSING_CAPABLE_TYPES
|
|
196
|
+
if rejects_missing:
|
|
197
|
+
column_name = str(column.name)
|
|
198
|
+
raise UnsupportedMissingError(column_type.name, column_name)
|
|
199
|
+
|
|
200
|
+
array_values = convert_column_values(column)
|
|
201
|
+
|
|
202
|
+
return array_values
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def build_column(values: NDArray[Any]) -> Column:
|
|
206
|
+
"""
|
|
207
|
+
Return a Table column holding one-dimensional numpy values.
|
|
208
|
+
|
|
209
|
+
.. versionadded:: 0.1.0
|
|
210
|
+
|
|
211
|
+
Parameters
|
|
212
|
+
----------
|
|
213
|
+
values
|
|
214
|
+
One-dimensional values in a numpy dtype numdaplot supports.
|
|
215
|
+
|
|
216
|
+
Returns
|
|
217
|
+
-------
|
|
218
|
+
pandas.Series
|
|
219
|
+
A column numbered from 0, stored with the pandas dtype of the type of the values.
|
|
220
|
+
|
|
221
|
+
Examples
|
|
222
|
+
--------
|
|
223
|
+
>>> import numpy
|
|
224
|
+
>>> from numdaplot.tables.frames.column_values import build_column
|
|
225
|
+
>>> build_column(numpy.array([1, 2])).dtype
|
|
226
|
+
Int64Dtype()
|
|
227
|
+
"""
|
|
228
|
+
value_type = from_numpy_dtype(values.dtype)
|
|
229
|
+
pandas_dtype = to_pandas_dtype(value_type)
|
|
230
|
+
column_values = values
|
|
231
|
+
if value_type == Type.TEXT:
|
|
232
|
+
column_values = values.astype(PYTHON_OBJECT_DTYPE)
|
|
233
|
+
|
|
234
|
+
raw_column = pandas.Series(column_values)
|
|
235
|
+
column = raw_column.astype(pandas_dtype)
|
|
236
|
+
|
|
237
|
+
return column
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def build_column_with_missing(present_values: NDArray[Any], missing: NDArray[numpy.bool_]) -> Column:
|
|
241
|
+
"""
|
|
242
|
+
Return a Table column holding present values, with missing values at given positions.
|
|
243
|
+
|
|
244
|
+
.. versionadded:: 0.1.0
|
|
245
|
+
|
|
246
|
+
Parameters
|
|
247
|
+
----------
|
|
248
|
+
present_values
|
|
249
|
+
The present values, in order.
|
|
250
|
+
missing
|
|
251
|
+
True at each position of the column that is missing; there are as many False as present values.
|
|
252
|
+
|
|
253
|
+
Returns
|
|
254
|
+
-------
|
|
255
|
+
pandas.Series
|
|
256
|
+
A column numbered from 0, as long as ``missing``.
|
|
257
|
+
|
|
258
|
+
Examples
|
|
259
|
+
--------
|
|
260
|
+
>>> import numpy
|
|
261
|
+
>>> from numdaplot.tables.frames.column_values import build_column_with_missing
|
|
262
|
+
>>> build_column_with_missing(numpy.array([1, 3]), numpy.array([False, True, False])).tolist()
|
|
263
|
+
[1, <NA>, 3]
|
|
264
|
+
"""
|
|
265
|
+
present_column = build_column(present_values)
|
|
266
|
+
row_count = missing.size
|
|
267
|
+
all_positions = pandas.RangeIndex(row_count)
|
|
268
|
+
present = ~missing
|
|
269
|
+
present_positions = all_positions[present]
|
|
270
|
+
present_column.index = present_positions
|
|
271
|
+
column = present_column.reindex(all_positions)
|
|
272
|
+
|
|
273
|
+
return column
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Comparison of the columns of two Tables.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import numpy
|
|
8
|
+
import pandas
|
|
9
|
+
|
|
10
|
+
from numdaplot.arrays.type_match import TypeMatch
|
|
11
|
+
from numdaplot.data_types.value_family import find_family
|
|
12
|
+
from numdaplot.tables.frames.column import Column
|
|
13
|
+
from numdaplot.tables.frames.column_values import find_column_missing, find_column_type, read_present_values
|
|
14
|
+
from numdaplot.tables.frames.time_zones import find_column_time_zone
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def are_frames_equal(left: pandas.DataFrame, right: pandas.DataFrame, types: TypeMatch) -> bool:
|
|
18
|
+
"""
|
|
19
|
+
Return whether two Tables have the same columns, in the same order, holding the same values.
|
|
20
|
+
|
|
21
|
+
.. versionadded:: 0.1.0
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
left
|
|
26
|
+
The columns of the first Table.
|
|
27
|
+
right
|
|
28
|
+
The columns of the second Table.
|
|
29
|
+
types
|
|
30
|
+
Whether the type of each column must also be the same.
|
|
31
|
+
|
|
32
|
+
Returns
|
|
33
|
+
-------
|
|
34
|
+
bool
|
|
35
|
+
True when the column names, the number of rows and every column are equal.
|
|
36
|
+
|
|
37
|
+
Examples
|
|
38
|
+
--------
|
|
39
|
+
>>> import pandas
|
|
40
|
+
>>> import numdaplot as ndp
|
|
41
|
+
>>> from numdaplot.tables.frames.frame_equality import are_frames_equal
|
|
42
|
+
>>> integers = pandas.DataFrame({"price": pandas.array([1, 2], dtype="Int64")})
|
|
43
|
+
>>> decimals = pandas.DataFrame({"price": [1.0, 2.0]})
|
|
44
|
+
>>> are_frames_equal(integers, decimals, ndp.TypeMatch.IGNORED)
|
|
45
|
+
True
|
|
46
|
+
"""
|
|
47
|
+
left_names = list(left.columns)
|
|
48
|
+
right_names = list(right.columns)
|
|
49
|
+
if left_names != right_names:
|
|
50
|
+
return False
|
|
51
|
+
|
|
52
|
+
left_row_count = len(left)
|
|
53
|
+
right_row_count = len(right)
|
|
54
|
+
if left_row_count != right_row_count:
|
|
55
|
+
return False
|
|
56
|
+
|
|
57
|
+
for column_name in left_names:
|
|
58
|
+
left_column = left[column_name]
|
|
59
|
+
right_column = right[column_name]
|
|
60
|
+
same_column = are_columns_equal(left_column, right_column, types)
|
|
61
|
+
if not same_column:
|
|
62
|
+
return False
|
|
63
|
+
|
|
64
|
+
return True
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def are_columns_equal(left: Column, right: Column, types: TypeMatch) -> bool:
|
|
68
|
+
"""
|
|
69
|
+
Return whether two columns of the same length hold the same values at the same rows.
|
|
70
|
+
|
|
71
|
+
Two missing values at the same row are equal. Values of types that cannot be compared,
|
|
72
|
+
such as numbers and texts, are never equal.
|
|
73
|
+
|
|
74
|
+
.. versionadded:: 0.1.0
|
|
75
|
+
|
|
76
|
+
Parameters
|
|
77
|
+
----------
|
|
78
|
+
left
|
|
79
|
+
The first column.
|
|
80
|
+
right
|
|
81
|
+
The second column, as long as the first one.
|
|
82
|
+
types
|
|
83
|
+
Whether the types must also be the same.
|
|
84
|
+
|
|
85
|
+
Returns
|
|
86
|
+
-------
|
|
87
|
+
bool
|
|
88
|
+
True when the missing values are at the same rows and the present values are equal. Datetime columns
|
|
89
|
+
in different time zones are never equal, even for the same instants.
|
|
90
|
+
|
|
91
|
+
Examples
|
|
92
|
+
--------
|
|
93
|
+
>>> import pandas
|
|
94
|
+
>>> import numdaplot as ndp
|
|
95
|
+
>>> from numdaplot.tables.frames.frame_equality import are_columns_equal
|
|
96
|
+
>>> left = pandas.Series([1.5, None])
|
|
97
|
+
>>> right = pandas.Series([1.5, None])
|
|
98
|
+
>>> are_columns_equal(left, right, ndp.TypeMatch.STRICT)
|
|
99
|
+
True
|
|
100
|
+
"""
|
|
101
|
+
left_type = find_column_type(left)
|
|
102
|
+
right_type = find_column_type(right)
|
|
103
|
+
different_types = left_type != right_type
|
|
104
|
+
rejects_different_types = types == TypeMatch.STRICT and different_types
|
|
105
|
+
if rejects_different_types:
|
|
106
|
+
return False
|
|
107
|
+
|
|
108
|
+
left_family = find_family(left_type)
|
|
109
|
+
right_family = find_family(right_type)
|
|
110
|
+
if left_family != right_family:
|
|
111
|
+
return False
|
|
112
|
+
|
|
113
|
+
left_time_zone = find_column_time_zone(left)
|
|
114
|
+
right_time_zone = find_column_time_zone(right)
|
|
115
|
+
if left_time_zone != right_time_zone:
|
|
116
|
+
return False
|
|
117
|
+
|
|
118
|
+
left_missing = find_column_missing(left)
|
|
119
|
+
right_missing = find_column_missing(right)
|
|
120
|
+
same_missing = numpy.array_equal(left_missing, right_missing)
|
|
121
|
+
if not same_missing:
|
|
122
|
+
return False
|
|
123
|
+
|
|
124
|
+
left_values = read_present_values(left)
|
|
125
|
+
right_values = read_present_values(right)
|
|
126
|
+
same_values = left_values == right_values
|
|
127
|
+
all_equal = numpy.all(same_values)
|
|
128
|
+
is_equal = bool(all_equal)
|
|
129
|
+
|
|
130
|
+
return is_equal
|