Exemplo n.º 1
0
async def serve(q: Q):
    if not q.client.initialized:
        q.page['meta'] = ui.meta_card(box='', theme='neon')
        q.page['controls'] = ui.form_card(box='1 1 2 8', items=[
            ui.text_xl('Form'),
            ui.textbox(name='textbox', label='Textbox'),
            ui.toggle(name='toggle', label='Toggle'),
            ui.choice_group(name='choice_group', label='Choice group', choices=[
                ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']
            ]),
            ui.checklist(name='checklist', label='Checklist', choices=[
                ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']
            ]),
            ui.dropdown(name='dropdown', label='Dropdown', choices=[
                ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']
            ]),
            ui.slider(name='slider', label='Slider'),
            ui.button(name='toggle_theme', label='Toggle Theme', primary=True)
        ])
        q.client.theme = 'default'
        q.client.initialized = True

    meta = q.page['meta']

    if q.args.toggle_theme:
        meta.theme = q.client.theme = 'neon' if q.client.theme == 'default' else 'default'

    await q.page.save()
Exemplo n.º 2
0
def init(q: Q):
    q.page['meta'] = ui.meta_card(
        box='',
        title='Explain Ratings',
        layouts=[
            ui.layout(breakpoint='xs',
                      zones=[
                          ui.zone('header'),
                          ui.zone('body',
                                  direction=ui.ZoneDirection.ROW,
                                  size='calc(100vh - 70px)',
                                  zones=[
                                      ui.zone('sidebar', size='350px'),
                                      ui.zone('content',
                                              direction=ui.ZoneDirection.ROW)
                                  ])
                      ]),
        ])
    q.page['header'] = ui.header_card(box='header',
                                      title='Hotel Reviews',
                                      subtitle='Explains the hotel reviews',
                                      icon='ReviewSolid',
                                      icon_color='#00A8E0')
    q.client.review = config.review_column_list[0]

    form_filters = []
    for column in config.filterable_columns:
        choices = [ui.choice(name='empty', label='All')] + [
            ui.choice(name=str(column), label=str(column))
            for column in config.dataset[column].drop_duplicates()
        ]
        form_filters.append(
            ui.dropdown(name=f'filter_{column}',
                        label=config.column_mapping[column],
                        trigger=True,
                        value='empty',
                        choices=choices))

    sidebar_items = [
        ui.dropdown(name='review',
                    label='Review type',
                    value=q.client.review,
                    trigger=True,
                    choices=[
                        ui.choice(name=column,
                                  label=config.column_mapping[column])
                        for column in config.dataset[config.review_column_list]
                    ]),
        ui.separator('Filters')
    ] + form_filters
    q.page['sidebar'] = ui.form_card(box='sidebar', items=sidebar_items)
    q.page['original'] = ui.image_card(box='content',
                                       title='Original',
                                       type='png',
                                       image=plot_word_cloud(
                                           config.dataset[q.client.review], q))
Exemplo n.º 3
0
    async def render(self, q: Q):
        """
        Render card in Wave.

        Args:
            q: Wave server
        """
        model_choices = [ui.choice(name=str(x), label=str(x)) for x in self.input_models]

        card = ui.section_card(
            box=self.box,
            title=self.title,
            subtitle=self.subtitle,
            items=[
                ui.dropdown(
                    name='input_model',
                    label='Select model',
                    value=self.input_model,
                    choices=model_choices,
                    trigger=True
                )
            ],
            commands=self.commands
        )

        q.page[self.name] = card
Exemplo n.º 4
0
def make_blurb(q: Q, example: Example):
    blurb_card = q.page['blurb']
    blurb_card.title = example.title
    blurb_card.subtitle = example.description
    # HACK: Recreate dropdown every time (by dynamic name) to control value (needed for next / prev btn functionality).
    items = [
        ui.dropdown(name=q.args['#'] or default_example_name,
                    width='300px',
                    value=example.name,
                    trigger=True,
                    choices=[
                        ui.choice(name=e.name, label=e.title)
                        for e in catalog.values()
                    ])
    ]
    if example.previous_example:
        items.append(
            ui.button(name=f'#{example.previous_example.name}',
                      label='Previous'))
    if example.next_example:
        items.append(
            ui.button(name=f'#{example.next_example.name}',
                      label='Next',
                      primary=True))
    blurb_card.items = items
Exemplo n.º 5
0
def populate_dropdown_list(q: Q):
    filter_choices = [
        ui.choice(
            name=json.dumps({"id": q.client.filter_count + 1, "attr": column, "attr_val": None}),
            label=config.column_mapping[column]
        ) for column in config.filterable_columns
    ]
    items = [
        ui.text_l("Filter reviews"),
    ]

    for key, value in q.client.filters.items():
        for attr, attr_val in value.items():
            items.append(ui.dropdown(
                name="filter",
                label="Choose a review attribute",
                placeholder=config.column_mapping[attr],
                choices=[
                    ui.choice(
                        name=json.dumps({'id': key, 'attr': column, 'attr_val': None}),
                        label=config.column_mapping[column]
                    ) for column in config.filterable_columns
                ],
                trigger=True,
            ), )
            items.append(ui.dropdown(
                name="filter_value",
                label="Choose a value for selected review attribute",
                placeholder=attr_val,
                choices=[ui.choice(name=json.dumps({'id': key, 'attr': attr, 'attr_val': column}), label=column) for
                         column in config.dataset[attr].drop_duplicates()],
                trigger=True,
            ), )
            items.append(ui.separator())

    if (q.args.add_filter and all(q.client.filters.values())) or q.args.review_choice or q.args.reset_filters:
        items.append(ui.dropdown(
            name="filter",
            label="Choose a review attribute",
            placeholder="Please select a category to filter",
            choices=filter_choices,
            trigger=True
        ), )

    items.append(ui.button(name="compare_review_button", label="Compare Reviews", primary=True))

    return items
Exemplo n.º 6
0
async def serve(q: Q):
    if q.args.train:
        # train WaveML Model using H2O-3 AutoML
        copy_expando(q.args, q.client)
        q.client.wave_model = build_model(
            train_df=q.client.train_df,
            target_column='target',
            model_type=ModelType.H2O3,
            _h2o3_max_runtime_secs=30,
            _h2o3_nfolds=2,
            _h2o3_include_algos=[q.client.algo]
        )
        model_id = q.client.wave_model.model.model_id
        accuracy = round(100 - q.client.wave_model.model.mean_per_class_error() * 100, 2)

        # show training details and prediction option
        q.page['example'].items[1].choice_group.value = q.client.algo
        q.page['example'].items[2].buttons.items[1].button.disabled = False
        q.page['example'].items[3].message_bar.type = 'success'
        q.page['example'].items[3].message_bar.text = 'Training successfully completed!'
        q.page['example'].items[4].text.content = f'''**H2O AutoML model id:** {model_id} <br />
            **Accuracy:** {accuracy}%'''
        q.page['example'].items[5].text.content = ''
    elif q.args.predict:
        # predict on test data
        preds = q.client.wave_model.predict(test_df=q.client.test_df)

        # show predictions
        q.page['example'].items[3].message_bar.text = 'Prediction successfully completed!'
        q.page['example'].items[5].text.content = f'''**Example predictions:** <br />
            {preds[0]} <br /> {preds[1]} <br /> {preds[2]}'''
    else:
        # prepare sample train and test dataframes
        data = load_wine(as_frame=True)['frame']
        q.client.train_df, q.client.test_df = train_test_split(data, train_size=0.8)

        # algos
        algo_choices = [ui.choice(x, x) for x in ['DRF', 'GLM', 'XGBoost', 'GBM', 'DeepLearning']]

        # display ui
        q.page['example'] = ui.form_card(
            box='1 1 -1 -1',
            items=[
                ui.text(content='''The sample dataset used is the
                    <a href="https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html" target="_blank">wine dataset</a>.'''),
                ui.choice_group(name='algo', label='Select Algo', choices=algo_choices, value='DRF'),
                ui.buttons(items=[
                    ui.button(name='train', label='Train', primary=True),
                    ui.button(name='predict', label='Predict', primary=True, disabled=True),
                ]),
                ui.message_bar(type='warning', text='Training will take a few seconds'),
                ui.text(content=''),
                ui.text(content='')
            ]
        )

    await q.page.save()
