예제 #1
0
    def test_unparseable(self):
        self.assertDictEqual(
            unitconv.parse_unitname('/w'), {
                'multiplier': 1,
                'unit_class': None,
                'primary_unit': '/w',
                'base_unit': '/w'
            })

        self.assertDictEqual(
            unitconv.parse_unitname('/'), {
                'multiplier': 1,
                'unit_class': None,
                'primary_unit': '/',
                'base_unit': '/'
            })

        self.assertDictEqual(
            unitconv.parse_unitname('a/b/c'), {
                'multiplier': 1,
                'unit_class': None,
                'primary_unit': 'a/b/c',
                'base_unit': 'a/b/c'
            })

        self.assertDictEqual(
            unitconv.parse_unitname(''), {
                'multiplier': 1,
                'unit_class': None,
                'primary_unit': '',
                'base_unit': ''
            })
예제 #2
0
    def test_fractional(self):
        self.assertDictEqual(
            unitconv.parse_unitname('GB/h'), {
                'numer_multiplier': 1e9 * 8,
                'denom_multiplier': 3600,
                'multiplier': 1e9 * 8 / 3600,
                'numer_unit_class': 'datasize',
                'denom_unit_class': 'time',
                'unit_class': 'datasize/time',
                'numer_primary_unit': 'b',
                'denom_primary_unit': 's',
                'primary_unit': 'b/s',
                'numer_base_unit': 'B',
                'denom_base_unit': 'h',
                'base_unit': 'B/h'
            })

        self.assertDictEqual(
            unitconv.parse_unitname('kb/k', fold_scale_prefix=False), {
                'numer_multiplier': 1,
                'denom_multiplier': 1,
                'multiplier': 1,
                'numer_scale_multiplier': 1000,
                'denom_scale_multiplier': 1,
                'scale_multiplier': 1000,
                'numer_unit_class': 'datasize',
                'denom_unit_class': None,
                'unit_class': None,
                'numer_primary_unit': 'b',
                'denom_primary_unit': 'k',
                'primary_unit': 'b/k',
                'numer_base_unit': 'b',
                'denom_base_unit': 'k',
                'base_unit': 'b/k'
            })

        self.assertDictEqual(
            unitconv.parse_unitname('Foobity/w', fold_scale_prefix=False), {
                'numer_multiplier': 1,
                'denom_multiplier': 86400 * 7,
                'multiplier': 1 / (86400 * 7),
                'numer_scale_multiplier': 1,
                'denom_scale_multiplier': 1,
                'scale_multiplier': 1,
                'numer_unit_class': None,
                'denom_unit_class': 'time',
                'unit_class': None,
                'numer_primary_unit': 'Foobity',
                'denom_primary_unit': 's',
                'primary_unit': 'Foobity/s',
                'numer_base_unit': 'Foobity',
                'denom_base_unit': 'w',
                'base_unit': 'Foobity/w'
            })
예제 #3
0
 def test_non_fractional(self):
     self.assertDictEqual(
         unitconv.parse_unitname('Kimo'),
         {'multiplier': 1024 * 60 * 60 * 24 * 30, 'unit_class': 'time',
          'primary_unit': 's', 'base_unit': 'mo',
          'numer_multiplier': 1024 * 60 * 60 * 24 * 30, 'numer_unit_class': 'time',
          'numer_primary_unit': 's', 'numer_base_unit': 'mo'})
예제 #4
0
    def test_unparseable(self):
        self.assertDictEqual(
            unitconv.parse_unitname('/w'),
            {'multiplier': 1, 'unit_class': None, 'primary_unit': '/w',
             'base_unit': '/w'})

        self.assertDictEqual(
            unitconv.parse_unitname('/'),
            {'multiplier': 1, 'unit_class': None, 'primary_unit': '/',
             'base_unit': '/'})

        self.assertDictEqual(
            unitconv.parse_unitname('a/b/c'),
            {'multiplier': 1, 'unit_class': None, 'primary_unit': 'a/b/c',
             'base_unit': 'a/b/c'})

        self.assertDictEqual(
            unitconv.parse_unitname(''),
            {'multiplier': 1, 'unit_class': None, 'primary_unit': '',
             'base_unit': ''})
