<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def iuwt_decomposition(in1, scale_count, scale_adjust=0, mode='ser', core_count=2, store_smoothed=False, store_on_gpu=False):
 """ This function serves as a handler for the different implementations of the IUWT decomposition. It allows the different methods to be used almost interchangeably. INPUTS: in1 (no default):
 Array on which the decomposition is to be performed. scale_count (no default):
 Maximum scale to be considered. scale_adjust (default=0):
 Adjustment to scale value if first scales are of no interest. mode (default='ser'):
 Implementation of the IUWT to be used - 'ser', 'mp' or 'gpu'. core_count (default=1):
 Additional option for multiprocessing - specifies core count. store_smoothed (default=False):
 Boolean specifier for whether the smoothed image is stored or not. store_on_gpu (default=False):
 Boolean specifier for whether the decomposition is stored on the gpu or not. OUTPUTS: Returns the decomposition with the additional smoothed coefficients if specified. """


    if mode=='ser':
        return ser_iuwt_decomposition(in1, scale_count, scale_adjust, store_smoothed)
    elif mode=='mp':
        return mp_iuwt_decomposition(in1, scale_count, scale_adjust, store_smoothed, core_count)
    elif mode=='gpu':
        return gpu_iuwt_decomposition(in1, scale_count, scale_adjust, store_smoothed, store_on_gpu)