Exemplo n.º 7
0
def init(q: Q):
    q.client.primary_color = '$blue'
    q.client.secondary_color = '$cyan'
    q.client.tertiary_color = '$azure'
    q.page['meta'] = ui.meta_card(
        box='',
        title='Telco Churn Analytics',
        layouts=[
            ui.layout(breakpoint='xs',
                      zones=[
                          ui.zone('header'),
                          ui.zone('title'),
                          ui.zone('content',
                                  zones=[
                                      ui.zone('code'),
                                      ui.zone('top',
                                              direction=ui.ZoneDirection.ROW,
                                              zones=[
                                                  ui.zone('top-plot',
                                                          size='70%'),
                                                  ui.zone('top-stats')
                                              ]),
                                      ui.zone('middle',
                                              direction=ui.ZoneDirection.ROW),
                                  ])
                      ])
        ])
    q.page['header'] = ui.header_card(
        box='header',
        title='Telecom Churn Analytics',
        subtitle='EDA & Churn Modeling with AutoML & Wave',
        nav=[
            ui.nav_group('Main Menu',
                         items=[
                             ui.nav_item(name='analysis', label='Analysis'),
                             ui.nav_item(name='code',
                                         label='Application Code'),
                         ])
        ])
    q.page['title'] = ui.section_card(
        box='title',
        title='Customer profiles from model predictions',
        subtitle='Customer: No customer chosen',
        items=[
            # TODO: Replace with dropdown after https://github.com/h2oai/wave/pull/303 merged.
            ui.picker(name='customers',
                      label='Customer Phone Number',
                      choices=[
                          ui.choice(name=str(phone), label=str(phone))
                          for phone in df['Phone']
                      ],
                      max_choices=1,
                      trigger=True),
            ui.toggle(name='theme', label='Dark Theme', trigger=True)
        ])
Exemplo n.º 8
0
def get_user_input_items(sales_data, user_inputs, progress=False):
    return [
        ui.text_l('**Select Area of Interest**'),
        ui.dropdown(
            name='stores',
            label='Store IDs',
            values=[str(x) for x in user_inputs.stores],
            choices=[ui.choice(name=str(x), label=str(x)) for x in sales_data.stores_unique],
            tooltip='Select the Stores to include in the prediction',
            trigger=True,
        ),
        ui.text_xs('⠀'),
        ui.dropdown(
            name='departments',
            label='Product IDs',
            values=[str(x) for x in user_inputs.departments],
            choices=[ui.choice(name=str(x), label=str(x)) for x in sales_data.departments_unique],
            tooltip='Select the Products to include in the prediction',
            trigger=True,
        ),
        ui.frame(content=' ', height="40px"),
        ui.text_l('**Generate Sales Forecast**'),
        ui.slider(
            name='n_forecast_weeks',
            label='Number of Weeks',
            min=0,
            max=len(sales_data.prediction_dates) - 1,
            step=1,
            value=user_inputs.n_forecast_weeks,
            trigger=True,
            tooltip='Select the number of weeks into the future to predict'
        ),
        ui.text_xs('⠀'),
        ui.button(
            name='reset',
            label='Reset',
            primary=True,
            tooltip='Click to reset all values to defaults'
        ),
        ui.text_xs('⠀'),
        ui.progress(label='', caption='', visible=progress),
    ]
Exemplo n.º 9
0
def add_sidebar_card(box, customer_ids):
    id_choices = [ui.choice(_, "Customer:" + str(_)) for _ in customer_ids]
    return ui.form_card(box=box,
                        items=[
                            ui.text_xl(content='Select Customer Record'),
                            ui.dropdown(name='customer_id',
                                        label='CustomerID',
                                        choices=id_choices),
                            ui.button(name='predict',
                                      label='Generate',
                                      primary=True)
                        ])
