Example #1
0
	def test_second_argument_type(self):
		# any type with an __index__ method should be permitted as
		# a second argument
		self.assertAlmostEqual(round2(12.34, True), 12.3)

		class MyIndex(object):
			def __index__(self): return 4
		self.assertAlmostEqual(round2(-0.123456, MyIndex()), -0.1235)
		# but floats should be illegal
		self.assertRaises(TypeError, round2, 3.14159, 2.0)
Example #2
0
    def test_second_argument_type(self):
        # any type with an __index__ method should be permitted as
        # a second argument
        self.assertAlmostEqual(round2(12.34, True), 12.3)

        class MyIndex(object):
            def __index__(self):
                return 4

        self.assertAlmostEqual(round2(-0.123456, MyIndex()), -0.1235)
        # but floats should be illegal
        self.assertRaises(TypeError, round2, 3.14159, 2.0)
Example #3
0
def postscriptWeightNameFallback(info):
    """
    Fallback to the closest match of the *openTypeOS2WeightClass*
    in this table:

    ===  ===========
    100  Thin
    200  Extra-light
    300  Light
    400  Normal
    500  Medium
    600  Semi-bold
    700  Bold
    800  Extra-bold
    900  Black
    ===  ===========
    """
    value = getAttrWithFallback(info, "openTypeOS2WeightClass")
    value = int(round2(value, -2))
    if value < 100:
        value = 100
    elif value > 900:
        value = 900
    name = _postscriptWeightNameOptions[value]
    return name
Example #4
0
 def _processPostscriptWeightName(self, copiedInfo):
     # handle postscriptWeightName by taking the value
     # of openTypeOS2WeightClass and getting the closest
     # value from the OS/2 specification.
     name = None
     if hasattr(copiedInfo, "openTypeOS2WeightClass") and copiedInfo.openTypeOS2WeightClass is not None:
         v = copiedInfo.openTypeOS2WeightClass
         # here we use Python 2 rounding (i.e. away from 0) instead of Python 3:
         # e.g. 150 -> 200 and 250 -> 300, instead of 150 -> 200 and 250 -> 200
         v = int(round2(v, -2))
         if v < 100:
             v = 100
         elif v > 900:
             v = 900
         name = _postscriptWeightNameOptions[v]
     copiedInfo.postscriptWeightName = name
Example #5
0
 def _processPostscriptWeightName(self, copiedInfo):
     # handle postscriptWeightName by taking the value
     # of openTypeOS2WeightClass and getting the closest
     # value from the OS/2 specification.
     name = None
     if hasattr(copiedInfo, "openTypeOS2WeightClass") and copiedInfo.openTypeOS2WeightClass is not None:
         v = copiedInfo.openTypeOS2WeightClass
         # here we use Python 2 rounding (i.e. away from 0) instead of Python 3:
         # e.g. 150 -> 200 and 250 -> 300, instead of 150 -> 200 and 250 -> 200
         v = int(round2(v, -2))
         if v < 100:
             v = 100
         elif v > 900:
             v = 900
         name = _postscriptWeightNameOptions[v]
     copiedInfo.postscriptWeightName = name
Example #6
0
def _openTypeOS2WidthClassFormatter(value):
    """
    >>> _openTypeOS2WidthClassFormatter(-2)
    1
    >>> _openTypeOS2WidthClassFormatter(0)
    1
    >>> _openTypeOS2WidthClassFormatter(5.4)
    5
    >>> _openTypeOS2WidthClassFormatter(9.6)
    9
    >>> _openTypeOS2WidthClassFormatter(12)
    9
    """
    value = int(round2(value))
    if value > 9:
        value = 9
    elif value < 1:
        value = 1
    return value
Example #7
0
def _openTypeOS2WidthClassFormatter(value):
    """
    >>> _openTypeOS2WidthClassFormatter(-2)
    1
    >>> _openTypeOS2WidthClassFormatter(0)
    1
    >>> _openTypeOS2WidthClassFormatter(5.4)
    5
    >>> _openTypeOS2WidthClassFormatter(9.6)
    9
    >>> _openTypeOS2WidthClassFormatter(12)
    9
    """
    value = int(round2(value))
    if value > 9:
        value = 9
    elif value < 1:
        value = 1
    return value
