def test_init(self):
        """Test initialize qt4 parameter factory."""

        boolean_parameter = BooleanParameter('1231231')
        boolean_parameter.name = 'Boolean'
        boolean_parameter.help_text = 'A boolean parameter'
        boolean_parameter.description = 'A test _description'
        boolean_parameter.is_required = True
        boolean_parameter.value = True

        float_parameter = FloatParameter()
        float_parameter.name = 'Float Parameter'
        float_parameter.is_required = True
        float_parameter.precision = 3
        float_parameter.minimum_allowed_value = 1.0
        float_parameter.maximum_allowed_value = 2.0
        float_parameter.help_text = 'Short help.'
        float_parameter.description = 'Long description for parameter.'
        float_parameter.unit = 'metres'
        float_parameter.value = 1.1

        parameters = [boolean_parameter, float_parameter]

        qt4_parameter_factory = Qt4ParameterFactory()
        widgets = []
        widget_classes = []

        for parameter in parameters:
            widget = qt4_parameter_factory.get_widget(parameter)
            widgets.append(widget)
            widget_classes.append(widget.__class__)

        expected_classes = [BooleanParameterWidget, FloatParameterWidget]
        message = 'Expected %s got %s' % (expected_classes, widget_classes)
        self.assertListEqual(widget_classes, expected_classes, message)
    def test_init(self):
        """Test initialize qt4 parameter factory."""

        boolean_parameter = BooleanParameter('1231231')
        boolean_parameter.name = 'Boolean'
        boolean_parameter.help_text = 'A boolean parameter'
        boolean_parameter.description = 'A test _description'
        boolean_parameter.is_required = True
        boolean_parameter.value = True

        float_parameter = FloatParameter()
        float_parameter.name = 'Float Parameter'
        float_parameter.is_required = True
        float_parameter.precision = 3
        float_parameter.minimum_allowed_value = 1.0
        float_parameter.maximum_allowed_value = 2.0
        float_parameter.help_text = 'Short help.'
        float_parameter.description = 'Long description for parameter.'
        float_parameter.unit = 'metres'
        float_parameter.value = 1.1

        parameters = [boolean_parameter, float_parameter]

        qt4_parameter_factory = Qt4ParameterFactory()
        widgets = []
        widget_classes = []

        for parameter in parameters:
            widget = qt4_parameter_factory.get_widget(parameter)
            widgets.append(widget)
            widget_classes.append(widget.__class__)

        expected_classes = [BooleanParameterWidget, FloatParameterWidget]
        message = 'Expected %s got %s' % (expected_classes, widget_classes)
        self.assertListEqual(widget_classes, expected_classes, message)
Пример #3
0
def high_threshold():
    """Generate high  hazard zone threshold parameter

    :return: list of FloatParameter
    :rtype: list[FloatParameter]
    """
    field = FloatParameter()
    field.is_required = True
    field.name = 'High Hazard Zone Threshold'
    field.precision = 2
    field.value = 8
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    unit_metres = parameter_unit_metres()
    field.unit = unit_metres
    field.allowed_units = [unit_metres]
    field.help_text = tr('High Hazard Zone threshold.')
    field.description = tr(
        'The threshold of hazard categorized as High Hazard Zone in '
        'meter. A zone is categorized as High Hazard Zone if the depth of '
        'tsunami inundation is more than Medium Hazard Zone Threshold and '
        'less than High Hazard Zone Threshold.'
        'A zone that has more than High Hazard Zone Threshold is categorized '
        'as Very High Hazard Zone.')
    return field
Пример #4
0
def high_hazard_class():
    """Parameter definition.

    :returns: High Hazard Class parameter
    :rtype: FloatParameter
    """
    field = FloatParameter()
    field.name = 'High Hazard Class'
    field.element_type = float
    field.value = 3.0
    unit_generic = parameter_unit_generic()
    field.unit = unit_generic
    field.allowed_units = [unit_generic]
    field.help_text = tr('High Hazard class value.')
    field.description = tr(
        'The value of hazard categorized as High Hazard class')
    return field
