def print_results()

in src/tab_grouping_streamlit.py [0:0]


def print_results(df, user_label_key: str, ai_label_key: str, topic_generator: str = None, predicted_id_topics=None,
                  docname="test_output", scores=None):
    ai_label_for_user_grouped_topic = {}
    html_buffer = ""

    key_doc_finder_ai = KeyDocumentFinder(df, ai_label_key, "title")
    key_doc_finder_ai.compute_all()
    key_doc_finder_user = KeyDocumentFinder(df, user_label_key, "title")
    key_doc_finder_user.compute_all()

    def add_html(s: str):
        nonlocal html_buffer
        html_buffer += s

    if predicted_id_topics is None:
        predicted_id_topics = {}
    color_table = {}

    topic_generator = get_topic_generator(topic_generator)

    add_html('<div class="tab-container">')

    def get_color(label: str):
        if label in color_table:
            return color_table[label]
        else:
            color_table[label] = COLOR_LIST[len(color_table)]
            return color_table[label]

    def get_tab_group(group_key: str, group_item: str, label_key: str, is_ai_group: False):
        if group_item is None:
            add_html('<div class="tab-group"> </div>')
            return
        items = df[df[group_key] == group_item]
        topic = None
        picked_documents_set = set()
        keywords = ""
        if len(items) > 0:
            key_doc_finder = key_doc_finder_ai if is_ai_group else key_doc_finder_user
            topic, picked_documents, keywords = compute_topic_using_digest(topic_generator, key_doc_finder, items,
                                                                           group_item)
        add_html('<div class="tab-group">')
        extra_topic = ""
        if is_ai_group:
            header_title = topic or "Unknown"
        else:
            if isinstance(group_item, float):
                group_item = int(group_item)
            header_title = predicted_id_topics.get(str(group_item), group_item)
            extra_topic = topic or "Unknown"
            ai_label_for_user_grouped_topic[str(group_item)] = extra_topic
        add_html(f'<div class="tab-header">{header_title}</div>')
        add_html(f'<div class="tab-content">')
        labels = items[label_key].astype(str).to_list()
        bullet_points = items["title"].to_list()
        for k in range(0, len(bullet_points)):
            add_html(f''' 
                    <div class="tab-item">
                        <div class="tab-item-box" style="background-color:{get_color(labels[k])}"></div>
                        <div class="tab-item-text">{bullet_points[k]}</div>
                    </div>            ''')
        add_html('</div>')  # tab-content
        add_html('</div>')  # tab-group

    aligned_user_ai_topic_list = compute_aligned_topics(df, user_label_key, ai_label_key)
    add_html('<div class="group-match-pair">')
    add_html('<div class="tab-group-legend">')
    add_html(docname)
    add_html('<div class="tab-group-legend-subhead">Tab groups you named</div>')
    add_html('</div>')
    add_html('<div class="tab-group-legend">')
    add_html('AI Generated')
    add_html('<div class="tab-group-legend-subhead">Generated tab groups, tabs sorted by group match accuracy</div>')
    add_html('</div>')
    add_html('</div>')
    for topic_item in aligned_user_ai_topic_list:
        user_topic = topic_item[0]
        ai_topic = topic_item[1]
        add_html('<div class="group-match-pair">')
        get_tab_group(user_label_key, user_topic, user_label_key, is_ai_group=False)
        get_tab_group(ai_label_key, ai_topic, user_label_key, is_ai_group=True)
        add_html('</div>')

    if scores is not None:
        add_html(
            f'<div class="report-header">Avg. Rand Score: {scores[0]:.2f} Adjusted Rand Score: {scores[1]:.2f}</div>')

    # Show label pairs for user labeled groups
    add_html(
        '<p /><p /><p /><div class="tab-container-title">Labels for Your Original Groupings</div><div class="report-header">')
    for topic_item in aligned_user_ai_topic_list:
        user_topic = topic_item[0]
        if user_topic is None:
            break
        if isinstance(user_topic, float):
            user_topic = int(user_topic)
        user_label = predicted_id_topics.get(str(user_topic), user_topic)
        ai_label = ai_label_for_user_grouped_topic.get(str(user_topic), "--")
        add_html(f'<p><b>User Label:</b> {user_label} &nbsp;&nbsp;&nbsp; <b>AI Label:</b> {ai_label} </p>')
    add_html('</div>')

    add_html('</div>')  # tab-container
    label_dict = predicted_id_topics or {}
    legend = f'''
            <div class="tab-container-title">Tab Grouping Report</div>
            <div class="legend">
             {"".join([f'<div class="legend-item">{get_box(v, big=True)}<div>{label_dict.get(str(k), k)}</div></div>' for k, v in color_table.items()])}
             </div>
             '''

    all_html = STYLE_CSS + legend + html_buffer
    st.html(all_html)
    if DO_OUTPUT_HTML_RESULT:
        with open(f"./output/{docname}_out.html", "w") as file:
            file.write(f"<html><body>{all_html}</body></html>")