Exemplo n.º 10
0
async def serve(q: Q):
    if q.args.show_inputs:
        q.page['example'].items = [
            ui.text(f'selected={q.args.checklist}'),
            ui.button(name='show_form', label='Back', primary=True),
        ]
    else:
        q.page['example'] = ui.form_card(box='1 1 4 10', items=[
            ui.checklist(name='checklist', label='Choices',
                         choices=[ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']]),
            ui.button(name='show_inputs', label='Submit', primary=True),
        ])
    await q.page.save()
Exemplo n.º 11
0
def get_user_input_items(sales_data, user_inputs, progress=False):
    return [
        ui.text_l('**Prediction Configuration**'),
        ui.dropdown(
            name='stores',
            label='Store IDs',
            values=[str(x) for x in user_inputs.stores],
            choices=[
                ui.choice(name=str(x), label=str(x))
                for x in sales_data.stores_unique
            ],
            trigger=True,
        ),
        ui.dropdown(
            name='departments',
            label='Product IDs',
            values=[str(x) for x in user_inputs.departments],
            choices=[
                ui.choice(name=str(x), label=str(x))
                for x in sales_data.departments_unique
            ],
            trigger=True,
        ),
        ui.slider(
            name='n_forecast_weeks',
            label='Weeks to predict',
            min=0,
            max=len(sales_data.prediction_dates) - 1,
            step=1,
            value=user_inputs.n_forecast_weeks,
            trigger=True,
        ),
        ui.button(name='reset',
                  label='Reset',
                  primary=True,
                  tooltip='Click to reset all values to defaults'),
        ui.progress(label='', caption='', visible=progress),
    ]
Exemplo n.º 12
0
def render_home(q: Q):
    q.page["left_panel"] = ui.form_card(box=config.boxes['left_panel'], items=[
        ui.text_xl("Hotel Reviews"),
        ui.dropdown(
            name="review_choice",
            label="Choose a review type",
            placeholder=config.column_mapping[q.client.review] if q.client.review else "please select a review type",
            choices=[
                ui.choice(name=column, label=config.column_mapping[column])
                for column in config.dataset[config.review_column_list]
            ],
            trigger=True,
        ),
    ])
Exemplo n.º 13
0
def add_sidebar_card(box, customer_ids, customer_names, customer_id, endpoint):
    id_choices = [
        ui.choice(str(id),
                  str(id) + ": " + name)
        for id, name in zip(customer_ids, customer_names)
    ]
    return ui.form_card(box=box,
                        items=[
                            ui.text_xl(content='Select Customer'),
                            ui.dropdown(name='customer_id',
                                        label='Customer',
                                        choices=id_choices,
                                        value=customer_id),
                            ui.textbox(name='endpoint',
                                       label='MLOps Endpoint',
                                       value=endpoint,
                                       placeholder="URL to MLOps deployment"),
                            ui.button(name='predict',
                                      label='Generate',
                                      primary=True)
                        ])
Exemplo n.º 14
0
    async def render(self, q: Q):
        """
        Render card in Wave.

        Args:
            q: Wave server
        """
        entity_choices = [
            ui.choice(name=str(x), label=str(x)) for x in self.choice_ents
        ]

        card = ui.form_card(box=self.box,
                            items=[
                                ui.picker(name='select_ents',
                                          label='Entities',
                                          choices=entity_choices,
                                          values=self.select_ents,
                                          trigger=True)
                            ],
                            title=self.title,
                            commands=self.commands)

        q.page[self.name] = card
Exemplo n.º 15
0
async def serve(q: Q):
    if q.args.show_inputs:
        q.page['example'].items = [
            ui.text(f'selected={q.args.picker}'),
            ui.button(name='show_form', label='Back', primary=True),
        ]
    else:
        q.page['example'] = ui.form_card(
            box='1 1 4 10',
            items=[
                ui.picker(name='picker',
                          label='Place an order (try Spam, Eggs or Ham):',
                          choices=[
                              ui.choice(name='spam', label='Spam'),
                              ui.choice(name='eggs', label='Eggs'),
                              ui.choice(name='ham', label='Ham'),
                              ui.choice(name='cheese', label='Cheese'),
                              ui.choice(name='beans', label='Beans'),
                              ui.choice(name='toast', label='Toast'),
                          ]),
                ui.button(name='show_inputs', label='Submit', primary=True),
            ])
    await q.page.save()
Exemplo n.º 16
0
async def show_mint_dashboard(q: Q):
    q.page['meta'] = ui.meta_card(
        box='',
        layouts=[
            ui.layout(breakpoint='xl',
                      width='1200px',
                      zones=[
                          ui.zone('header'),
                          ui.zone('main_section'),
                          ui.zone('overview',
                                  direction=ui.ZoneDirection.ROW,
                                  size='425px'),
                          ui.zone('tickers',
                                  direction=ui.ZoneDirection.ROW,
                                  size='175px'),
                          ui.zone('transactions_section'),
                          ui.zone('transactions',
                                  direction=ui.ZoneDirection.ROW,
                                  size='400px'),
                          ui.zone('footer'),
                      ])
        ])
    q.page['header'] = ui.header_card(box='header',
                                      title='H2O Wave Demo',
                                      subtitle='Mint Dashboard',
                                      nav=global_nav)
    q.page['main_section'] = ui.section_card(
        box='main_section',
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[
            ui.tabs(
                name='currency',
                value='option0',
                items=[
                    ui.tab(name=f'option{i}', label=next(sample_term))
                    for i in range(4)
                ],
            )
        ],
    )
    trend_date = generate_time_series(60)
    trend_price = generate_random_walk(2000, 8000, 0.2)
    q.page['trends'] = ui.form_card(
        box=ui.box('overview', order=1, size=4),
        title=next(sample_title),
        items=[
            ui.inline(inset=True,
                      items=[
                          ui.checkbox(name='sent',
                                      label=next(sample_term),
                                      value=True),
                          ui.checkbox(name='received',
                                      label=next(sample_term)),
                          ui.dropdown(name='distribution',
                                      label='',
                                      value='option0',
                                      choices=[
                                          ui.choice(name=f'option{i}',
                                                    label=next(sample_term))
                                          for i in range(5)
                                      ]),
                      ]),
            ui.visualization(
                plot=ui.plot([
                    ui.mark(type='line',
                            x_scale='time',
                            x='=date',
                            y='=price',
                            color='$mint',
                            curve=ui.MarkCurve.STEP),
                ]),
                data=data(fields=['date', 'price'],
                          rows=[(next(trend_date), next(trend_price))
                                for i in range(60)],
                          pack=True),
                height='215px',
            ),
            ui.stats(items=[
                ui.stat(label=next(sample_term), value=next(sample_percent)),
                ui.stat(label=next(sample_term), value=next(sample_dollars)),
                ui.stat(label=next(sample_term), value=next(sample_amount)),
                ui.stat(label=next(sample_term), value=next(sample_percent)),
                ui.stat(label=next(sample_term), value=next(sample_dollars)),
            ],
                     justify='between',
                     inset=True),
        ])

    stock_dates = generate_time_series(300)
    stock_prices = generate_random_walk()

    q.page['exchange_rate'] = ui.tall_series_stat_card(
        box=ui.box('overview', order=2),
        title=next(sample_title),
        value=next(sample_dollars),
        aux_value=next(sample_amount),
        plot_type=ui.TallSeriesStatCardPlotType.AREA,
        plot_color='$mint',
        plot_category='date',
        plot_value='price',
        plot_curve=ui.TallSeriesStatCardPlotCurve.STEP,
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'price'],
            rows=[(next(stock_dates), next(stock_prices)) for i in range(30)],
            pack=True,
        ),
    )

    q.page['symbol1'] = ui.tall_series_stat_card(
        box=ui.box('tickers', order=1),
        title=next(sample_title),
        value=next(sample_amount),
        aux_value=next(sample_percent),
        plot_type=ui.TallSeriesStatCardPlotType.AREA,
        plot_color='$mint',
        plot_category='date',
        plot_value='price',
        plot_curve=ui.TallSeriesStatCardPlotCurve.STEP,
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'price'],
            rows=[(next(stock_dates), next(stock_prices)) for i in range(30)],
            pack=True,
        ),
    )

    q.page['symbol2'] = ui.tall_series_stat_card(
        box=ui.box('tickers', order=2),
        title=next(sample_title),
        value=next(sample_percent),
        aux_value=next(sample_title),
        plot_type=ui.TallSeriesStatCardPlotType.AREA,
        plot_color='$green',
        plot_category='date',
        plot_value='price',
        plot_curve=ui.TallSeriesStatCardPlotCurve.STEP,
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'price'],
            rows=[(next(stock_dates), next(stock_prices)) for i in range(30)],
            pack=True,
        ),
    )

    q.page['symbol3'] = ui.tall_series_stat_card(
        box=ui.box('tickers', order=3),
        title=next(sample_title),
        value=next(sample_dollars),
        aux_value=next(sample_percent),
        plot_type=ui.TallSeriesStatCardPlotType.AREA,
        plot_color='$mint',
        plot_category='date',
        plot_value='price',
        plot_curve=ui.TallSeriesStatCardPlotCurve.STEP,
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'price'],
            rows=[(next(stock_dates), next(stock_prices)) for i in range(30)],
            pack=True,
        ),
    )

    q.page['transactions_section'] = ui.section_card(
        box='transactions_section',
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[
            ui.tabs(
                name='time_period',
                value='option0',
                items=[
                    ui.tab(name=f'option{i}', label=next(sample_term))
                    for i in range(6)
                ],
                link=True,
            ),
        ],
    )

    q.page['transactions'] = ui.stat_table_card(
        box=ui.box('transactions', order=1, size=2),
        title=next(sample_title),
        subtitle=next(sample_caption),
        columns=[next(sample_term) for i in range(4)],
        items=[
            ui.stat_table_item(label=next(sample_title),
                               caption=f'{random.randint(1, 5)} hours ago',
                               values=[
                                   next(sample_percent),
                                   next(sample_amount),
                                   next(sample_dollars)
                               ],
                               icon=next(sample_icon),
                               icon_color='$mint') for i in range(6)
        ])

    q.page['market'] = ui.stat_list_card(
        box=ui.box('transactions', order=2),
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[
            ui.stat_list_item(label=next(sample_term),
                              caption=next(sample_title),
                              value=next(sample_dollars),
                              aux_value=next(sample_percent),
                              value_color=next(sample_color)) for i in range(5)
        ],
    )
    q.page['footer'] = ui.footer_card(
        box='footer', caption='(c) 2021 H2O.ai. All rights reserved.')

    await q.page.save()