Пример #5
0
def max_threshold():
    """Generator for the default threshold parameter.

    :return: List of FloatParameter
    :rtype: list[FloatParameter]
    """
    field = FloatParameter()
    field.name = 'Maximum Thresholds [m]'
    field.is_required = True
    field.precision = 2
    field.value = sys.float_info.max  # default value
    unit_metres = parameter_unit_metres()
    field.unit = unit_metres
    field.allowed_units = [unit_metres]
    field.help_text = tr('Maximum value of hazard considered as inundated.')
    field.description = tr('The depth of flood in meter as threshold.')
    return field
Пример #6
0
def evacuation_percentage():
    """Generator for the default evaluation percentage parameter.
    :return: List of Float parameter
    :rtype: list[FloatParameter]
    """
    field = FloatParameter()
    field.name = 'Evacuation Percentage'
    field.is_required = True
    field.maximum_allowed_value = 100
    field.minimum_allowed_value = 0
    field.value = 1
    field.precision = 2
    unit_percentage = parameter_unit_percentage()
    field.unit = unit_percentage
    field.allowed_units = [unit_percentage]
    field.help_text = tr('Percentage value of affected population.')
    field.description = tr(
        'The value in percentage of the population that '
        'represent the number of people needed to be evacuated.')
    return field
Пример #7
0
def threshold():
    """Generator for the default threshold parameter.

    :return: List of FloatParameter
    :rtype: list[FloatParameter]
    """
    field = FloatParameter()
    field.name = tr('Thresholds [m]')
    field.is_required = True
    field.precision = 2
    field.value = 1.0  # default value
    unit_metres = parameter_unit_metres()
    field.unit = unit_metres
    field.allowed_units = [unit_metres]
    field.help_text = tr(
        'Threshold value to categorize inundated area.')
    field.description = tr(
        'Hazard value above the threshold in meter will be considered '
        'inundated.')
    return field
Пример #8
0
def low_threshold():
    """Generate low hazard zone threshold parameter

    :return: list of FloatParameter
    :rtype: list[FloatParameter]
    """
    field = FloatParameter()
    field.is_required = True
    field.name = 'Low Hazard Zone Threshold'
    field.precision = 2
    field.value = 1
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    unit_metres = parameter_unit_metres()
    field.unit = unit_metres
    field.allowed_units = [unit_metres]
    field.help_text = tr('Low Hazard Zone threshold.')
    field.description = tr(
        'The threshold of hazard categorized as Low Hazard Zone in meter. A '
        'zone is categorized as Low Hazard Zone if the depth of tsunami '
        'inundation is less than Low Hazard Zone Threshold.')
    return field
Пример #9
0
def low_threshold():
    """Generate low hazard zone threshold parameter

    :returns: A FloatParameter.
    :rtype: FloatParameter
    """
    field = FloatParameter()
    field.is_required = True
    field.name = tr('Low Hazard Zone Threshold')
    field.precision = 2
    field.value = 2
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    unit_centimetres = parameter_unit_centimetres()
    field.unit = unit_centimetres
    field.allowed_units = [unit_centimetres]
    field.help_text = tr('Low Hazard Zone threshold.')
    field.description = tr(
        'The threshold of hazard categorized as Low Hazard Zone in '
        'centimetres. A zone is categorized as Low Hazard Zone if the '
        'thickness of ash is more than Very Low Hazard Zone Threshold and '
        'less than Low Hazard Zone Threshold.')
    return field
Пример #10
0
def unaffected_threshold():
    """Generate threshold for unaffected region

    :returns: A FloatParameter.
    :rtype: FloatParameter
    """
    field = FloatParameter()
    field.is_required = True
    field.name = tr('Unaffected Threshold')
    field.precision = 2
    field.value = 1
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    field.value = 0.01
    unit_centimetres = parameter_unit_centimetres()
    field.unit = unit_centimetres
    field.allowed_units = [unit_centimetres]
    field.help_text = tr('Unaffected threshold.')
    field.description = tr(
        'The threshold of hazard categorized as Unaffected in '
        'centimetres. A zone is categorized as Unaffected if the '
        'thickness of ash is less than Unaffected Threshold.')
    return field
Пример #11
0
def medium_threshold():
    """Generate moderate hazard zone threshold parameter

    :return: list of FloatParameter
    :rtype: list[FloatParameter]
    """
    field = FloatParameter()
    field.is_required = True
    field.name = 'Moderate Hazard Zone Threshold'
    field.precision = 2
    field.value = 3
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    unit_metres = parameter_unit_metres()
    field.unit = unit_metres
    field.allowed_units = [unit_metres]
    field.help_text = tr('Moderate Hazard Zone threshold.')
    field.description = tr(
        'The threshold of hazard categorized as Moderate Hazard Zone in '
        'meter. A zone is categorized as Medium Hazard Zone if the depth of '
        'tsunami inundation is more than Low Hazard Zone Threshold and less '
        'than Medium Hazard Zone Threshold.')
    return field
