prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Faker should provide company VAT numbers
  It would be nice if faker could provide company VAT numbers. More information about VAT codes is in Wikipedia: https://en.wikipedia.org/wiki/VAT_identification_number
  
  
  </issue>
  <code>
  [start of faker/providers/company/fi_FI/__init__.py]
  1 from __future__ import unicode_literals
  2 from .. import Provider as CompanyProvider
  3 
  4 
  5 class Provider(CompanyProvider):
  6     formats = (
  7         '{{last_name}} {{company_suffix}}',
  8         '{{last_name}} {{last_name}} {{company_suffix}}',
  9         '{{last_name}} {{last_name}} {{company_suffix}}',
  10         '{{last_name}}'
  11     )
  12 
  13     company_suffixes = (
  14         'As Oy', 'Tmi', 'Oy', 'Oyj', 'Ky', 'Osk', 'ry'
  15     )
  16
  [end of faker/providers/company/fi_FI/__init__.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/faker/providers/company/fi_FI/__init__.py b/faker/providers/company/fi_FI/__init__.py
  --- a/faker/providers/company/fi_FI/__init__.py
  +++ b/faker/providers/company/fi_FI/__init__.py
  @@ -13,3 +13,41 @@
       company_suffixes = (
           'As Oy', 'Tmi', 'Oy', 'Oyj', 'Ky', 'Osk', 'ry'
       )
  +
  +    def company_business_id(self):
  +        """
  +        Returns Finnish company Business Identity Code (y-tunnus).
  +        Format is 8 digits - e.g. FI99999999,[8] last digit is a check
  +        digit utilizing MOD 11-2. The first digit is zero for some old
  +        organizations. This function provides current codes starting with
  +        non-zero.
  +        """
  +        def calculate_checksum(number):
  +            """Calculate the checksum using mod 11,2 method"""
  +            factors = [7, 9, 10, 5, 8, 4, 2]
  +            sum = 0
  +            for x, y in zip(number, factors):
  +                sum = sum + int(x) * y
  +            if sum % 11 == 0:
  +                return '0'
  +            else:
  +                return str(11 - sum % 11)
  +
  +        first_digit = str(self.random_digit_not_null())
  +        body = first_digit + self.bothify(self.random_element(('######',)))
  +        cs = calculate_checksum(body)
  +        return (body + '-' + str(cs))
  +
  +    def company_vat(self):
  +        """
  +        Returns Finnish VAT identification number (Arvonlisaveronumero).
  +        This can be calculated from company business identity code by
  +        adding prefix "FI" and removing dash before checksum.
  +        """
  +        def convert_to_vat(business_id):
  +            """
  +            Convert business id to VATIN
  +            """
  +            return 'FI' + business_id.replace('-', '')
  +
  +        return convert_to_vat(self.company_business_id())
  
verification_info: {"golden_diff": "diff --git a/faker/providers/company/fi_FI/__init__.py b/faker/providers/company/fi_FI/__init__.py\n--- a/faker/providers/company/fi_FI/__init__.py\n+++ b/faker/providers/company/fi_FI/__init__.py\n@@ -13,3 +13,41 @@\n     company_suffixes = (\n         'As Oy', 'Tmi', 'Oy', 'Oyj', 'Ky', 'Osk', 'ry'\n     )\n+\n+    def company_business_id(self):\n+        \"\"\"\n+        Returns Finnish company Business Identity Code (y-tunnus).\n+        Format is 8 digits - e.g. FI99999999,[8] last digit is a check\n+        digit utilizing MOD 11-2. The first digit is zero for some old\n+        organizations. This function provides current codes starting with\n+        non-zero.\n+        \"\"\"\n+        def calculate_checksum(number):\n+            \"\"\"Calculate the checksum using mod 11,2 method\"\"\"\n+            factors = [7, 9, 10, 5, 8, 4, 2]\n+            sum = 0\n+            for x, y in zip(number, factors):\n+                sum = sum + int(x) * y\n+            if sum % 11 == 0:\n+                return '0'\n+            else:\n+                return str(11 - sum % 11)\n+\n+        first_digit = str(self.random_digit_not_null())\n+        body = first_digit + self.bothify(self.random_element(('######',)))\n+        cs = calculate_checksum(body)\n+        return (body + '-' + str(cs))\n+\n+    def company_vat(self):\n+        \"\"\"\n+        Returns Finnish VAT identification number (Arvonlisaveronumero).\n+        This can be calculated from company business identity code by\n+        adding prefix \"FI\" and removing dash before checksum.\n+        \"\"\"\n+        def convert_to_vat(business_id):\n+            \"\"\"\n+            Convert business id to VATIN\n+            \"\"\"\n+            return 'FI' + business_id.replace('-', '')\n+\n+        return convert_to_vat(self.company_business_id())\n", "issue": "Faker should provide company VAT numbers\nIt would be nice if faker could provide company VAT numbers. More information about VAT codes is in Wikipedia: https://en.wikipedia.org/wiki/VAT_identification_number\n\n", "before_files": [{"content": "from __future__ import unicode_literals\nfrom .. import Provider as CompanyProvider\n\n\nclass Provider(CompanyProvider):\n    formats = (\n        '{{last_name}} {{company_suffix}}',\n        '{{last_name}} {{last_name}} {{company_suffix}}',\n        '{{last_name}} {{last_name}} {{company_suffix}}',\n        '{{last_name}}'\n    )\n\n    company_suffixes = (\n        'As Oy', 'Tmi', 'Oy', 'Oyj', 'Ky', 'Osk', 'ry'\n    )\n", "path": "faker/providers/company/fi_FI/__init__.py"}]}