<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_metric_type(measure, aggregation):
 """Get the corresponding metric type for the given stats type. :type measure: (:class: '~opencensus.stats.measure.BaseMeasure') :param measure: the measure for which to find a metric type :type aggregation: (:class: '~opencensus.stats.aggregation.BaseAggregation') :param aggregation: the aggregation for which to find a metric type """

    if aggregation.aggregation_type == aggregation_module.Type.NONE:
        raise ValueError("aggregation type must not be NONE")
    assert isinstance(aggregation,
                      AGGREGATION_TYPE_MAP[aggregation.aggregation_type])

    if aggregation.aggregation_type == aggregation_module.Type.SUM:
        if isinstance(measure, measure_module.MeasureInt):
            return metric_descriptor.MetricDescriptorType.CUMULATIVE_INT64
        elif isinstance(measure, measure_module.MeasureFloat):
            return metric_descriptor.MetricDescriptorType.CUMULATIVE_DOUBLE
        else:
            raise ValueError
    elif aggregation.aggregation_type == aggregation_module.Type.COUNT:
        return metric_descriptor.MetricDescriptorType.CUMULATIVE_INT64
    elif aggregation.aggregation_type == aggregation_module.Type.DISTRIBUTION:
        return metric_descriptor.MetricDescriptorType.CUMULATIVE_DISTRIBUTION
    elif aggregation.aggregation_type == aggregation_module.Type.LASTVALUE:
        if isinstance(measure, measure_module.MeasureInt):
            return metric_descriptor.MetricDescriptorType.GAUGE_INT64
        elif isinstance(measure, measure_module.MeasureFloat):
            return metric_descriptor.MetricDescriptorType.GAUGE_DOUBLE
        else:
            raise ValueError
    else:
        raise AssertionError