Exemplo n.º 17
0
async def show_blue_dashboard(q: Q):
    q.page['meta'] = ui.meta_card(
        box='',
        layouts=[
            ui.layout(breakpoint='xl',
                      width='1200px',
                      zones=[
                          ui.zone('header', size='80px'),
                          ui.zone('title', size='0'),
                          ui.zone('top',
                                  direction=ui.ZoneDirection.ROW,
                                  size='200px'),
                          ui.zone('middle',
                                  direction=ui.ZoneDirection.ROW,
                                  size='385px'),
                          ui.zone('bottom',
                                  direction=ui.ZoneDirection.ROW,
                                  size='385px'),
                          ui.zone('footer', size='50px'),
                      ])
        ])

    q.page['header'] = ui.header_card(box='header',
                                      title='H2O Wave Demo',
                                      subtitle='Blue Dashboard',
                                      nav=global_nav)

    q.page['title'] = ui.section_card(
        box='title',
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[
            ui.toggle(name='search', label=next(sample_term), value=True),
            ui.dropdown(name='distribution',
                        label='',
                        value='option0',
                        choices=[
                            ui.choice(name=f'option{i}',
                                      label=next(sample_term))
                            for i in range(5)
                        ]),
            ui.date_picker(name='target_date', label='', value='2020-12-25'),
        ],
    )

    sales_dates = generate_time_series(1000)
    sales_values = generate_random_walk()

    q.page['total_quantity'] = ui.tall_series_stat_card(
        box=ui.box('top', order=1),
        title=next(sample_term),
        value=next(sample_dollars),
        aux_value=next(sample_title),
        plot_type='area',
        plot_color='$blue',
        plot_category='date',
        plot_value='quantity',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'quantity'],
            rows=[(next(sales_dates), next(sales_values)) for i in range(30)],
            pack=True,
        ),
    )
    q.page['total_cost'] = ui.tall_series_stat_card(
        box=ui.box('top', order=2),
        title=next(sample_term),
        value=next(sample_amount),
        aux_value=next(sample_percent),
        plot_type='area',
        plot_color='$blue',
        plot_category='date',
        plot_value='cost',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'cost'],
            rows=[(next(sales_dates), next(sales_values)) for i in range(30)],
            pack=True,
        ),
    )
    q.page['total_revenue'] = ui.tall_series_stat_card(
        box=ui.box('top', order=3),
        title=next(sample_term),
        value=next(sample_dollars),
        aux_value=next(sample_title),
        plot_type='area',
        plot_color='$blue',
        plot_category='date',
        plot_value='revenue',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'revenue'],
            rows=[(next(sales_dates), next(sales_values)) for i in range(30)],
            pack=True,
        ),
    )
    q.page['total_profit'] = ui.tall_series_stat_card(
        box=ui.box('top', order=4),
        title=next(sample_term),
        value=next(sample_amount),
        aux_value=next(sample_title),
        plot_type='area',
        plot_color='$blue',
        plot_category='date',
        plot_value='profit',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'profit'],
            rows=[(next(sales_dates), next(sales_values)) for i in range(30)],
            pack=True,
        ),
    )

    ytd_revenue = generate_random_walk(0, 10000, 0.5)

    q.page['revenue_by_customer'] = ui.plot_card(
        box='middle',
        title=next(sample_title),
        data=data(
            fields=['channel', 'sessions'],
            rows=[(next(sample_term), next(ytd_revenue)) for i in range(10)],
            pack=True,
        ),
        plot=ui.plot([
            ui.mark(type='interval',
                    x='=sessions',
                    y='=channel',
                    y_min=0,
                    color='$blue')
        ]))

    months = generate_sequence(['Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])

    q.page['ytd_revenue'] = ui.plot_card(
        box=ui.box(zone='middle', width='66%', order=2),
        title=next(sample_title),
        data=data(fields=['month', 'channel', 'revenue'],
                  rows=[(next(months), 'Online', next(ytd_revenue))
                        for i in range(6)] +
                  [(next(months), 'In-store', next(ytd_revenue))
                   for i in range(6)],
                  pack=True),
        plot=ui.plot([
            ui.mark(type='interval',
                    x='=month',
                    y='=revenue',
                    color='=channel',
                    dodge='auto',
                    y_min=0,
                    color_range='$cyan $blue')
        ]))

    q.page['top_products'] = ui.stat_list_card(
        box='bottom',
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[
            ui.stat_list_item(label=next(sample_term),
                              caption=next(sample_title),
                              value=next(sample_dollars),
                              icon=next(sample_icon),
                              icon_color=next(sample_color)) for i in range(5)
        ],
    )

    q.page['recent_earnings'] = ui.stat_table_card(
        box=ui.box(zone='bottom', width='66%', order=2),
        title=next(sample_title),
        subtitle=next(sample_caption),
        columns=['Date', 'Sales', 'Earnings', 'Taxes'],
        items=[
            ui.stat_table_item(label=next(sample_title),
                               values=[
                                   next(sample_dollars),
                                   next(sample_percent),
                                   next(sample_amount)
                               ]) for i in range(8)
        ])

    q.page['footer'] = ui.footer_card(
        box='footer', caption='(c) 2021 H2O.ai. All rights reserved.')

    await q.page.save()
Exemplo n.º 18
0
async def serve(q: Q):
    if 'H2O_CLOUD_ENVIRONMENT' not in os.environ:
        # show appropriate message if app is not running on cloud
        q.page['example'] = ui.form_card(box='1 1 -1 -1',
                                         items=form_unsupported())
    elif q.args.train:
        # get DAI instance name
        copy_expando(q.args, q.client)

        for dai_instance in q.client.dai_instances:
            if dai_instance['id'] == int(q.client.dai_instance_id):
                q.client.dai_instance_name = dai_instance['name']

        # set DAI model details
        q.client.model_details = dai_experiment_url(q.client.dai_instance_id,
                                                    q.client.dai_instance_name)

        # show training progress and details
        q.page['example'].items = form_training_progress(q)
        await q.page.save()

        # train WaveML Model using Driverless AI
        q.client.wave_model = await q.run(
            func=build_model,
            train_df=q.client.train_df,
            target_column='target',
            model_type=ModelType.DAI,
            refresh_token=q.auth.refresh_token,
            _steam_dai_instance_name=q.client.dai_instance_name,
            _dai_accuracy=1,
            _dai_time=1,
            _dai_interpretability=10)

        # update DAI model details
        q.client.project_id = q.client.wave_model.project_id
        q.client.model_details += f'<br />{mlops_deployment_url(q.client.project_id)}'

        # download AutoDoc
        path_autodoc = save_autodoc(project_id=q.client.project_id,
                                    output_dir_path='.',
                                    refresh_token=q.auth.refresh_token)

        q.client.path_autodoc, *_ = await q.site.upload([path_autodoc])

        # show model outputs
        q.page['example'].items = form_training_completed(q)
    else:
        # prepare sample train and test dataframes
        data = load_wine(as_frame=True)['frame']
        q.client.train_df, q.client.test_df = train_test_split(data,
                                                               train_size=0.8)

        # DAI instances
        q.client.dai_instances = list_dai_instances(
            refresh_token=q.auth.refresh_token)
        q.client.choices_dai_instances = [
            ui.choice(name=str(x['id']),
                      label=f'{x["name"]} ({x["status"].capitalize()})',
                      disabled=x['status'] != 'running')
            for x in q.client.dai_instances
        ]

        running_dai_instances = [
            x['id'] for x in q.client.dai_instances if x['status'] == 'running'
        ]
        q.client.disable_training = False if running_dai_instances else True
        q.client.dai_instance_id = str(
            running_dai_instances[0]) if running_dai_instances else ''

        # display ui
        q.page['example'] = ui.form_card(box='1 1 -1 -1',
                                         items=form_default(q))

    await q.page.save()
Exemplo n.º 19
0
# Form / Choice Group
# Use #choice groups to let users select one option from two or more choices.
# #form #choice_group
# ---
from h2o_wave import main, app, Q, ui

choices = [
    ui.choice('A', 'Option A'),
    ui.choice('B', 'Option B'),
    ui.choice('C', 'Option C', disabled=True),
    ui.choice('D', 'Option D'),
]


@app('/demo')
async def serve(q: Q):
    if q.args.show_inputs:
        q.page['example'].items = [
            ui.text(f'selected={q.args.choice_group}'),
            ui.button(name='show_form', label='Back', primary=True),
        ]
    else:
        q.page['example'] = ui.form_card(box='1 1 4 10', items=[
            ui.choice_group(name='choice_group', label='Pick one', value='B', required=True, choices=choices),
            ui.button(name='show_inputs', label='Submit', primary=True),
        ])
    await q.page.save()
Exemplo n.º 20
0
async def showProducts(q: Q):
    global filter_product
    global filter_manufacturer
    global filter_supplier
    global unit_measure
    global gqty

    items = [ui.tabs(name='menu', value=q.args.menu, items=tabs)]

    print('---------------------------')
    print('== PRODUCT TAB == ')
    print('q.args.show_tables: ' + str(q.args.show_tables) +
          ', q.args.show_inputs: ' + str(q.args.show_inputs))

    ## the user have clicked 'Add' button but haven't clicked 'Submit' button yet
    if (q.args.show_tables == None or q.args.show_tables == False) and (
            q.args.show_inputs or q.args.product or q.args.manufacturer
            or q.args.supplier or q.args.qty):

        ## need to get manufacturer data first (later used for the dropdown when adding new supplier)
        df_m = pd.DataFrame(l_manufacturers,
                            columns=['manufacturer', 'product'])
        df_s = pd.DataFrame(l_suppliers,
                            columns=['supplier', 'manufacturer', 'product'])

        ## if there is no manufacturer data
        if len(df_m) == 0:
            items.extend([
                ui.message_bar(type='info',
                               text='Try adding manufacturer first'),
                ui.button(name='goto_manufacturer',
                          label='Close',
                          primary=True)
            ])

        ## if there is no supplier data
        elif len(df_s) == 0:
            items.extend([
                ui.message_bar(type='info', text='Try adding supplier first'),
                ui.button(name='goto_supplier', label='Close', primary=True)
            ])

        ## if there is data on manufacturer and supplier, when the user click 'Add Product' button
        else:
            items.append(ui.text_xl(content='Add Product'))
            print('q.args.product: ' + str(q.args.product) +
                  ', q.args.manufacturer: ' + str(q.args.manufacturer) +
                  ', q.args.supplier: ' + str(q.args.supplier))

            if q.args.product and (filter_product == None
                                   or q.args.product != filter_product):
                filter_product = q.args.product
                filter_manufacturer = None
                filter_supplier = None
                unit_measure = None
                # selling_price = None
                gqty = None
            elif q.args.manufacturer and (
                    filter_manufacturer == None
                    or q.args.manufacturer != filter_manufacturer):
                filter_manufacturer = q.args.manufacturer
                filter_supplier = None
                unit_measure = None
                # selling_price = None
                gqty = None
            elif q.args.supplier and (filter_supplier == None
                                      or q.args.supplier != filter_supplier):
                filter_supplier = q.args.supplier
                unit_measure = None
                # selling_price = None
                gqty = None
            if q.args.qty:
                gqty = q.args.qty

            print(filter_product, filter_manufacturer, filter_supplier)

            ## PRODUCT
            if filter_product != None:
                items.append(
                    ui.dropdown(name='product',
                                label='Product',
                                choices=[
                                    ui.choice(name=x, label=x)
                                    for x in df_m['product'].unique()
                                ],
                                trigger=True,
                                value=filter_product))
                tmp_m = df_m[df_m['product'] ==
                             q.args.product]['manufacturer'].unique()

            else:
                items.append(
                    ui.dropdown(name='product',
                                label='Product',
                                choices=[
                                    ui.choice(name=x, label=x)
                                    for x in df_m['product'].unique()
                                ],
                                trigger=True))
                tmp_m = df_m['manufacturer'].unique()

            ## MANUFACTURER
            if filter_manufacturer != None:
                items.append(
                    ui.dropdown(
                        name='manufacturer',
                        label='Manufacturer',
                        choices=[ui.choice(name=x, label=x) for x in tmp_m],
                        trigger=True,
                        value=filter_manufacturer))
                tmp_s = df_s[(df_s['product'] == filter_product)
                             & (df_s['manufacturer'] == filter_manufacturer
                                )]['supplier'].unique()

            else:
                items.append(
                    ui.dropdown(
                        name='manufacturer',
                        label='Manufacturer',
                        choices=[ui.choice(name=x, label=x) for x in tmp_m],
                        trigger=True))
                tmp_s = df_s['supplier'].unique()

            ## SUPPLIER
            if filter_supplier != None:
                items.append(
                    ui.dropdown(
                        name='supplier',
                        label='Supplier',
                        choices=[ui.choice(name=x, label=x) for x in tmp_s],
                        trigger=True,
                        value=filter_supplier))
                # selling_price = df_s[(df_s['product']==filter_product)&(df_s['manufacturer']==filter_manufacturer)
                #                   &(df_s['supplier']==filter_supplier)]['selling_price'].values[0]
                # unit_measure = df_s[(df_s['product']==filter_product)&(df_s['manufacturer']==filter_manufacturer)
                #                   &(df_s['supplier']==filter_supplier)]['uom'].values[0]

            else:
                items.append(
                    ui.dropdown(
                        name='supplier',
                        label='Supplier',
                        choices=[ui.choice(name=x, label=x) for x in tmp_s],
                        trigger=True))
                # selling_price = None

            # items.append(ui.date_picker(name='purchase_date', label='Purchase Date'))
            # items.append(ui.textbox(name='qty', label='Qty'))

            # ## SELLING PRICE
            # if selling_price!=None:
            #   items.append(ui.textbox(name='selling_price', label='Selling Price', value = str(selling_price)))
            # else:
            #   items.append(ui.textbox(name='selling_price', label='Selling Price'))

            # ## UOM
            # if unit_measure!=None:
            #   items.append(ui.textbox(name='uom', label='Unit of Measurement', value = unit_measure, readonly = True))
            # else:
            #   items.append(ui.dropdown(name='uom', label='Unit of Measurement', choices=[
            #       ui.choice(name=x, label=x) for x in uom
            #   ]))

            # items.extend([
            #   # ui.date_picker(name='mfg_date', label='Mfg Date'),
            #   # ui.date_picker(name='exp_date', label='Exp Date'),
            #   ui.textbox(name='selling_price', label='Selling Price'),
            #   # ui.textbox(name='operational_cost', label='Operational Cost'),
            #   # ui.textbox(name='lvl', label='Order Point by level(%)'),
            #   # ui.textbox(name='schedule', label='Order Point Schedule (days)'),
            #   # ui.textbox(name='schedule_qty', label='Scheduled Qty'),
            #   # ui.textbox(name='rate', label='Avg. Consumption'),
            #   # ui.dropdown(name='freq', label='Consumption Frequency', choices=[
            #   #     ui.choice(name=x, label=x, value='daily', readonly=True) for x in consumption
            #   # ]),
            #   ui.button(name='show_tables', label='Submit', primary=True)])

            items.extend([
                # ui.textbox(name='selling_price', label='Selling Price'),
                ui.button(name='show_tables', label='Submit', primary=True)
            ])

    else:  ## first iteration goes here
        filter_product = None
        filter_manufacturer = None
        filter_supplier = None
        unit_measure = None
        selling_price = None
        gqty = None

        ## if q.args.show_tables == True
        if q.args.show_tables:
            # l_products.append([q.args.product, q.args.manufacturer, q.args.supplier, q.args.purchase_date, q.args.qty,
            #             q.args.uom, q.args.selling_price, q.args.mfg_date, q.args.exp_date, q.args.selling_price,
            #             q.args.operational_cost, q.args.lvl, q.args.schedule, q.args.schedule_qty, q.args.rate])
            # p = Products(q.args.product, q.args.manufacturer, q.args.supplier, q.args.purchase_date, q.args.qty,
            #             q.args.uom, q.args.selling_price, q.args.mfg_date, q.args.exp_date, q.args.selling_price,
            #             q.args.operational_cost, q.args.lvl, q.args.schedule, q.args.schedule_qty, q.args.rate)

            # l_products.append([q.args.product, q.args.manufacturer, q.args.supplier,
            #             q.args.uom])
            l_products.append(
                [q.args.product, q.args.manufacturer, q.args.supplier])
            # p = Products(q.args.product, q.args.manufacturer, q.args.supplier,
            #             q.args.uom)
            p = Products(q.args.product, q.args.manufacturer, q.args.supplier)
            products.append(p)
            items.append(
                ui.message_bar(type='success',
                               text='You have successfully added a product'))

        ## if there is a product data
        if len(products) > 0:
            items.append(
                ui.table(
                    name='products',
                    columns=column_product_table,
                    rows=[
                        ui.table_row(
                            name=product.id,
                            # cells=[product.product, product.manufacturer, product.supplier, product.selling_price,
                            #     product.uom]
                            cells=[
                                product.product, product.manufacturer,
                                product.supplier
                            ]) for product in products
                    ],
                    groupable=True,
                    downloadable=True,
                    resettable=True,
                    height='500px'))
        else:  ## if there is no product data
            items.append(ui.text_l(content='No Product found'))

        # items.append(ui.button(name='show_inputs', label='Add Product', primary=True))

        items.append(
            ui.buttons([
                ui.button(name='show_inputs',
                          label='Add Product',
                          primary=True),
                ui.button(name='delete_button', label='Delete Product'),
                ui.button(name='edit_button', label='Edit Product'),
            ]))

    q.page['example'] = ui.form_card(box='1 2 -1 -1', items=items)
    await q.page.save()
Exemplo n.º 21
0
def init_ui(q: Q):
    q.page['meta'] = ui.meta_card(
        title='Shopping Cart Recomendations',
        box='',
        layouts=[
            ui.layout(breakpoint='xs',
                      zones=[
                          ui.zone('header', size='80px'),
                          ui.zone('cart', size='250px'),
                          ui.zone('trending'),
                          ui.zone('suggestions'),
                      ]),
            ui.layout(
                breakpoint='m',
                zones=[
                    ui.zone('header', size='80px'),
                    ui.zone('body',
                            size='1000px',
                            direction=ui.ZoneDirection.ROW,
                            zones=[
                                ui.zone('cart', size='300px'),
                                ui.zone('right-pane',
                                        direction=ui.ZoneDirection.COLUMN,
                                        zones=[
                                            ui.zone('trending', size='600px'),
                                            ui.zone('suggestions'),
                                        ]),
                            ]),
                ]),
            ui.layout(breakpoint='xl',
                      width='1600px',
                      zones=[
                          ui.zone('header', size='80px'),
                          ui.zone('body',
                                  size='750px',
                                  direction=ui.ZoneDirection.ROW,
                                  zones=[
                                      ui.zone('cart', size='300px'),
                                      ui.zone('trending'),
                                      ui.zone('suggestions'),
                                  ])
                      ])
        ])

    q.page.add(
        'header',
        ui.header_card(
            box='header',
            title=config.title,
            subtitle=config.subtitle,
            icon=config.icon,
            icon_color=config.icon_color,
        ))

    q.page['suggestions'] = ui.form_card(box='suggestions', items=[])
    q.page['trending'] = ui.form_card(box='trending', items=[])
    q.page['cart'] = ui.form_card(
        box='cart',
        items=[
            ui.separator('Cart'),
            ui.text('Search and add products to the cart'),
            ui.picker(
                name='cart_products',
                choices=[
                    ui.choice(name=str(x), label=str(x))
                    for x in get_products_list()
                ],
                values=q.client.cart_products,
                trigger=True,
            ),
            ui.button(name='toggle_theme', label='Toggle Theme', primary=True)
        ])
    q.client.theme = 'default'
Exemplo n.º 22
0
    convert_plot_to_html,
    generate_figure_pie_of_target_percent,
    get_image_from_matplotlib,
    tall_stat_card_dollars,
    wide_stat_card_dollars,
)
from .utils import python_code_content

config = Configuration()
churn_predictor = ChurnPredictor()

df = pd.read_csv(config.testing_data_url).head(40)
df.fillna(config.def_column_values, inplace=True)
df.dropna(subset=config.mandatory_columns, inplace=True)
phone_choices = [
    ui.choice(name=str(phone), label=str(phone))
    for phone in df[config.id_column]
]


def render_header(q: Q):
    q.page["title"] = ui.header_card(box=config.boxes["banner"],
                                     title=config.title,
                                     subtitle=config.subtitle,
                                     icon=config.icon,
                                     icon_color=config.color,
                                     nav=config.global_nav)


def show_profile(q: Q):
    del q.page["content"]
Exemplo n.º 23
0
async def show_cyan_dashboard(q: Q):
    q.page['meta'] = ui.meta_card(box='', layouts=[
        ui.layout(
            breakpoint='xl',
            width='1200px',
            zones=[
                ui.zone('header', size='0'),
                ui.zone('body', direction=ui.ZoneDirection.ROW, zones=[
                    ui.zone('content', size='75%', zones=[
                        ui.zone('top', size='600px'),
                        ui.zone('middle', size='300px', direction=ui.ZoneDirection.ROW, zones=[
                            ui.zone('middle_left'),
                            ui.zone('middle_right'),
                        ]),
                        ui.zone('bottom', size='500px'),
                    ]),
                    ui.zone('sidebar', size='25%'),
                ]),
                ui.zone('footer', size='0'),
            ]
        )
    ])

    q.page['header'] = ui.header_card(box='header', title='H2O Wave Demo', subtitle='Cyan Dashboard',
                                      nav=global_nav)
    q.page['section'] = ui.section_card(
        box=ui.box('top', order=1, size=0),
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[
            ui.toggle(name='when', label=next(sample_term), value=False),
            ui.toggle(name='what', label=next(sample_term), value=True),
        ]
    )

    trend_date = generate_time_series(300)
    trend_price = generate_random_walk(2000, 8000, 0.2)
    q.page['sales_overview'] = ui.form_card(
        box=ui.box('top', order=2),
        title=next(sample_title),
        items=[
            ui.stats(items=[
                ui.stat(label=next(sample_term), value=next(sample_percent), caption=next(sample_dollars)),
                ui.stat(label=next(sample_term), value=next(sample_dollars), caption=next(sample_percent)),
                ui.stat(label=next(sample_term), value=next(sample_amount), caption=next(sample_percent)),
                ui.stat(label=next(sample_term), caption=next(sample_caption)),
            ], inset=True),
            ui.visualization(
                plot=ui.plot([
                    ui.mark(type='area', x_scale='time', x='=date', y='=price', color='$cyan'),
                ]),
                data=data(
                    fields=['date', 'price'],
                    rows=[(next(trend_date), next(trend_price)) for i in range(120)],
                    pack=True
                ),
                height='350px',
            ),
        ],
    )

    q.page['ticket_sales'] = ui.form_card(
        box=ui.box('middle_left'),
        title=next(sample_title),
        items=[
            ui.visualization(
                plot=ui.plot([
                    ui.mark(type='interval', x_scale='time', x='=date', y='=price', color='$cyan'),
                ]),
                data=data(
                    fields=['date', 'price'],
                    rows=[(next(trend_date), next(trend_price)) for i in range(120)],
                    pack=True
                ),
                height='150px',
            ),
            ui.stats(items=[
                ui.stat(label=next(sample_term), value=next(sample_percent)) for i in range(4)
            ], justify='between', inset=True),
        ],
    )
    q.page['events_hosted'] = ui.wide_bar_stat_card(
        box=ui.box('middle_right', order=1),
        title=next(sample_title),
        value=next(sample_dollars),
        aux_value=next(sample_percent),
        progress=random.random(),
        plot_color='$cyan',
    )
    q.page['points_earned'] = ui.wide_bar_stat_card(
        box=ui.box('middle_right', order=2),
        title=next(sample_title),
        value=next(sample_amount),
        aux_value=next(sample_percent),
        progress=random.random(),
        plot_color='$cyan',
    )
    q.page['points_given'] = ui.wide_bar_stat_card(
        box=ui.box('middle_right', order=3),
        title=next(sample_title),
        value=next(sample_dollars),
        aux_value=next(sample_percent),
        progress=random.random(),
        plot_color='$cyan',
    )
    session_count = generate_random_walk(1000, 8000)
    q.page['event_poll'] = ui.form_card(
        box='bottom',
        title=next(sample_title),
        items=[
            ui.inline(items=[
                ui.dropdown(name='region', label=next(sample_term), value='option0', choices=[
                    ui.choice(name=f'option{i}', label=next(sample_term)) for i in range(5)
                ]),
                ui.dropdown(name='age', label=next(sample_term), value='option0', choices=[
                    ui.choice(name=f'option{i}', label=next(sample_term)) for i in range(5)
                ]),
                ui.dropdown(name='response', label=next(sample_term), value='option0', choices=[
                    ui.choice(name=f'option{i}', label=next(sample_term)) for i in range(5)
                ]),
            ]),
            ui.visualization(
                plot=ui.plot([
                    ui.mark(type='interval', x='=sessions', y='=channel', y_min=0, color='$cyan')
                ]),
                data=data(
                    fields=['channel', 'sessions'],
                    rows=[(next(sample_term), next(session_count)) for i in range(10)],
                    pack=True,
                ),
                height='350px',
            ),
        ],

    )
    q.page['sidebar_section'] = ui.section_card(
        box=ui.box('sidebar', order=1, size='0'),
        title=next(sample_title),
        subtitle=next(sample_caption),
    )
    q.page['filter'] = ui.form_card(
        box=ui.box('sidebar', height='335px', order=2),
        title=next(sample_title),
        items=[
            ui.dropdown(name='region', label=next(sample_term), value='option0', choices=[
                ui.choice(name=f'option{i}', label=next(sample_term)) for i in range(5)
            ]),
            ui.dropdown(name='age', label=next(sample_term), value='option0', choices=[
                ui.choice(name=f'option{i}', label=next(sample_term)) for i in range(5)
            ]),
            ui.dropdown(name='response', label=next(sample_term), value='option0', choices=[
                ui.choice(name=f'option{i}', label=next(sample_term)) for i in range(5)
            ]),
            ui.checkbox(name='plural', label=next(sample_title), value=True),
            ui.checkbox(name='annual', label=next(sample_title), value=True),
        ],
    )

    event_icon = generate_random_choice(['MusicInCollection', 'Video', 'TVMonitor'])

    q.page['upcoming_events'] = ui.stat_list_card(
        box=ui.box('sidebar', order=3),
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[ui.stat_list_item(label=next(sample_title), caption=next(sample_caption),
                                 aux_value=f'{random.randint(1, 59)}m',
                                 icon=next(event_icon)) for i in range(10)],
    )

    q.page['footer'] = ui.footer_card(box='footer', caption='(c) 2021 H2O.ai. All rights reserved.')

    await q.page.save()
Exemplo n.º 24
0
# Form / Choice Group / Inline
# Use #choice groups to let users select one option from two or more choices and inline to present the choices horizontally.
# #form #choice_group #inline
# ---
from h2o_wave import main, app, Q, ui

choices = [
    ui.choice('A', 'Option A'),
    ui.choice('B', 'Option B'),
    ui.choice('C', 'Option C', disabled=True),
    ui.choice('D', 'Option D'),
    ui.choice('E', 'Option E'),
    ui.choice('F', 'Option F'),
    ui.choice('G', 'Option H'),
    ui.choice('I', 'Option I'),
]


@app('/demo')
async def serve(q: Q):
    if q.args.show_inputs:
        q.page['example'].items = [
            ui.text(f'selected={q.args.choice_group}'),
            ui.button(name='show_form', label='Back', primary=True),
        ]
    else:
        q.page['example'] = ui.form_card(box='1 1 4 10',
                                         items=[
                                             ui.choice_group(
                                                 name='choice_group',
                                                 inline=True,
Exemplo n.º 25
0
def get_tab_content(category: str):
    # Return a checklist of dummy items.
    items = [f'{category.title()} {i}' for i in range(1, 11)]
    return ui.checklist(name='items', choices=[ui.choice(name=item, label=item) for item in items])
Exemplo n.º 26
0
def choices_from_list(ls: list) -> list:
    """
    List of values as list of Q ui.choice.
    """
    return [ui.choice(name=str(x), label=str(x)) for x in ls]
Exemplo n.º 27
0
async def show_orange_dashboard(q: Q):
    q.page['meta'] = ui.meta_card(
        box='',
        layouts=[
            ui.layout(breakpoint='xl',
                      width='1200px',
                      zones=[
                          ui.zone('header'),
                          ui.zone('control'),
                          ui.zone('top',
                                  direction=ui.ZoneDirection.ROW,
                                  size='385px',
                                  zones=[
                                      ui.zone('top_left',
                                              direction=ui.ZoneDirection.ROW,
                                              size='66%'),
                                      ui.zone('top_right'),
                                  ]),
                          ui.zone('middle',
                                  direction=ui.ZoneDirection.ROW,
                                  size='400px'),
                          ui.zone('bottom',
                                  direction=ui.ZoneDirection.ROW,
                                  size='200px'),
                          ui.zone('footer'),
                      ])
        ])

    q.page['header'] = ui.header_card(box='header',
                                      title='H2O Wave Demo',
                                      subtitle='Orange Dashboard',
                                      nav=global_nav)

    q.page['section'] = ui.section_card(
        box='control',
        title=next(sample_title),
        subtitle=next(sample_caption),
        items=[
            ui.checkbox(name='search', label=next(sample_title), value=True),
            ui.dropdown(name='distribution',
                        label='',
                        value='option0',
                        choices=[
                            ui.choice(name=f'option{i}',
                                      label=next(sample_term))
                            for i in range(5)
                        ]),
            ui.dropdown(name='source',
                        label='',
                        value='option0',
                        choices=[
                            ui.choice(name=f'option{i}',
                                      label=next(sample_term))
                            for i in range(5)
                        ]),
            ui.dropdown(name='range',
                        label='',
                        value='option0',
                        choices=[
                            ui.choice(name=f'option{i}',
                                      label=next(sample_term))
                            for i in range(5)
                        ]),
        ],
    )

    user_days = generate_time_series(30)
    user_counts = generate_random_walk()

    q.page['unique_impressions'] = ui.tall_series_stat_card(
        box='top_left',
        title=next(sample_title),
        value=next(sample_amount),
        aux_value=next(sample_percent),
        plot_type='interval',
        plot_color='$orange',
        plot_category='date',
        plot_value='users',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'users'],
            rows=[(next(user_days), next(user_counts)) for i in range(60)],
            pack=True,
        ),
    )

    q.page['unique_clicks'] = ui.tall_series_stat_card(
        box='top_left',
        title=next(sample_title),
        value=next(sample_dollars),
        aux_value=next(sample_title),
        plot_type='interval',
        plot_color='$amber',
        plot_category='date',
        plot_value='users',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'users'],
            rows=[(next(user_days), next(user_counts)) for i in range(60)],
            pack=True,
        ),
    )

    q.page['popularity'] = ui.wide_series_stat_card(
        box='top_right',
        title=next(sample_term),
        value=next(sample_percent),
        aux_value=next(sample_amount),
        plot_type='area',
        plot_color='$tangerine',
        plot_category='date',
        plot_value='users',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'users'],
            rows=[(next(user_days), next(user_counts)) for i in range(60)],
            pack=True,
        ),
    )
    q.page['search_traffic'] = ui.wide_series_stat_card(
        box='top_right',
        title=next(sample_term),
        value=next(sample_percent),
        aux_value=next(sample_dollars),
        plot_type='interval',
        plot_color='$tangerine',
        plot_category='date',
        plot_value='users',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'users'],
            rows=[(next(user_days), next(user_counts)) for i in range(60)],
            pack=True,
        ),
    )
    q.page['social_media_traffic'] = ui.wide_series_stat_card(
        box='top_right',
        title=next(sample_title),
        value='68K',
        aux_value='Down 6%',
        plot_type='area',
        plot_color='$tangerine',
        plot_category='date',
        plot_value='users',
        plot_zero_value=0,
        plot_data=data(
            fields=['date', 'users'],
            rows=[(next(user_days), next(user_counts)) for i in range(60)],
            pack=True,
        ),
    )

    audience_days1 = generate_time_series(60)
    audience_days2 = generate_time_series(60)
    audience_hits1 = generate_random_walk(10000, 20000, 0.2)
    audience_hits2 = generate_random_walk(8000, 15000)

    q.page['stats'] = ui.form_card(
        box='middle',
        title=next(sample_title),
        items=[
            ui.stats(items=[
                ui.stat(label=next(sample_term), value=next(sample_dollars)),
                ui.stat(label=next(sample_term), value=next(sample_percent)),
                ui.stat(label=next(sample_term), value=next(sample_amount)),
                ui.stat(label=next(sample_term), value=next(sample_dollars)),
                ui.stat(label=next(sample_term), value=next(sample_percent)),
                ui.stat(label=next(sample_term), value=next(sample_amount)),
                ui.stat(label=next(sample_term), value=next(sample_dollars)),
                ui.stat(label=next(sample_term), value=next(sample_percent)),
            ],
                     justify=ui.StatsJustify.BETWEEN,
                     inset=True),
            ui.visualization(
                plot=ui.plot([
                    ui.mark(type='area',
                            x_scale='time',
                            x='=date',
                            y='=visitors',
                            color='=site',
                            color_range='$orange $amber',
                            curve=ui.MarkCurve.SMOOTH),
                    ui.mark(type='line',
                            x_scale='time',
                            x='=date',
                            y='=visitors',
                            color='=site',
                            color_range='$orange $amber',
                            curve=ui.MarkCurve.SMOOTH),
                ]),
                data=data(
                    fields=['site', 'date', 'visitors'],
                    rows=[
                        ('Online', next(audience_days1), next(audience_hits1))
                        for i in range(60)
                    ] +
                    [('In-store', next(audience_days2), next(audience_hits2))
                     for i in range(60)],
                    pack=True),
                height='240px',
            )
        ],
    )

    q.page['click_through'] = ui.large_stat_card(
        box='bottom',
        title=next(sample_title),
        value=next(sample_amount),
        aux_value=next(sample_dollars),
        caption=' '.join([next(sample_caption) for i in range(3)]),
    )

    q.page['view_through'] = ui.large_stat_card(
        box='bottom',
        title=next(sample_title),
        value=next(sample_amount),
        aux_value=next(sample_dollars),
        caption=' '.join([next(sample_caption) for i in range(3)]),
    )
    q.page['total_conversions'] = ui.large_stat_card(
        box='bottom',
        title=next(sample_title),
        value=next(sample_amount),
        aux_value=next(sample_dollars),
        caption=' '.join([next(sample_caption) for i in range(3)]),
    )

    q.page['footer'] = ui.footer_card(
        box='footer', caption='(c) 2021 H2O.ai. All rights reserved.')

    await q.page.save()
