Skip to content

Commit

Permalink
[feat] Add board for Figures (#2937)
Browse files Browse the repository at this point in the history
* [feat] Add board for `Figures`

* [feat] Add "Figures" tab in "run" board

* [feat] Revamp aim standard boards

---------

Co-authored-by: Karo <44981312+KaroMourad@users.noreply.github.com>
  • Loading branch information
arsengit and KaroMourad committed Aug 4, 2023
1 parent edb3a3a commit d70694b
Show file tree
Hide file tree
Showing 13 changed files with 311 additions and 208 deletions.
101 changes: 50 additions & 51 deletions pkgs/aimstack/asp/boards/audios.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
from asp import AudioSequence
import math

container_hash = None
if 'container_hash' in session_state:
container_hash = session_state['container_hash']
c_hash = session_state.get('container_hash')

if container_hash is None:
if c_hash is None:
ui.header("Audios")
form = ui.form("Search")
query = form.text_input(value="")

audios = AudioSequence.filter(
f'c.hash=="{container_hash}"' if container_hash else query)
audios = AudioSequence.filter(f'c.hash=="{c_hash}"' if c_hash else query)


def flatten(dictionary, parent_key="", separator="."):
Expand All @@ -26,54 +23,56 @@ def flatten(dictionary, parent_key="", separator="."):


@memoize
def get_table_data(data=[], page_size=10, page_num=1):
def merge_dicts(dict1, dict2):
merged_dict = dict1.copy()
merged_dict.update(dict2)
return merged_dict


@memoize
def get_table_data(data=[], keys=[], page_size=10, page_num=1):
table_data = {}
exclude_keys = [
"type",
"container_type",
"sequence_type",
"sequence_full_type",
"hash",
"axis_names",
"item_type",
"container_full_type",
"values",
]

page_data = data[(page_num - 1) * page_size: page_num * page_size]

for i, page_item in enumerate(page_data):
items = flatten(page_item).items()
for key, value in items:
if key in exclude_keys:
continue
else:
if key == "blobs.data":
key = "data"
value = ((page_num - 1) * page_size) + i
if key in table_data:
table_data[key].append(f"{value}")
else:
table_data[key] = [f"{value}"]
page_data = data[(page_num - 1) * page_size:page_num * page_size]

def append(key, value):
if key in table_data:
table_data[key].append(f'{value}')
else:
table_data[key] = [f'{value}']

for key in keys:
for i, page_item in enumerate(page_data):
flattened_item = flatten(page_item)
item = merge_dicts(page_item, flattened_item)
if key == 'data':
value = ((page_num - 1) * page_size) + i
append(key, value)
elif key in item:
value = item[key]
append(key, value)

return table_data


if len(audios) == 0:
text = ui.text("No audios found")
else:
if audios:
row1, row2 = ui.rows(2)

with row1:
items_per_page = ui.select(
"Items per page", options=("5", "10", "50", "100"), index=1
)
total_pages = math.ceil((len(audios) / int(items_per_page)))
page_numbers = [str(i) for i in range(1, total_pages + 1)]
page_num = ui.select('Page', options=page_numbers, index=0)
row2.table(
get_table_data(audios, int(items_per_page), int(page_num)),
{
"container.hash": lambda val: ui.board_link("run.py", val, state={"hash": val}),
"data": lambda val: ui.audios([audios[int(val)]]),
},
)
items_per_page = row1.select('Items per page', ('5', '10', '50', '100'))
total_pages = math.ceil((len(audios) / int(items_per_page)))
page_numbers = [str(i) for i in range(1, total_pages + 1)]
page_num = row1.select('Page', page_numbers, index=0)

table_data = get_table_data(
data=audios,
keys=['name', 'container.hash', 'context',
'format', 'range', 'data', 'step', 'index'],
page_size=int(items_per_page),
page_num=int(page_num)
)

row2.table(table_data, {
'container.hash': lambda val: ui.board_link('run.py', val, state={'container_hash': val}),
'data': lambda val: ui.audios([audios[int(val)]])
})
else:
text = ui.text('No audios found')
77 changes: 77 additions & 0 deletions pkgs/aimstack/asp/boards/figures.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
from asp import FigureSequence
import math

c_hash = session_state.get('container_hash')

if c_hash is None:
ui.header("Figures")
form = ui.form("Search")
query = form.text_input(value="")

figures = FigureSequence.filter(f'c.hash=="{c_hash}"' if c_hash else query)


def flatten(dictionary, parent_key='', separator='.'):
items = []
for key, value in dictionary.items():
new_key = parent_key + separator + key if parent_key else key
if isinstance(value, dict):
items.extend(flatten(value, new_key, separator=separator).items())
else:
items.append((new_key, value))
return dict(items)


@memoize
def merge_dicts(dict1, dict2):
merged_dict = dict1.copy()
merged_dict.update(dict2)
return merged_dict


@memoize
def get_table_data(data=[], keys=[], page_size=10, page_num=1):
table_data = {}
page_data = data[(page_num - 1) * page_size:page_num * page_size]

def append(key, value):
if key in table_data:
table_data[key].append(f'{value}')
else:
table_data[key] = [f'{value}']

for key in keys:
for i, page_item in enumerate(page_data):
flattened_item = flatten(page_item)
item = merge_dicts(page_item, flattened_item)
if key == 'data':
value = ((page_num - 1) * page_size) + i
append(key, value)
elif key in item:
value = item[key]
append(key, value)

return table_data


if figures:
row1, row2 = ui.rows(2)

items_per_page = row1.select('Items per page', ('5', '10', '50', '100'))
total_pages = math.ceil((len(figures) / int(items_per_page)))
page_numbers = [str(i) for i in range(1, total_pages + 1)]
page_num = row1.select('Page', page_numbers, index=0)

table_data = get_table_data(
data=figures,
keys=['name', 'container.hash', 'context',
'format', 'range', 'data', 'step'],
page_size=int(items_per_page),
page_num=int(page_num)
)
row2.table(table_data, {
'container.hash': lambda val: ui.board_link('run.py', val, state={'container_hash': val}),
'data': lambda val: ui.figures([figures[int(val)]]),
})
else:
ui.text('No figures found')
79 changes: 46 additions & 33 deletions pkgs/aimstack/asp/boards/images.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
from asp import ImageSequence
import math

container_hash = None
if 'container_hash' in session_state:
container_hash = session_state['container_hash']
c_hash = session_state.get('container_hash')

if container_hash is None:
if c_hash is None:
ui.header("Images")
form = ui.form("Search")
query = form.text_input(value="")


images = ImageSequence.filter(
f'c.hash=="{container_hash}"' if container_hash else query)
images = ImageSequence.filter(f'c.hash=="{c_hash}"' if c_hash else query)


def flatten(dictionary, parent_key='', separator='.'):
Expand All @@ -26,41 +24,56 @@ def flatten(dictionary, parent_key='', separator='.'):


@memoize
def get_table_data(data=[], page_size=10, page_num=1):
table_data = {}
exclude_keys = ['type', 'container_type', 'sequence_type', 'sequence_full_type', 'hash', 'axis_names', 'axis.epoch',
'item_type', 'container_full_type', 'values']
def merge_dicts(dict1, dict2):
merged_dict = dict1.copy()
merged_dict.update(dict2)
return merged_dict


@memoize
def get_table_data(data=[], keys=[], page_size=10, page_num=1):
table_data = {}
page_data = data[(page_num - 1) * page_size:page_num * page_size]

for i, page_item in enumerate(page_data):
items = flatten(page_item).items()
for key, value in items:
if key in exclude_keys:
continue
else:
if key == 'blobs.data':
key = 'data'
value = ((page_num - 1) * page_size) + i
if key in table_data:
table_data[key].append(f'{value}')
else:
table_data[key] = [f'{value}']
def append(key, value):
if key in table_data:
table_data[key].append(f'{value}')
else:
table_data[key] = [f'{value}']

for key in keys:
for i, page_item in enumerate(page_data):
flattened_item = flatten(page_item)
item = merge_dicts(page_item, flattened_item)
if key == 'data':
value = ((page_num - 1) * page_size) + i
append(key, value)
elif key in item:
value = item[key]
append(key, value)

return table_data


if len(images) == 0:
text = ui.text('No images found')
else:
if images:
row1, row2 = ui.rows(2)

with row1:
items_per_page = ui.select(
'Items per page', options=('5', '10', '50', '100'), index=1)
page_num = ui.number_input(
'Page', value=1, min=1, max=int(len(images) / int(items_per_page)) + 1)
items_per_page = row1.select('Items per page', ('5', '10', '50', '100'))
total_pages = math.ceil((len(images) / int(items_per_page)))
page_numbers = [str(i) for i in range(1, total_pages + 1)]
page_num = row1.select('Page', page_numbers, index=0)

row2.table(get_table_data(images, int(items_per_page), page_num), {
'container.hash': lambda val: ui.board_link('run.py', val, state={'hash': val}),
table_data = get_table_data(
data=images,
keys=['name', 'container.hash', 'context',
'format', 'range', 'data', 'step', 'index'],
page_size=int(items_per_page),
page_num=int(page_num)
)

row2.table(table_data, {
'container.hash': lambda val: ui.board_link('run.py', val, state={'container_hash': val}),
'data': lambda val: ui.images([images[int(val)]])
})
else:
text = ui.text('No images found')

0 comments on commit d70694b

Please sign in to comment.