Example #8
0
	def test_halfway_cases(self):
		# Halfway cases need special attention, since the current
		# implementation has to deal with them specially.  Note that
		# 2.x rounds halfway values up (i.e., away from zero) while
		# 3.x does round-half-to-even.
		self.assertAlmostEqual(round2(0.125, 2), 0.13)
		self.assertAlmostEqual(round2(0.375, 2), 0.38)
		self.assertAlmostEqual(round2(0.625, 2), 0.63)
		self.assertAlmostEqual(round2(0.875, 2), 0.88)
		self.assertAlmostEqual(round2(-0.125, 2), -0.13)
		self.assertAlmostEqual(round2(-0.375, 2), -0.38)
		self.assertAlmostEqual(round2(-0.625, 2), -0.63)
		self.assertAlmostEqual(round2(-0.875, 2), -0.88)

		self.assertAlmostEqual(round2(0.25, 1), 0.3)
		self.assertAlmostEqual(round2(0.75, 1), 0.8)
		self.assertAlmostEqual(round2(-0.25, 1), -0.3)
		self.assertAlmostEqual(round2(-0.75, 1), -0.8)

		self.assertEqual(round2(-6.5, 0), -7.0)
		self.assertEqual(round2(-5.5, 0), -6.0)
		self.assertEqual(round2(-1.5, 0), -2.0)
		self.assertEqual(round2(-0.5, 0), -1.0)
		self.assertEqual(round2(0.5, 0), 1.0)
		self.assertEqual(round2(1.5, 0), 2.0)
		self.assertEqual(round2(2.5, 0), 3.0)
		self.assertEqual(round2(3.5, 0), 4.0)
		self.assertEqual(round2(4.5, 0), 5.0)
		self.assertEqual(round2(5.5, 0), 6.0)
		self.assertEqual(round2(6.5, 0), 7.0)

		# same but without an explicit second argument; in 3.x these
		# will give integers
		self.assertEqual(round2(-6.5), -7.0)
		self.assertEqual(round2(-5.5), -6.0)
		self.assertEqual(round2(-1.5), -2.0)
		self.assertEqual(round2(-0.5), -1.0)
		self.assertEqual(round2(0.5), 1.0)
		self.assertEqual(round2(1.5), 2.0)
		self.assertEqual(round2(2.5), 3.0)
		self.assertEqual(round2(3.5), 4.0)
		self.assertEqual(round2(4.5), 5.0)
		self.assertEqual(round2(5.5), 6.0)
		self.assertEqual(round2(6.5), 7.0)

		self.assertEqual(round2(-25.0, -1), -30.0)
		self.assertEqual(round2(-15.0, -1), -20.0)
		self.assertEqual(round2(-5.0, -1), -10.0)
		self.assertEqual(round2(5.0, -1), 10.0)
		self.assertEqual(round2(15.0, -1), 20.0)
		self.assertEqual(round2(25.0, -1), 30.0)
		self.assertEqual(round2(35.0, -1), 40.0)
		self.assertEqual(round2(45.0, -1), 50.0)
		self.assertEqual(round2(55.0, -1), 60.0)
		self.assertEqual(round2(65.0, -1), 70.0)
		self.assertEqual(round2(75.0, -1), 80.0)
		self.assertEqual(round2(85.0, -1), 90.0)
		self.assertEqual(round2(95.0, -1), 100.0)
		self.assertEqual(round2(12325.0, -1), 12330.0)
		self.assertEqual(round2(0, -1), 0.0)

		self.assertEqual(round2(350.0, -2), 400.0)
		self.assertEqual(round2(450.0, -2), 500.0)

		self.assertAlmostEqual(round2(0.5e21, -21), 1e21)
		self.assertAlmostEqual(round2(1.5e21, -21), 2e21)
		self.assertAlmostEqual(round2(2.5e21, -21), 3e21)
		self.assertAlmostEqual(round2(5.5e21, -21), 6e21)
		self.assertAlmostEqual(round2(8.5e21, -21), 9e21)

		self.assertAlmostEqual(round2(-1.5e22, -22), -2e22)
		self.assertAlmostEqual(round2(-0.5e22, -22), -1e22)
		self.assertAlmostEqual(round2(0.5e22, -22), 1e22)
		self.assertAlmostEqual(round2(1.5e22, -22), 2e22)
Example #9
0
 def round(self, multiple=1):
     multiple = float(multiple)
     for k, v in self._kerning.items():
         self._kerning[k] = int(round2(int(round2(v / multiple)) * multiple))