Exemplo n.º 28
0
async def serve(q: Q):
    q.page['example'] = ui.form_card(box='1 1 4 10', items=[
        ui.text_xl(content='Extra-large text, for headings.'),
        ui.text_l(content='Large text, for sub-headings.'),
        ui.text_m(content='Body text, for paragraphs and other content.'),
        ui.text_s(content='Small text, for small print.'),
        ui.text_xs(content='Extra-small text, for really small print.'),
        ui.separator(label='A separator sections forms'),
        ui.progress(label='A progress bar'),
        ui.progress(label='A progress bar'),
        ui.message_bar(type='success', text='Message bar'),
        ui.textbox(name='textbox', label='Textbox'),
        ui.label(label='Checkboxes'),
        ui.checkbox(name='checkbox1', label='A checkbox'),
        ui.checkbox(name='checkbox1', label='Another checkbox'),
        ui.checkbox(name='checkbox1', label='Yet another checkbox'),
        ui.toggle(name='toggle', label='Toggle'),
        ui.choice_group(name='choice_group', label='Choice group', choices=[
            ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']
        ]),
        ui.checklist(name='checklist', label='Checklist', choices=[
            ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']
        ]),
        ui.dropdown(name='dropdown', label='Dropdown', choices=[
            ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']
        ]),
        ui.dropdown(name='dropdown', label='Multi-valued Dropdown', values=[], choices=[
            ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam']
        ]),
        ui.combobox(name='combobox', label='Combobox', choices=['Choice 1', 'Choice 2', 'Choice 3']),
        ui.slider(name='slider', label='Slider'),
        ui.range_slider(name='range_slider', label='Range slider', max=99),
        ui.spinbox(name='spinbox', label='Spinbox'),
        ui.date_picker(name='date_picker', label='Date picker'),
        ui.color_picker(name='color_picker', label='Color picker'),
        ui.buttons([
            ui.button(name='primary_button', label='Primary', primary=True),
            ui.button(name='standard_button', label='Standard'),
            ui.button(name='standard_disabled_button', label='Standard', disabled=True),
        ]),
        ui.file_upload(name='file_upload', label='File upload'),
        ui.table(name='table', columns=[
            ui.table_column(name='col1', label='Column 1'),
            ui.table_column(name='col2', label='Column 2'),
        ], rows=[
            ui.table_row(name='row1', cells=['Text A', 'Text B']),
            ui.table_row(name='row2', cells=['Text C', 'Text D']),
            ui.table_row(name='row3', cells=['Text E', 'Text F']),
        ]),
        ui.link(label='Link'),
        ui.tabs(name='tabs', items=[
            ui.tab(name='email', label='Mail', icon='Mail'),
            ui.tab(name='events', label='Events', icon='Calendar'),
            ui.tab(name='spam', label='Spam'),
        ]),
        ui.expander(name='expander', label='Expander'),
        ui.frame(path='https://example.com'),
        ui.markup(content=html),
        ui.template(
            content=menu,
            data=pack(dict(dishes=[
                dict(name='Spam', price='$2.00'),
                dict(name='Ham', price='$3.45'),
                dict(name='Eggs', price='$1.75'),
            ]))
        ),
        ui.picker(name='picker', label='Picker', choices=[
            ui.choice('choice1', label='Choice 1'),
            ui.choice('choice2', label='Choice 2'),
            ui.choice('choice3', label='Choice 3'),
        ]),
        ui.stepper(name='stepper', items=[
            ui.step(label='Step 1', icon='MailLowImportance'),
            ui.step(label='Step 2', icon='TaskManagerMirrored'),
            ui.step(label='Step 3', icon='Cafe'),
        ]),
        ui.visualization(
            plot=ui.plot([ui.mark(type='interval', x='=product', y='=price', y_min=0)]),
            data=data(fields='product price', rows=[(c, x) for c, x, _ in [f.next() for _ in range(n)]], pack=True),
        ),
        ui.vega_visualization(
            specification=spec,
            data=data(fields=["a", "b"], rows=[
                ["A", rnd()], ["B", rnd()], ["C", rnd()],
                ["D", rnd()], ["E", rnd()], ["F", rnd()],
                ["G", rnd()], ["H", rnd()], ["I", rnd()]
            ], pack=True),
        ),
        ui.button(name='show_inputs', label='Submit', primary=True),
    ])
    await q.page.save()