Пример #12
0
def low_threshold():
    """Generate low hazard zone threshold parameter

    :returns: A FloatParameter.
    :rtype: FloatParameter
    """
    field = FloatParameter()
    field.is_required = True
    field.name = tr('Low Hazard Zone Threshold')
    field.precision = 2
    field.value = 2
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    unit_centimetres = parameter_unit_centimetres()
    field.unit = unit_centimetres
    field.allowed_units = [unit_centimetres]
    field.help_text = tr('Low Hazard Zone threshold.')
    field.description = tr(
        'The threshold of hazard categorized as Low Hazard Zone in '
        'centimetres. A zone is categorized as Low Hazard Zone if the '
        'thickness of ash is more than Very Low Hazard Zone Threshold and '
        'less than Low Hazard Zone Threshold.')
    return field
Пример #13
0
def unaffected_threshold():
    """Generate threshold for unaffected region

    :returns: A FloatParameter.
    :rtype: FloatParameter
    """
    field = FloatParameter()
    field.is_required = True
    field.name = tr('Unaffected Threshold')
    field.precision = 2
    field.value = 1
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    field.value = 0.01
    unit_centimetres = parameter_unit_centimetres()
    field.unit = unit_centimetres
    field.allowed_units = [unit_centimetres]
    field.help_text = tr('Unaffected threshold.')
    field.description = tr(
        'The threshold of hazard categorized as Unaffected in '
        'centimetres. A zone is categorized as Unaffected if the '
        'thickness of ash is less than Unaffected Threshold.')
    return field
Пример #14
0
def high_threshold():
    """Generate high  hazard zone threshold parameter

    :returns: A FloatParameter.
    :rtype: FloatParameter
    """
    field = FloatParameter()
    field.is_required = True
    field.name = tr('High Hazard Zone Threshold')
    field.precision = 2
    field.value = 10
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    unit_centimetres = parameter_unit_centimetres()
    field.unit = unit_centimetres
    field.allowed_units = [unit_centimetres]
    field.help_text = tr('High Hazard Zone threshold.')
    field.description = tr(
        'The threshold of hazard categorized as High Hazard Zone in '
        'centimetres. A zone is categorized as High Hazard Zone if the '
        'thickness of ash is more than Moderate Hazard Zone Threshold and '
        'less than High Hazard Zone Threshold. If it is more than High Hazard '
        'Threshold then it was considered as Very High Hazard Zone')
    return field
Пример #15
0
def high_threshold():
    """Generate high  hazard zone threshold parameter

    :returns: A FloatParameter.
    :rtype: FloatParameter
    """
    field = FloatParameter()
    field.is_required = True
    field.name = tr('High Hazard Zone Threshold')
    field.precision = 2
    field.value = 10
    field.minimum_allowed_value = 0
    field.maximum_allowed_value = 100
    unit_centimetres = parameter_unit_centimetres()
    field.unit = unit_centimetres
    field.allowed_units = [unit_centimetres]
    field.help_text = tr('High Hazard Zone threshold.')
    field.description = tr(
        'The threshold of hazard categorized as High Hazard Zone in '
        'centimetres. A zone is categorized as High Hazard Zone if the '
        'thickness of ash is more than Moderate Hazard Zone Threshold and '
        'less than High Hazard Zone Threshold. If it is more than High Hazard '
        'Threshold then it was considered as Very High Hazard Zone')
    return field