Example #10
0
    def test_halfway_cases(self):
        # Halfway cases need special attention, since the current
        # implementation has to deal with them specially.  Note that
        # 2.x rounds halfway values up (i.e., away from zero) while
        # 3.x does round-half-to-even.
        self.assertAlmostEqual(round2(0.125, 2), 0.13)
        self.assertAlmostEqual(round2(0.375, 2), 0.38)
        self.assertAlmostEqual(round2(0.625, 2), 0.63)
        self.assertAlmostEqual(round2(0.875, 2), 0.88)
        self.assertAlmostEqual(round2(-0.125, 2), -0.13)
        self.assertAlmostEqual(round2(-0.375, 2), -0.38)
        self.assertAlmostEqual(round2(-0.625, 2), -0.63)
        self.assertAlmostEqual(round2(-0.875, 2), -0.88)

        self.assertAlmostEqual(round2(0.25, 1), 0.3)
        self.assertAlmostEqual(round2(0.75, 1), 0.8)
        self.assertAlmostEqual(round2(-0.25, 1), -0.3)
        self.assertAlmostEqual(round2(-0.75, 1), -0.8)

        self.assertEqual(round2(-6.5, 0), -7.0)
        self.assertEqual(round2(-5.5, 0), -6.0)
        self.assertEqual(round2(-1.5, 0), -2.0)
        self.assertEqual(round2(-0.5, 0), -1.0)
        self.assertEqual(round2(0.5, 0), 1.0)
        self.assertEqual(round2(1.5, 0), 2.0)
        self.assertEqual(round2(2.5, 0), 3.0)
        self.assertEqual(round2(3.5, 0), 4.0)
        self.assertEqual(round2(4.5, 0), 5.0)
        self.assertEqual(round2(5.5, 0), 6.0)
        self.assertEqual(round2(6.5, 0), 7.0)

        # same but without an explicit second argument; in 3.x these
        # will give integers
        self.assertEqual(round2(-6.5), -7.0)
        self.assertEqual(round2(-5.5), -6.0)
        self.assertEqual(round2(-1.5), -2.0)
        self.assertEqual(round2(-0.5), -1.0)
        self.assertEqual(round2(0.5), 1.0)
        self.assertEqual(round2(1.5), 2.0)
        self.assertEqual(round2(2.5), 3.0)
        self.assertEqual(round2(3.5), 4.0)
        self.assertEqual(round2(4.5), 5.0)
        self.assertEqual(round2(5.5), 6.0)
        self.assertEqual(round2(6.5), 7.0)

        self.assertEqual(round2(-25.0, -1), -30.0)
        self.assertEqual(round2(-15.0, -1), -20.0)
        self.assertEqual(round2(-5.0, -1), -10.0)
        self.assertEqual(round2(5.0, -1), 10.0)
        self.assertEqual(round2(15.0, -1), 20.0)
        self.assertEqual(round2(25.0, -1), 30.0)
        self.assertEqual(round2(35.0, -1), 40.0)
        self.assertEqual(round2(45.0, -1), 50.0)
        self.assertEqual(round2(55.0, -1), 60.0)
        self.assertEqual(round2(65.0, -1), 70.0)
        self.assertEqual(round2(75.0, -1), 80.0)
        self.assertEqual(round2(85.0, -1), 90.0)
        self.assertEqual(round2(95.0, -1), 100.0)
        self.assertEqual(round2(12325.0, -1), 12330.0)
        self.assertEqual(round2(0, -1), 0.0)

        self.assertEqual(round2(350.0, -2), 400.0)
        self.assertEqual(round2(450.0, -2), 500.0)

        self.assertAlmostEqual(round2(0.5e21, -21), 1e21)
        self.assertAlmostEqual(round2(1.5e21, -21), 2e21)
        self.assertAlmostEqual(round2(2.5e21, -21), 3e21)
        self.assertAlmostEqual(round2(5.5e21, -21), 6e21)
        self.assertAlmostEqual(round2(8.5e21, -21), 9e21)

        self.assertAlmostEqual(round2(-1.5e22, -22), -2e22)
        self.assertAlmostEqual(round2(-0.5e22, -22), -1e22)
        self.assertAlmostEqual(round2(0.5e22, -22), 1e22)
        self.assertAlmostEqual(round2(1.5e22, -22), 2e22)
Example #11
0
 def round(self, multiple=1):
     multiple = float(multiple)
     for k, v in self._kerning.items():
         self._kerning[k] = int(round2(
             int(round2(v / multiple)) * multiple))