Exemplo n.º 29
0
async def showSuppliers(q: Q):
    items = [ui.tabs(name='menu', value=q.args.menu, items=tabs)]
    print('items in supplier: ' + str(items))

    ## if user clicks 'Add Supplier'
    if q.args.show_inputs:
        ## need to get manufacturer data first (later used for the dropdown when addiing new supplier)
        df_m = pd.DataFrame(l_manufacturers,
                            columns=['manufacturer', 'product'])

        ## if there is no Manufacter data, then the user should add manufacturer data first
        if len(df_m) == 0:
            items.extend([
                ui.message_bar(type='info',
                               text='Try adding manufacturer first'),
                ui.button(name='goto_manufacturer',
                          label='Close',
                          primary=True)
            ])

        ## there's a manufacturer data, then go here
        else:
            items.extend([
                ui.text_xl(content='Add Supplier'),
                ui.textbox(name='supplier', label='Supplier'),
                ui.dropdown(
                    name='manufacturer',
                    label='Manufacturer',
                    choices=[  ## dropdown existing manufacturers
                        ui.choice(name=x, label=x)
                        for x in df_m['manufacturer'].unique()
                    ]),
                ui.dropdown(
                    name='product',
                    label='Product',
                    choices=[  ## dropdown existing items
                        ui.choice(name=x, label=x)
                        for x in df_m['product'].unique()
                    ]),  ## product should based on the what manufacturer have
                # ui.dropdown(name='uom', label='Unit of Measurement', choices=[ ## dropdown unit of measurement based on UOM variable above
                #     ui.choice(name=x, label=x) for x in uom
                # ]),
                # ui.textbox(name='selling_price', label='Price'),
                # ui.textbox(name='lead_time', label='Lead Time(days)'),
                # ui.textbox(name='delivery_time', label='Delivery Time(days)'),
                ui.button(name='show_tables', label='Submit',
                          primary=True)  ## submit button
            ])

    ## user hasn't clicked 'Add suppliers' button
    else:
        ## user have click has clicked 'Submit' button after adding supplier
        if q.args.show_tables:
            l_suppliers.append(
                [q.args.supplier, q.args.manufacturer, q.args.product])  ## !!!
            s = Suppliers(q.args.supplier, q.args.manufacturer, q.args.product)
            suppliers.append(s)
            items.append(
                ui.message_bar(type='success',
                               text='You have successfully added a supplier'))

        ## default view (if there's suppliers data)
        if len(suppliers) > 0:
            items.append(
                ui.table(name='suppliers',
                         columns=column_supplier_table,
                         rows=[
                             ui.table_row(name=supplier.id,
                                          cells=[
                                              supplier.supplier,
                                              supplier.manufacturer,
                                              supplier.product
                                          ]) for supplier in suppliers
                         ],
                         groupable=True,
                         downloadable=True,
                         resettable=True,
                         height='500px'))

        ## default view (if there's a supplier data)
        else:
            items.append(ui.text_l(content='No Supplier found'))

        # items.append(ui.button(name='show_inputs', label='Add Supplier', primary=True))

        items.append(
            ui.buttons([
                ui.button(name='show_inputs',
                          label='Add Supplier',
                          primary=True),
                ui.button(name='delete_button', label='Delete Supplier'),
                ui.button(name='edit_button', label='Edit Supplier'),
            ]))

    q.page['example'] = ui.form_card(box='1 2 -1 -1', items=items)
    await q.page.save()
Exemplo n.º 30
0
def column_choices_from_df(df: pd.DataFrame) -> list:
    """
    List of dataframe columns as list of Q ui.choice.
    """
    return [ui.choice(name=str(x), label=str(x)) for x in df.columns.values]