Пример #16
0
def age_postprocessor():
    """Get age postprocessor selectors.

    :return: Selectors to activate age postprocessor.
    :rtype: list
    """
    age = GroupParameter()
    age.name = 'Age'
    age.enable_parameter = True
    age.must_scroll = False
    age.help_text = tr('Age ratios breakdown.')
    age.description = tr(
        'Check this option if you wish to calculate a breakdown by age group'
        'for the affected population. '
    )

    unit_ratio = Unit()
    unit_ratio.name = tr('ratio')
    unit_ratio.plural = tr('ratios')
    unit_ratio.abbreviation = tr('ratio')
    unit_ratio.description = tr(
        'Ratio represents a fraction of 1, so it ranges from 0 to 1.'
    )

    youth_ratio = FloatParameter()
    youth_ratio.name = 'Youth ratio'
    youth_ratio.value = get_defaults('YOUTH_RATIO')
    youth_ratio.unit = unit_ratio
    youth_ratio.allowed_units = [unit_ratio]
    youth_ratio.help_text = tr('Youth ratio value.')
    youth_ratio.description = tr(
        'Youth ratio defines what proportion of the population have not yet '
        'achieved financial independence. The age threshold for youth can '
        'vary by region - please consult with your local census bureau to find'
        'out what the relevant threshold is in your region. InaSAFE does not '
        'impose a particular age ratio scheme - it will break down the '
        'population according to the thresholds you define for your locality.'
        'In InaSAFE, people 0-14 years old are defined as "youth". The '
        'default youth ratio is 0.263.'
    )

    adult_ratio = FloatParameter()
    adult_ratio.name = 'Adult ratio'
    adult_ratio.value = get_defaults('ADULT_RATIO')
    adult_ratio.unit = unit_ratio
    adult_ratio.allowed_units = [unit_ratio]
    adult_ratio.help_text = tr('Adult ratio value.')
    adult_ratio.description = tr(
        'Adult ratio defines what proportion of the population have '
        'passed into adulthood and are not yet aged. The age threshold for '
        'adults can vary by region - please consult with your local census '
        'bureau to find out what the relevant threshold is in your region. '
        'InaSAFE does not impose a particular age ratio scheme - it will '
        'break down the population according to the thresholds you define '
        'for your locality.'
        'In InaSAFE, people 15-64 years old are defined as "adult". The '
        'default adult ratio is 0.659.'
    )

    elderly_ratio = FloatParameter()
    elderly_ratio.name = 'Elderly ratio'
    elderly_ratio.value = get_defaults('ELDERLY_RATIO')
    elderly_ratio.unit = unit_ratio
    elderly_ratio.allowed_units = [unit_ratio]
    elderly_ratio.help_text = tr('Elderly ratio value.')
    elderly_ratio.description = tr(
        'Elderly ratio defines what proportion of the population have '
        'passed from adulthood into their later life stage.  The age '
        'threshold for being considered elderly can vary by region - please '
        'consult with your local census bureau to find out what the relevant '
        'threshold is in your region. InaSAFE does not impose a particular '
        'age ratio scheme - it will break down the population according to '
        'the thresholds you define for your locality.'
        'In InaSAFE, people 65 years old and over are defined as "elderly". '
        'The default elderly ratio is 0.078.'
    )

    age.value = [youth_ratio, adult_ratio, elderly_ratio]

    def _age_validator(parameters=None):
        total_ratio = 0
        for p in parameters:
            total_ratio += p.value

        if not total_ratio == 1:
            message = tr('Total Age ratio is %s instead of 1') % total_ratio
            raise ValueError(message)

    age.custom_validator = _age_validator

    return [age]
