import sys
import typing


class ProgressReport:
    curr_step = None
    ''' '''

    running = None
    ''' '''

    start_time = None
    ''' '''

    steps = None
    ''' '''

    wm = None
    ''' '''

    def enter_substeps(self, nbr, msg):
        ''' 

        '''
        pass

    def finalize(self):
        ''' 

        '''
        pass

    def initialize(self, wm):
        ''' 

        '''
        pass

    def leave_substeps(self, msg):
        ''' 

        '''
        pass

    def start(self):
        ''' 

        '''
        pass

    def step(self, msg, nbr):
        ''' 

        '''
        pass

    def update(self, msg):
        ''' 

        '''
        pass


class ProgressReportSubstep:
    final_msg = None
    ''' '''

    level = None
    ''' '''

    msg = None
    ''' '''

    nbr = None
    ''' '''

    progress = None
    ''' '''

    def enter_substeps(self, nbr, msg):
        ''' 

        '''
        pass

    def leave_substeps(self, msg):
        ''' 

        '''
        pass

    def step(self, msg, nbr):
        ''' 

        '''
        pass

import sys
import typing


class ProgressReport:
    curr_step = None
    ''' '''

    running = None
    ''' '''

    start_time = None
    ''' '''

    steps = None
    ''' '''

    wm = None
    ''' '''

    def enter_substeps(self, nbr, msg):
        ''' 

        '''
        pass

    def finalize(self):
        ''' 

        '''
        pass

    def initialize(self, wm):
        ''' 

        '''
        pass

    def leave_substeps(self, msg):
        ''' 

        '''
        pass

    def start(self):
        ''' 

        '''
        pass

    def step(self, msg, nbr):
        ''' 

        '''
        pass

    def update(self, msg):
        ''' 

        '''
        pass


class ProgressReportSubstep:
    final_msg = None
    ''' '''

    level = None
    ''' '''

    msg = None
    ''' '''

    nbr = None
    ''' '''

    progress = None
    ''' '''

    def enter_substeps(self, nbr, msg):
        ''' 

        '''
        pass

    def leave_substeps(self, msg):
        ''' 

        '''
        pass

    def step(self, msg, nbr):
        ''' 

        '''
        pass
