Skip to content

styling: a float column holding an infinity falls back to the obj displayer (OverflowError in _formatted_char_count) #1075

Open

Description

@paddymul

Problem

_formatted_char_count (customizations/styling.py:25) sizes a float column from int(max(abs(max), abs(min))). It guards NaN (max_abs == max_abs) but not infinity, so a column whose min or max is inf or -inf raises OverflowError: cannot convert float infinity to integer. DefaultMainStyling.style_column calls it through estimate_min_width_px (line 130), style_column_with_fallback (dataflow/styling_core.py:560) logs the warning and falls back, and the column is shown with the obj displayer and no minWidth. The summary-stats view (DefaultSummaryStatsStyling) falls back the same way. Pandas and polars widgets both do this, and so does the DDD frame df_with_infinity.

import numpy as np
import pandas as pd
from buckaroo.buckaroo_widget import BuckarooWidget

df = pd.DataFrame({"with_inf": [1.5, 2.5, np.inf, 4.5], "no_inf": [1.5, 2.5, 3.5, 4.5]})
for cc in BuckarooWidget(df).df_display_args["main"]["df_viewer_config"]["column_config"]:
    print(cc["header_name"], cc["displayer_args"])
# with_inf {'displayer': 'obj'}
# no_inf {'displayer': 'float', 'min_fraction_digits': 3, 'max_fraction_digits': 3}

Suggested fix

Size from the finite bounds: skip a non-finite min or max the way NaN is skipped.

Context

Found while testing the infinity histograms in #1069. Reproduces on main at 315286f.

Activity

  1. paddymul commented on Oct 7, 2026

    @paddymul
    CollaboratorAuthor

    Probe script for this issue. Save it as probe_1075.py in a buckaroo checkout and run uv run python probe_1075.py. The output below is from main at e88ace9.

    probe_1075.py
    """_formatted_char_count sizes a float column with int(max(abs(max), abs(min))); an infinite bound raises
    OverflowError and style_column_with_fallback drops the column to the obj displayer."""
    import logging
    logging.basicConfig(level=logging.WARNING, format='LOG: %(message).160s')
    import numpy as np
    import pandas as pd
    import polars as pl
    from buckaroo.buckaroo_widget import BuckarooWidget
    from buckaroo.polars_buckaroo import PolarsBuckarooWidget
    
    df = pd.DataFrame({'with_inf': [1.5, 2.5, np.inf, 4.5], 'with_neg_inf': [1.5, 2.5, -np.inf, 4.5],
                       'no_inf': [1.5, 2.5, 3.5, 4.5]})
    for label, w in [('pandas', BuckarooWidget(df)), ('polars', PolarsBuckarooWidget(pl.from_pandas(df)))]:
        for cc in w.df_display_args['main']['df_viewer_config']['column_config']:
            print(label, cc['header_name'], cc['displayer_args'], cc.get('ag_grid_specs'))
    Output at e88ace9
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.customizations.styling.DefaultMainStyling'>) on column a with col_meta {'orig
    LOG: cannot convert float infinity to integer
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.customizations.styling.DefaultMainStyling'>) on column b with col_meta {'orig
    LOG: cannot convert float infinity to integer
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.customizations.styling.DefaultSummaryStatsStyling'>) on column a with col_met
    LOG: cannot convert float infinity to integer
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.customizations.styling.DefaultSummaryStatsStyling'>) on column b with col_met
    LOG: cannot convert float infinity to integer
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.customizations.styling.DefaultSummaryStatsStyling'>) on column a with col_met
    LOG: cannot convert float infinity to integer
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.customizations.styling.DefaultSummaryStatsStyling'>) on column b with col_met
    LOG: cannot convert float infinity to integer
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.polars_buckaroo.PolarsMainStyling'>) on column a with col_meta {'orig_col_nam
    LOG: cannot convert float infinity to integer
    LOG: Warning, styling failed from DefaultMainStyling.style_column (via <class 'buckaroo.polars_buckaroo.PolarsMainStyling'>) on column b with col_meta {'orig_col_nam
    LOG: cannot convert float infinity to integer
    pandas with_inf {'displayer': 'obj'} None
    pandas with_neg_inf {'displayer': 'obj'} None
    pandas no_inf {'displayer': 'float', 'min_fraction_digits': 3, 'max_fraction_digits': 3} {'minWidth': 100}
    polars with_inf {'displayer': 'obj'} None
    polars with_neg_inf {'displayer': 'obj'} None
    polars no_inf {'displayer': 'float', 'min_fraction_digits': 3, 'max_fraction_digits': 3} {'minWidth': 100}
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions