<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def ctype_to_dtype(cl_type, mot_float_type='float'):
 """Get the numpy dtype of the given cl_type string. Args: cl_type (str):
 the CL data type to match, for example 'float' or 'float4'. mot_float_type (str):
 the C name of the ``mot_float_type``. The dtype will be looked up recursively. Returns: dtype: the numpy datatype """

    if is_vector_ctype(cl_type):
        raw_type, vector_length = split_vector_ctype(cl_type)

        if raw_type == 'mot_float_type':
            if is_vector_ctype(mot_float_type):
                raw_type, _ = split_vector_ctype(mot_float_type)
            else:
                raw_type = mot_float_type

        vector_type = raw_type + str(vector_length)
        return getattr(cl_array.vec, vector_type)
    else:
        if cl_type == 'mot_float_type':
            cl_type = mot_float_type

        data_types = [
            ('char', np.int8),
            ('uchar', np.uint8),
            ('short', np.int16),
            ('ushort', np.uint16),
            ('int', np.int32),
            ('uint', np.uint32),
            ('long', np.int64),
            ('ulong', np.uint64),
            ('float', np.float32),
            ('double', np.float64),
        ]
        for ctype, dtype in data_types:
            if ctype == cl_type:
                return dtype