freemt commited on
Commit
f983d52
Β·
1 Parent(s): 45179c7

Update default layout='wide'

Browse files
Files changed (4) hide show
  1. app.py +6 -4
  2. litbee/app-.py +140 -0
  3. litbee/app.py +53 -6
  4. litbee/home.py +305 -0
app.py CHANGED
@@ -79,12 +79,13 @@ from litbee import __version__
79
  from litbee.utils import menu_items
80
 
81
  from litbee.multipage import Multipage
82
- from litbee.fetch_upload import fetch_upload
83
- from litbee.settings import settings
84
 
 
85
  # from litbee.fetch_paste import fetch_paste
86
  # from litbee.fetch_urls import fetch_urls
87
 
 
 
88
  from litbee.info import info
89
  from litbee.utils import style_css
90
 
@@ -121,7 +122,7 @@ st.set_page_config(
121
  page_title=f"litbee v{__version__}",
122
  # page_icon="🧊",
123
  page_icon="🐝",
124
- # layout="wide",
125
  initial_sidebar_state="auto", # "auto" or "expanded" or "collapsed",
126
  menu_items=menu_items,
127
  )
@@ -170,7 +171,8 @@ def main():
170
  # app.add_page("Settings", "gear", settings.app)
171
  # app.add_page("Info", "info", info.app)
172
 
173
- app.add_page("Home", "house", fetch_upload)
 
174
  app.add_page("Settings", "gear", settings)
175
  app.add_page("Info", "info", info)
176
 
 
79
  from litbee.utils import menu_items
80
 
81
  from litbee.multipage import Multipage
 
 
82
 
83
+ # from litbee.fetch_upload import fetch_upload
84
  # from litbee.fetch_paste import fetch_paste
85
  # from litbee.fetch_urls import fetch_urls
86
 
87
+ from litbee.home import home
88
+ from litbee.settings import settings
89
  from litbee.info import info
90
  from litbee.utils import style_css
91
 
 
122
  page_title=f"litbee v{__version__}",
123
  # page_icon="🧊",
124
  page_icon="🐝",
125
+ layout="wide",
126
  initial_sidebar_state="auto", # "auto" or "expanded" or "collapsed",
127
  menu_items=menu_items,
128
  )
 
171
  # app.add_page("Settings", "gear", settings.app)
172
  # app.add_page("Info", "info", info.app)
173
 
174
+ # app.add_page("Home", "house", fetch_upload)
175
+ app.add_page("Home", "house", home)
176
  app.add_page("Settings", "gear", settings)
177
  app.add_page("Info", "info", info)
178
 