Пример #17
0
def age_postprocessor():
    """Get age postprocessor selectors.

    :return: Selectors to activate age postprocessor.
    :rtype: list
    """
    age = GroupParameter()
    age.name = 'Age'
    age.enable_parameter = True
    age.must_scroll = False
    age.help_text = tr('Age ratios breakdown.')
    age.description = tr(
        'Check this option if you wish to calculate a breakdown by age group'
        'for the affected population. ')

    unit_ratio = Unit()
    unit_ratio.name = tr('ratio')
    unit_ratio.plural = tr('ratios')
    unit_ratio.abbreviation = tr('ratio')
    unit_ratio.description = tr(
        'Ratio represents a fraction of 1, so it ranges from 0 to 1.')

    youth_ratio = FloatParameter()
    youth_ratio.name = 'Youth ratio'
    youth_ratio.value = get_defaults('YOUTH_RATIO')
    youth_ratio.unit = unit_ratio
    youth_ratio.allowed_units = [unit_ratio]
    youth_ratio.help_text = tr('Youth ratio value.')
    youth_ratio.description = tr(
        'Youth ratio defines what proportion of the population have not yet '
        'achieved financial independence. The age threshold for youth can '
        'vary by region - please consult with your local census bureau to find'
        'out what the relevant threshold is in your region. InaSAFE does not '
        'impose a particular age ratio scheme - it will break down the '
        'population according to the thresholds you define for your locality.'
        'In InaSAFE, people 0-14 years old are defined as "youth". The '
        'default youth ratio is 0.263.')

    adult_ratio = FloatParameter()
    adult_ratio.name = 'Adult ratio'
    adult_ratio.value = get_defaults('ADULT_RATIO')
    adult_ratio.unit = unit_ratio
    adult_ratio.allowed_units = [unit_ratio]
    adult_ratio.help_text = tr('Adult ratio value.')
    adult_ratio.description = tr(
        'Adult ratio defines what proportion of the population have '
        'passed into adulthood and are not yet aged. The age threshold for '
        'adults can vary by region - please consult with your local census '
        'bureau to find out what the relevant threshold is in your region. '
        'InaSAFE does not impose a particular age ratio scheme - it will '
        'break down the population according to the thresholds you define '
        'for your locality.'
        'In InaSAFE, people 15-64 years old are defined as "adult". The '
        'default adult ratio is 0.659.')

    elderly_ratio = FloatParameter()
    elderly_ratio.name = 'Elderly ratio'
    elderly_ratio.value = get_defaults('ELDERLY_RATIO')
    elderly_ratio.unit = unit_ratio
    elderly_ratio.allowed_units = [unit_ratio]
    elderly_ratio.help_text = tr('Elderly ratio value.')
    elderly_ratio.description = tr(
        'Elderly ratio defines what proportion of the population have '
        'passed from adulthood into their later life stage.  The age '
        'threshold for being considered elderly can vary by region - please '
        'consult with your local census bureau to find out what the relevant '
        'threshold is in your region. InaSAFE does not impose a particular '
        'age ratio scheme - it will break down the population according to '
        'the thresholds you define for your locality.'
        'In InaSAFE, people 65 years old and over are defined as "elderly". '
        'The default elderly ratio is 0.078.')

    age.value = [youth_ratio, adult_ratio, elderly_ratio]

    def _age_validator(parameters=None):
        total_ratio = 0
        for p in parameters:
            total_ratio += p.value

        if not total_ratio == 1:
            message = tr('Total Age ratio is %s instead of 1') % total_ratio
            raise ValueError(message)

    age.custom_validator = _age_validator

    return [age]
Пример #18
0
    def test_init(self):

        unit_feet = Unit('130790')
        unit_feet.load_dictionary(unit_feet_depth)

        unit_metres = Unit('900713')
        unit_metres.load_dictionary(unit_metres_depth)

        float_parameter = FloatParameter()
        float_parameter.name = 'Flood Depth'
        float_parameter.is_required = True
        float_parameter.precision = 3
        float_parameter.minimum_allowed_value = 1.0
        float_parameter.maximum_allowed_value = 2.0
        float_parameter.help_text = 'The depth of flood.'
        float_parameter.description = (
            'A <b>test _description</b> that is very long so that you need '
            'to read it for one minute and you will be tired after read this '
            'description. You are the best user so far. Even better if you '
            'read this description loudly so that all of your friends will be '
            'able to hear you')
        float_parameter.unit = unit_feet
        float_parameter.allowed_units = [unit_metres, unit_feet]
        float_parameter.value = 1.12

        widget = FloatParameterWidget(float_parameter)

        expected_value = float_parameter.name
        real_value = widget._label.text()
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)

        expected_value = float_parameter.value
        real_value = widget.get_parameter().value
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)

        widget._input.setValue(1.5)

        expected_value = 1.5
        real_value = widget.get_parameter().value
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)

        widget._input.setValue(1.55555)

        expected_value = 1.556
        real_value = widget.get_parameter().value
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)

        widget._input.setValue(7)

        expected_value = 2
        real_value = widget.get_parameter().value
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)

        expected_value = 'QComboBox'
        real_value = widget._unit_widget.__class__.__name__
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)

        expected_value = 'feet'
        real_value = widget.get_parameter().unit.name
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)

        expected_value = 'metres'
        widget._unit_widget.setCurrentIndex(0)
        real_value = widget.get_parameter().unit.name
        message = 'Expected %s get %s' % (expected_value, real_value)
        self.assertEqual(expected_value, real_value, message)