예제 #5
0
 def test_non_fractional(self):
     self.assertDictEqual(
         unitconv.parse_unitname('Kimo'), {
             'multiplier': 1024 * 60 * 60 * 24 * 30,
             'unit_class': 'time',
             'primary_unit': 's',
             'base_unit': 'mo',
             'numer_multiplier': 1024 * 60 * 60 * 24 * 30,
             'numer_unit_class': 'time',
             'numer_primary_unit': 's',
             'numer_base_unit': 'mo'
         })
예제 #6
0
    def test_fractional(self):
        self.assertDictEqual(
            unitconv.parse_unitname('GB/h'),
            {'numer_multiplier': 1e9 * 8, 'denom_multiplier': 3600,
             'multiplier': 1e9 * 8 / 3600,
             'numer_unit_class': 'datasize', 'denom_unit_class': 'time',
             'unit_class': 'datasize/time',
             'numer_primary_unit': 'b', 'denom_primary_unit': 's',
             'primary_unit': 'b/s',
             'numer_base_unit': 'B', 'denom_base_unit': 'h',
             'base_unit': 'B/h'})

        self.assertDictEqual(
            unitconv.parse_unitname('kb/k', fold_scale_prefix=False),
            {'numer_multiplier': 1, 'denom_multiplier': 1,
             'multiplier': 1,
             'numer_scale_multiplier': 1000, 'denom_scale_multiplier': 1,
             'scale_multiplier': 1000,
             'numer_unit_class': 'datasize', 'denom_unit_class': None,
             'unit_class': None,
             'numer_primary_unit': 'b', 'denom_primary_unit': 'k',
             'primary_unit': 'b/k',
             'numer_base_unit': 'b', 'denom_base_unit': 'k',
             'base_unit': 'b/k'})

        self.assertDictEqual(
            unitconv.parse_unitname('Foobity/w', fold_scale_prefix=False),
            {'numer_multiplier': 1, 'denom_multiplier': 86400 * 7,
             'multiplier': 1 / (86400 * 7),
             'numer_scale_multiplier': 1, 'denom_scale_multiplier': 1,
             'scale_multiplier': 1,
             'numer_unit_class': None, 'denom_unit_class': 'time',
             'unit_class': None,
             'numer_primary_unit': 'Foobity', 'denom_primary_unit': 's',
             'primary_unit': 'Foobity/s',
             'numer_base_unit': 'Foobity', 'denom_base_unit': 'w',
             'base_unit': 'Foobity/w'})
예제 #7
0
def run_scenario(user_asked_for, data_exists_as, allow_derivation=True,
                 allow_integration=False, allow_prefixes_in_denominator=False,
                 round_result=6):
    userunit = unitconv.parse_unitname(user_asked_for, fold_scale_prefix=False)
    prefixclass = unitconv.prefix_class_for(userunit['scale_multiplier'])
    use_unit = userunit['base_unit']
    compatibles = unitconv.determine_compatible_units(
            allow_derivation=allow_derivation,
            allow_integration=allow_integration,
            allow_prefixes_in_denominator=allow_prefixes_in_denominator,
            **userunit)
    try:
        scale, extra_op = compatibles[data_exists_as]
    except KeyError:
        return
    if round_result is not None:
        scale = round(scale, round_result)
    return (data_exists_as, use_unit, scale, extra_op, prefixclass)
예제 #8
0
def run_scenario(user_asked_for,
                 data_exists_as,
                 allow_derivation=True,
                 allow_integration=False,
                 allow_prefixes_in_denominator=False,
                 round_result=6):
    userunit = unitconv.parse_unitname(user_asked_for, fold_scale_prefix=False)
    prefixclass = unitconv.prefix_class_for(userunit['scale_multiplier'])
    use_unit = userunit['base_unit']
    compatibles = unitconv.determine_compatible_units(
        allow_derivation=allow_derivation,
        allow_integration=allow_integration,
        allow_prefixes_in_denominator=allow_prefixes_in_denominator,
        **userunit)
    try:
        scale, extra_op = compatibles[data_exists_as]
    except KeyError:
        return
    if round_result is not None:
        scale = round(scale, round_result)
    return (data_exists_as, use_unit, scale, extra_op, prefixclass)