litbee/app-.py ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Prep __main__.py.
2
+
3
+ https://share.streamlit.io/deploy
4
+ Advanced settings...
5
+ Python version
6
+ 3.7
7
+ 3.8
8
+ 3.9*
9
+ 3.10
10
+
11
+ https://docs.streamlit.io/knowledge-base/using-streamlit/hide-row-indices-displaying-dataframe
12
+ Hide row indices when displaying a dataframe
13
+ # CSS to inject contained in a string
14
+ hide_table_row_index = '''
15
+ <style>
16
+ tbody th {display:none}
17
+ .blank {display:none}
18
+ </style>
19
+ '''
20
+ # Inject CSS with Markdown
21
+ st.markdown(hide_table_row_index, unsafe_allow_html=True)
22
+
23
+ # Display a static table
24
+ st.table(df)
25
+
26
+ # Hide row indices with st.dataframe
27
+ # CSS to inject contained in a string
28
+ hide_dataframe_row_index = '''
29
+ <style>
30
+ .row_heading.level0 {display:none}
31
+ .blank {display:none}
32
+ </style>
33
+ '''
34
+ # Inject CSS with Markdown
35
+ st.markdown(hide_dataframe_row_index, unsafe_allow_html=True)
36
+
37
+ # Display an interactive table
38
+ st.dataframe(df)
39
+
40
+ https://medium.com/@avra42/streamlit-python-cool-tricks-to-make-your-web-application-look-better-8abfc3763a5b
41
+ hide_menu_style = '''
42
+ <style>
43
+ #MainMenu {visibility: hidden; }
44
+ footer {visibility: hidden;}
45
+ </style>
46
+ '''
47
+ st.markdown(hide_menu_style, unsafe_allow_html=True)
48
+
49
+ """
50
+ # pylint: disable=invalid-name
51
+ import os
52
+ import sys
53
+ import time
54
+ from pathlib import Path
55
+ from types import SimpleNamespace
56
+ from typing import Optional
57
+
58
+ import loguru
59
+ import logzero
60
+ import pandas as pd
61
+ import streamlit as st
62
+ from loguru import logger as loggu
63
+ from logzero import logger
64
+ from set_loglevel import set_loglevel
65
+ from streamlit import session_state as state
66
+
67
+ from litbee import __version__, litbee
68
+ from litbee.options import options
69
+
70
+ # from litbee.files2df import files2df
71
+ # from litbee.utils import sb_front_cover, instructions, menu_items
72
+ # from litbee.ezbee_page import ezbee_page
73
+ # from litbee.dzbee_page import dzbee_page
74
+ # from litbee.xbee_page import xbee_page
75
+ from litbee.utils import menu_items
76
+
77
+ # from ezbee import ezbee
78
+
79
+ curr_py = sys.version[:3]
80
+ msg = f"Some packages litbee depends on can only run with Python 3.8, current python is {curr_py}, sorry..."
81
+ assert curr_py == "3.8", msg
82
+
83
+ os.environ["TZ"] = "Asia/Shanghai"
84
+ time.tzset()
85
+ os.environ["LOGLEVEL"] = "10" # uncomment this in dev
86
+ logzero.loglevel(set_loglevel())
87
+
88
+ loggu.remove()
89
+ _ = (
90
+ "<green>{time:YY-MM-DD HH:mm:ss}</green> | "
91
+ "<level>{level: <5}</level> | <level>{message}</level> "
92
+ "<cyan>{name}</cyan>:<cyan>{line}</cyan>"
93
+ )
94
+ loggu.add(
95
+ sys.stderr,
96
+ format=_,
97
+ level=set_loglevel(),
98
+ colorize=True,
99
+ )
100
+
101
+ # from PIL import Image
102
+ # page_icon=Image.open("icon.ico"),
103
+ st.set_page_config(
104
+ page_title=f"litbee v{__version__}",
105
+ # page_icon="🧊",
106
+ page_icon="🐝",
107
+ # layout="wide",
108
+ initial_sidebar_state="auto", # "auto" or "expanded" or "collapsed",
109
+ menu_items=menu_items,
110
+ )
111
+
112
+ # pd.set_option("precision", 2)
113
+ pd.set_option("display.precision", 2)
114
+ pd.options.display.float_format = "{:,.2f}".format
115
+
116
+ _ = dict(
117
+ beetype="ezbee",
118
+ src_filename="",
119
+ tgt_filename="",
120
+ src_fileio=b"",
121
+ tgt_fileio=b"",
122
+ src_file="",
123
+ tgt_file="",
124
+ list1=[""],
125
+ list2=[""],
126
+ df=None,
127
+ df_a=None,
128
+ df_s_a=None,
129
+ )
130
+ if "ns" not in state:
131
+ state.ns = SimpleNamespace(**_)
132
+ state.ns.list = [*_]
133
+
134
+
135
+ def main():
136
+ """Bootstrap."""
137
+ options()
138
+
139
+
140
+ main()
litbee/app.py CHANGED
@@ -58,14 +58,18 @@ from typing import Optional
58
  import loguru
59
  import logzero
60
  import pandas as pd
 
 
 
 
61
  import streamlit as st
62
  from loguru import logger as loggu
63
  from logzero import logger
64
  from set_loglevel import set_loglevel
65
  from streamlit import session_state as state
66
 
67
- from litbee import __version__, litbee
68
- from litbee.options import options
69
 
70
  # from litbee.files2df import files2df
71
  # from litbee.utils import sb_front_cover, instructions, menu_items
@@ -74,15 +78,29 @@ from litbee.options import options
74
  # from litbee.xbee_page import xbee_page
75
  from litbee.utils import menu_items
76
 
 
 
 
 
 
 
 
 
 
 
 
77
  # from ezbee import ezbee
78
 
79
  curr_py = sys.version[:3]
80
- msg = f"Some packages litbee depends on can only run with Python 3.8, current python is {curr_py}, sorry..."
81
  assert curr_py == "3.8", msg
82
 
83
  os.environ["TZ"] = "Asia/Shanghai"
84
  time.tzset()
85
- os.environ["LOGLEVEL"] = "10" # uncomment this in dev
 
 
 
86
  logzero.loglevel(set_loglevel())
87
 
88
  loggu.remove()
@@ -104,7 +122,7 @@ st.set_page_config(
104
  page_title=f"litbee v{__version__}",
105
  # page_icon="🧊",
106
  page_icon="🐝",
107
- # layout="wide",
108
  initial_sidebar_state="auto", # "auto" or "expanded" or "collapsed",
109
  menu_items=menu_items,
110
  )
@@ -115,6 +133,7 @@ pd.options.display.float_format = "{:,.2f}".format
115
 
116
  _ = dict(
117
  beetype="ezbee",
 
118
  src_filename="",
119
  tgt_filename="",
120
  src_fileio=b"",
@@ -126,15 +145,43 @@ _ = dict(
126
  df=None,
127
  df_a=None,
128
  df_s_a=None,
 
129
  )
130
  if "ns" not in state:
131
  state.ns = SimpleNamespace(**_)
132
  state.ns.list = [*_]
133
 
 
 
 
 
 
 
 
134
 
135
  def main():
136
  """Bootstrap."""
137
- options()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
 
140
  main()
 
58
  import loguru
59
  import logzero
60
  import pandas as pd
61
+ import ezbee
62
+ import dzbee
63
+ import debee
64
+
65
  import streamlit as st
66
  from loguru import logger as loggu
67
  from logzero import logger
68
  from set_loglevel import set_loglevel
69
  from streamlit import session_state as state
70
 
71
+ from litbee import __version__
72
+ # from litbee.options import options
73
 
74
  # from litbee.files2df import files2df
75
  # from litbee.utils import sb_front_cover, instructions, menu_items
 
78
  # from litbee.xbee_page import xbee_page
79
  from litbee.utils import menu_items
80
 
81
+ from litbee.multipage import Multipage
82
+
83
+ # from litbee.fetch_upload import fetch_upload
84
+ # from litbee.fetch_paste import fetch_paste
85
+ # from litbee.fetch_urls import fetch_urls
86
+
87
+ from litbee.home import home
88
+ from litbee.settings import settings
89
+ from litbee.info import info
90
+ from litbee.utils import style_css
91
+
92
  # from ezbee import ezbee
93
 
94
  curr_py = sys.version[:3]
95
+ msg = f"Some packages litbee depends on can only run with Python 3.8, current python is **{curr_py}**, sorry..."
96
  assert curr_py == "3.8", msg
97
 
98
  os.environ["TZ"] = "Asia/Shanghai"
99
  time.tzset()
100
+
101
+ # uncomment this in dev oe set/export LOGLEVEL=10
102
+ # os.environ["LOGLEVEL"] = "10"
103
+
104
  logzero.loglevel(set_loglevel())
105
 
106
  loggu.remove()
 
122
  page_title=f"litbee v{__version__}",
123
  # page_icon="🧊",
124
  page_icon="🐝",
125
+ layout="wide",
126
  initial_sidebar_state="auto", # "auto" or "expanded" or "collapsed",
127
  menu_items=menu_items,
128
  )
 
133
 
134
  _ = dict(
135
  beetype="ezbee",
136
+ sourcetype="upload",
137
  src_filename="",
138
  tgt_filename="",
139
  src_fileio=b"",
 
145
  df=None,
146
  df_a=None,
147
  df_s_a=None,
148
+ count=1,
149
  )
150
  if "ns" not in state:
151
  state.ns = SimpleNamespace(**_)
152
  state.ns.list = [*_]
153
 
154
+ logger.info(
155
+ "versions ezbee dzbee debee: %s, %s, %s",
156
+ ezbee.__version__,
157
+ dzbee.__version__,
158
+ debee.__version__,
159
+ )
160
+
161
 
162
  def main():
163
  """Bootstrap."""
164
+ # options()
165
+
166
+ st.markdown(f"<style>{style_css}</style>", unsafe_allow_html=True)
167
+
168
+ app = Multipage()
169
+
170
+ # app.add_page("Home", "house", ask.app)
171
+ # app.add_page("Settings", "gear", settings.app)
172
+ # app.add_page("Info", "info", info.app)
173
+
174
+ # app.add_page("Home", "house", fetch_upload)
175
+ app.add_page("Home", "house", home)
176
+ app.add_page("Settings", "gear", settings)
177
+ app.add_page("Info", "info", info)
178
+
179
+ # The main app
180
+ app.run()
181
+
182
+ st.markdown(f"""<div class="text"> run: {state.ns.count}</div>""", unsafe_allow_html=True)
183
+ loggu.debug(f" run: {state.ns.count}")
184
+ state.ns.count += 1
185
 
186
 
187
  main()
litbee/home.py ADDED
@@ -0,0 +1,305 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Fetch content from upload.
2
+
3
+ org ezbee_page.py.
4
+ """
5
+ # pylint: disable=invalid-name
6
+ from functools import partial
7
+ import inspect
8
+ from itertools import zip_longest
9
+ from time import perf_counter
10
+
11
+ import logzero
12
+ import numpy as np
13
+ import pandas as pd
14
+ import streamlit as st
15
+ from dzbee import dzbee # noqa
16
+ from ezbee import ezbee # noqa
17
+ from debee import debee # noqa
18
+
19
+ # from ezbee.gen_pairs import gen_pairs # aset2pairs?
20
+ from aset2pairs import aset2pairs
21
+ from fastlid import fastlid
22
+ from icecream import ic
23
+ from loguru import logger as loggu
24
+ from logzero import logger
25
+ from set_loglevel import set_loglevel
26
+ from st_aggrid import AgGrid, GridUpdateMode, GridOptionsBuilder
27
+ # from st_aggrid.grid_options_builder import GridOptionsBuilder
28
+ from streamlit import session_state as state
29
+
30
+ # logzero.loglevel(set_loglevel())
31
+
32
+
33
+ def home(): # noqa
34
+ """Fetch content from upload."""
35
+ # st.write(state.ns.beetype)
36
+
37
+ if state.ns.sourcetype not in ["upload"]:
38
+ st.write("Coming soooooooon...")
39
+ return None
40
+
41
+ if state.ns.beetype not in ["ezbee", "dzbee", "debee"]:
42
+ st.write("Coming soon...")
43
+ return None
44
+
45
+ # src_fileio tgt_fileio
46
+ with st.form(key='upload_in_form'):
47
+ _ = st.expander(f"{state.ns.beetype}: Pick two files", expanded=True)
48
+ with _:
49
+ col1, col2 = st.columns(2)
50
+ with col1:
51
+ src_fileio = st.file_uploader(
52
+ "Choose source file (utf8 txt)",
53
+ type=[
54
+ "txt",
55
+ ],
56
+ key="src_text",
57
+ # accept_multiple_files=True,
58
+ # accept_multiple_files=False,
59
+ )
60
+
61
+ with col2:
62
+ tgt_fileio = st.file_uploader(
63
+ "Choose target file (utf8 txt)",
64
+ type=[
65
+ "txt",
66
+ ],
67
+ key="tgt_text",
68
+ # accept_multiple_files=True,
69
+ )
70
+ submitted = st.form_submit_button('Submit')
71
+
72
+ # logger.debug(" len(src_fileio): %s", len(src_fileio))
73
+ # logger.debug(" len(tgt_fileio): %s", len(tgt_fileio))
74
+
75
+ filename1 = ""
76
+ if src_fileio:
77
+ logger.debug(" type(src_fileio): %s", type(src_fileio))
78
+
79
+ # for st.file_uploade accept_multiple_files=True
80
+ if isinstance(src_fileio, list):
81
+ logger.debug(" len(src_fileio): %s", len(src_fileio))
82
+ filenames = []
83
+ try:
84
+ filenames = [elm.name for elm in src_fileio] # type: ignore
85
+ except Exception as exc:
86
+ logger.error(exc)
87
+ logger.debug("src_fileio names: *%s*", filenames)
88
+
89
+ # state.ns.src_fileio = src_fileio
90
+ state.ns.src_file = src_fileio[-1].getvalue().decode()
91
+ state.ns.src_filename = src_fileio[-1].name
92
+ else:
93
+ logger.debug("src_fileio.name: [%s]", src_fileio.name)
94
+ filenames = [src_fileio.name]
95
+ logger.debug("src_fileio names: %s", filenames)
96
+
97
+ # state.ns.src_fileio = src_fileio
98
+ state.ns.src_file = src_fileio.getvalue().decode()
99
+ state.ns.src_filename = src_fileio.name
100
+ filename1 = state.ns.src_filename
101
+
102
+ filename2 = ""
103
+ if tgt_fileio:
104
+ if isinstance(tgt_fileio, list):
105
+ logger.warning("not set to handle multiple files")
106
+ logger.warning("set accept_multiple_files=False in the meantime")
107
+ else:
108
+ state.ns.tgt_file = tgt_fileio.getvalue().decode()
109
+ state.ns.tgt_filename = tgt_fileio.name
110
+ filename2 = tgt_fileio.name
111
+
112
+ # proceed when Submit is clicked
113
+ msg1 = ""
114
+ if filename1:
115
+ msg1 += f" file1: {filename1}"
116
+ msg2 = ""
117
+ if filename2:
118
+ msg2 += f" file2: {filename2}"
119
+ glue = ""
120
+ if filename1 and filename2:
121
+ glue = ", "
122
+
123
+ st.write(f" Submitted upload: {msg1}{glue}{msg2}")
124
+ if not submitted:
125
+ return None
126
+
127
+ if not (filename1 or filename2):
128
+ st.write("| no file uploaded")
129
+ return None
130
+ elif not filename1:
131
+ st.write("| file1 not ready")
132
+ return None
133
+ elif not filename2:
134
+ st.write("| file2 not ready")
135
+ return None
136
+
137
+ try:
138
+ _ = state.ns.src_file.splitlines()
139
+ list1 = [elm.strip() for elm in _ if elm.strip()]
140
+ _ = state.ns.tgt_file.splitlines()
141
+ list2 = [elm.strip() for elm in _ if elm.strip()]
142
+ except Exception as exc:
143
+ logger.error(exc)
144
+ list1 = [""]
145
+ list2 = [""]
146
+ state.ns.list1 = list1[:]
147
+ state.ns.list2 = list2[:]
148
+
149
+ df = pd.DataFrame(zip_longest(list1, list2, fillvalue=""))
150
+ try:
151
+ df.columns = ["text1", "text2"]
152
+ except Exception as exc:
153
+ logger.debug("df: \n%s", df)
154
+ logger.error("%s", exc)
155
+
156
+ state.ns.df = df
157
+ logger.debug("df: %s", df)
158
+
159
+ # st.table(df) # looks alright
160
+
161
+ # stlyed pd dataframe?
162
+ # bigger, no pagination
163
+ # st.markdown(df.to_html(), unsafe_allow_html=True)
164
+
165
+ # ag_grid smallish, editable, probably slower
166
+
167
+ # if "df" not in globals() or "df" not in locals():
168
+ if "df" not in locals():
169
+ logger.debug(" df not defined, return")
170
+
171
+ if df.empty:
172
+ logger.debug(" df.empty, return")
173
+ return None
174
+
175
+ # df = pd.DataFrame([["", "", ""]], columns=["text1", "text2", "llh"])
176
+
177
+ df_exp = st.expander("to be aligned", expanded=False)
178
+ with df_exp:
179
+ st.write(df) # too small
180
+
181
+ _ = """
182
+ ag_exp = st.expander("done aligned") # , expanded=False
183
+ with ag_exp:
184
+ agdf = AgGrid(
185
+ df,
186
+ # fit_columns_on_grid_load=True,
187
+ editable=True,
188
+ gridOptions=gridOptions,
189
+ key="ag_exp",
190
+ )
191
+ # """
192
+
193
+ list1 = [elm.strip() for elm in df.text1 if elm.strip()]
194
+ list2 = [elm.strip() for elm in df.text2 if elm.strip()]
195
+ logger.debug("list1[:3]: %s", list1[:3])
196
+ logger.debug("list2[:3]: %s", list2[:3])
197
+
198
+ logger.info("Processing data... %s", state.ns.beetype)
199
+ # if state.ns.beetype in ["ezbee", "dzbee"]:
200
+ if state.ns.beetype in ["ezbee", "dzbee", "debee"]:
201
+ # bug in json_de2zh.gen_cmat for dzbee and
202
+ # fast_scores.gen_cmat for ezbee
203
+ # temp fix:
204
+ if state.ns.beetype in ["dzbee"]:
205
+ fastlid.set_languages = ["de", "zh"]
206
+ elif state.ns.beetype in ["ezbee"]:
207
+ fastlid.set_languages = ["en", "zh"]
208
+ elif state.ns.beetype in ["debee"]:
209
+ fastlid.set_languages = ["de", "en"]
210
+ else:
211
+ fastlid.set_languages = None
212
+
213
+ fn = globals()[state.ns.beetype]
214
+ # logger.debug("type(fn): %s", fn)
215
+ # logger.debug("dir(fn): %s", dir(fn))
216
+ # logger.debug("fn.__doc__: %s", fn.__doc__)
217
+ logger.debug("fn.__name__: %s", fn.__name__)
218
+
219
+ from inspect import getabsfile
220
+ logger.debug("getabsfile(fn): %s", getabsfile(fn))
221
+
222
+ with st.spinner(" diggin..."):
223
+ then = perf_counter()
224
+ try:
225
+ # aset = ezbee/dzbee/debee
226
+ aset = globals()[state.ns.beetype](
227
+ list1,
228
+ list2,
229
+ # eps=eps,
230
+ # min_samples=min_samples,
231
+ )
232
+ except Exception as e:
233
+ # logger.error("aset = ezbee(...) exc: %s", e)
234
+ logger.exception("aset = globals()[state.ns.beetype](...) exc: %s", e)
235
+ aset = ""
236
+ # st.write(e)
237
+ st.write("Collecting inputs...")
238
+ return None
239
+ st.success(f"Done, took {perf_counter() - then:.2f} s")
240
+
241
+ else:
242
+ try:
243
+ filename = inspect.currentframe().f_code.co_filename
244
+ except Exception as e:
245
+ logger.error(e)
246
+ filename = ""
247
+ try:
248
+ lineno = inspect.currentframe().f_lineno
249
+ except Exception as e:
250
+ logger.error(e)
251
+ lineno = ""
252
+ st.write(f"{state.ns.beetype} coming soon...{filename}:{lineno}")
253
+ return None
254
+
255
+ # fastlid changed logger.level to 20
256
+ # turn back to loglevel
257
+ logzero.loglevel(set_loglevel())
258
+ if aset:
259
+ logger.debug("aset: %s...%s", aset[:3], aset[-3:])
260
+ # logger.debug("aset[:10]: %s", aset[:10])
261
+
262
+ # st.write(aset)
263
+
264
+ # aligned_pairs = gen_pairs(list1, list2, aset)
265
+ aligned_pairs = aset2pairs(list1, list2, aset)
266
+ if aligned_pairs:
267
+ logger.debug("%s...%s", aligned_pairs[:1], aligned_pairs[-1:])
268
+ # logger.debug("aligned_pairs[:20]: \n%s", aligned_pairs[:20])
269
+
270
+ df_a = pd.DataFrame(aligned_pairs, columns=["text1", "text2", "llh"], dtype="object")
271
+
272
+ # if set_loglevel() <= 10:
273
+ _ = st.expander("done aligned")
274
+ with _:
275
+ st.table(df_a.astype(str))
276
+
277
+ # insert seq no
278
+ df_a.insert(0, "sn", range(len(df_a)))
279
+
280
+ gb = GridOptionsBuilder.from_dataframe(df_a)
281
+ gb.configure_pagination(paginationAutoPageSize=True)
282
+ options = {
283
+ "resizable": True,
284
+ "autoHeight": True,
285
+ "wrapText": True,
286
+ "editable": True,
287
+ }
288
+ gb.configure_default_column(**options)
289
+ gridOptions = gb.build()
290
+
291
+ # st.write("editable aligned (double-click a cell to edit, drag column header to adjust widths)")
292
+ _ = "editable aligned (double-click a cell to edit, drag column header to adjust widths)"
293
+ with st.expander(_, expanded=False):
294
+ ag_df = AgGrid(
295
+ # df,
296
+ df_a,
297
+ gridOptions=gridOptions,
298
+ key="outside",
299
+ reload_data=True,
300
+ editable=True,
301
+ # width="100%", # width parameter is deprecated
302
+ height=750,
303
+ # fit_columns_on_grid_load=True,
304
+ update_mode=GridUpdateMode.MODEL_CHANGED
305
+ )