ssscoring.ssscoremultiple
Experimental
Process a group of jumps uploaded from a file uploader.
1# See: https://github.com/pr3d4t0r/SSScoring/blob/master/LICENSE.txt 2 3""" 4## Experimental 5 6Process a group of jumps uploaded from a file uploader. 7""" 8 9from ssscoring.appcommon import displayJumpDataIn 10from ssscoring.appcommon import displayTrackOnMap 11from ssscoring.appcommon import initFileUploaderState 12from ssscoring.appcommon import interpretJumpResult 13from ssscoring.appcommon import isStreamlitHostedApp 14from ssscoring.appcommon import plotJumpResult 15from ssscoring.appcommon import setSideBarAndMain 16from ssscoring.calc import aggregateResults 17from ssscoring.calc import processAllJumpFiles 18from ssscoring.calc import totalResultsFrom 19from ssscoring.datatypes import JumpStatus 20from ssscoring.mapview import speedJumpTrajectory 21from ssscoring.notebook import SPEED_COLORS 22from ssscoring.notebook import graphJumpResult 23from ssscoring.notebook import initializePlot 24 25import pandas as pd 26import streamlit as st 27 28 29# +++ implementation +++ 30 31def _selectDZState(*args, **kwargs): 32 if st.session_state.elevation: 33 st.session_state.uploaderKey += 1 34 st.session_state.trackFiles = None 35 36 37def _styleShowMaxIn(scores: pd.Series) -> pd.DataFrame: 38 return [ 39 'background-color: mediumseagreen' if v == scores.max() else \ 40 '' for v in scores ] 41 42 43def _styleShowMinMaxIn(scores: pd.Series) -> pd.DataFrame: 44 return [ 45 'background-color: green' if v == scores.max() else \ 46 'background-color: orangered' if v == scores.min() else \ 47 '' for v in scores ] 48 49 50def main(): 51 if not isStreamlitHostedApp(): 52 st.set_page_config(layout = 'wide') 53 initFileUploaderState('trackFiles') 54 setSideBarAndMain('🔢', False, _selectDZState) 55 56 col0, col1 = st.columns([0.5, 0.5, ]) 57 if st.session_state.trackFiles: 58 jumpResults = processAllJumpFiles(st.session_state.trackFiles, altitudeDZMeters=st.session_state.elevation) 59 allJumpsPlot = initializePlot('All jumps', backgroundColorName='#2c2c2c') 60 mixColor = 0 61 jumpResultsSubset = dict() 62 with col1: 63 st.write('**Jump results detail and charts are displayed most recent first unless _Reverse_ order is selected**') 64 st.session_state.reverseDisplay = st.checkbox('Reverse', value=False, help='Display jump results in ascending order by track file tag name.') 65 for tag in sorted(list(jumpResults.keys()), reverse=(not st.session_state.reverseDisplay)): 66 jumpResult = jumpResults[tag] 67 mixColor = (mixColor+1)%len(SPEED_COLORS) 68 with col1: 69 jumpStatusInfo,\ 70 scoringInfo,\ 71 badJumpLegend,\ 72 jumpStatus = interpretJumpResult(tag, jumpResult, st.session_state.processBadJump) 73 if jumpStatus != JumpStatus.OK: 74 st.toast('#### %s - %s' % (tag, str(jumpStatus)), icon='⚠️') 75 if (st.session_state.processBadJump and jumpStatus != JumpStatus.OK) or jumpStatus == JumpStatus.OK: 76 jumpResultsSubset[tag] = jumpResult 77 st.html('<hr><h3>'+jumpStatusInfo+scoringInfo+(badJumpLegend if badJumpLegend else '')+'</h3>') 78 if (st.session_state.processBadJump and jumpStatus != JumpStatus.OK) or jumpStatus == JumpStatus.OK: 79 displayJumpDataIn(jumpResult.table) 80 plotJumpResult(tag, jumpResult) 81 graphJumpResult( 82 allJumpsPlot, 83 jumpResult, 84 lineColor=SPEED_COLORS[mixColor], 85 legend='%s = %.2f' % (tag, jumpResult.score), 86 showIt=False 87 ) 88 displayTrackOnMap(speedJumpTrajectory(jumpResult)) 89 with col0: 90 st.html('<h2>Jumps in this set</h2>') 91 if (st.session_state.processBadJump and jumpStatus != JumpStatus.OK) or jumpStatus == JumpStatus.OK: 92 aggregate = aggregateResults(jumpResultsSubset) 93 displayAggregate = aggregate.style.apply(_styleShowMinMaxIn, subset=[ 'score', ]).apply(_styleShowMaxIn, subset=[ 'maxSpeed', ]).format(precision=2) 94 st.dataframe(displayAggregate) 95 st.html('<h2>Summary</h2>') 96 st.dataframe(totalResultsFrom(aggregate), hide_index = True) 97 st.bokeh_chart(allJumpsPlot, use_container_width=True) 98 99 100if '__main__' == __name__: 101 main()
def
main():
51def main(): 52 if not isStreamlitHostedApp(): 53 st.set_page_config(layout = 'wide') 54 initFileUploaderState('trackFiles') 55 setSideBarAndMain('🔢', False, _selectDZState) 56 57 col0, col1 = st.columns([0.5, 0.5, ]) 58 if st.session_state.trackFiles: 59 jumpResults = processAllJumpFiles(st.session_state.trackFiles, altitudeDZMeters=st.session_state.elevation) 60 allJumpsPlot = initializePlot('All jumps', backgroundColorName='#2c2c2c') 61 mixColor = 0 62 jumpResultsSubset = dict() 63 with col1: 64 st.write('**Jump results detail and charts are displayed most recent first unless _Reverse_ order is selected**') 65 st.session_state.reverseDisplay = st.checkbox('Reverse', value=False, help='Display jump results in ascending order by track file tag name.') 66 for tag in sorted(list(jumpResults.keys()), reverse=(not st.session_state.reverseDisplay)): 67 jumpResult = jumpResults[tag] 68 mixColor = (mixColor+1)%len(SPEED_COLORS) 69 with col1: 70 jumpStatusInfo,\ 71 scoringInfo,\ 72 badJumpLegend,\ 73 jumpStatus = interpretJumpResult(tag, jumpResult, st.session_state.processBadJump) 74 if jumpStatus != JumpStatus.OK: 75 st.toast('#### %s - %s' % (tag, str(jumpStatus)), icon='⚠️') 76 if (st.session_state.processBadJump and jumpStatus != JumpStatus.OK) or jumpStatus == JumpStatus.OK: 77 jumpResultsSubset[tag] = jumpResult 78 st.html('<hr><h3>'+jumpStatusInfo+scoringInfo+(badJumpLegend if badJumpLegend else '')+'</h3>') 79 if (st.session_state.processBadJump and jumpStatus != JumpStatus.OK) or jumpStatus == JumpStatus.OK: 80 displayJumpDataIn(jumpResult.table) 81 plotJumpResult(tag, jumpResult) 82 graphJumpResult( 83 allJumpsPlot, 84 jumpResult, 85 lineColor=SPEED_COLORS[mixColor], 86 legend='%s = %.2f' % (tag, jumpResult.score), 87 showIt=False 88 ) 89 displayTrackOnMap(speedJumpTrajectory(jumpResult)) 90 with col0: 91 st.html('<h2>Jumps in this set</h2>') 92 if (st.session_state.processBadJump and jumpStatus != JumpStatus.OK) or jumpStatus == JumpStatus.OK: 93 aggregate = aggregateResults(jumpResultsSubset) 94 displayAggregate = aggregate.style.apply(_styleShowMinMaxIn, subset=[ 'score', ]).apply(_styleShowMaxIn, subset=[ 'maxSpeed', ]).format(precision=2) 95 st.dataframe(displayAggregate) 96 st.html('<h2>Summary</h2>') 97 st.dataframe(totalResultsFrom(aggregate), hide_index = True) 98 st.bokeh_chart(allJumpsPlot, use_container_width=True)