prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Change how works generating data by schema
  The current design is bad for following reasons:
  
  `Field` is an object which can represent any method of any provider and it's mean that is data provider which should return data and it's the only thing that we want by this object, but here how it works right now:
  
  ```
  >>> from mimesis.schema import Field
  >>> from mimesis.enums import Gender
  _ = Field('en')
  >>> _ = Field('en')
  >>> app_schema = (
  ...     lambda: {
  ...         "id": _('uuid'),
  ...         "name": _('word'),
  ...         "version": _('version'),
  ...         "owner": {
  ...             "email": _('email'),
  ...             "token": _('token'),
  ...             "creator": _('full_name', gender=Gender.FEMALE),
  ...         },
  ...     }
  ... )
  >>> _.fill(schema=app_schema, iterations=10)
  ```
  
  It looks really annoying.
  
  It should be done using another way because here every instance of `Field` contains method `fill`, but why? Good question... because this is disgusting API designed by me. And now I see my mistake and suggest that it be corrected.
  
  I suggest this:
  
  ```
  from mimesis.schema import Field, Schema
  _ = Field('en')
  app_data = Schema(lambda: {
      "id": _('uuid'),
      "name": _('word'),
      "version": _('version'),
      "owner": {
          "email": _('email'),
          "token": _('token'),
          "creator": _('full_name', gender=Gender.FEMALE),
      },
  }).create(iterations=20)
  ```
  
  I think that is much better because the code is much more readable and looks more logical.
  
  </issue>
  <code>
  [start of mimesis/providers/development.py]
  1 from mimesis.data import (BACKEND, CONTAINER, FRONTEND, LICENSES, NOSQL, OS,
  2                           PROGRAMMING_LANGS, SQL)
  3 from mimesis.providers.base import BaseProvider
  4 
  5 
  6 class Development(BaseProvider):
  7     """Class for getting fake data for Developers."""
  8 
  9     def software_license(self) -> str:
  10         """Get a random software license from list.
  11 
  12         :return: License name.
  13 
  14         :Example:
  15             The BSD 3-Clause License.
  16         """
  17         return self.random.choice(LICENSES)
  18 
  19     def version(self, pre_release: bool = False) -> str:
  20         """Generate a random version information.
  21 
  22         :param pre_release: Pre-release.
  23         :return: The version of software.
  24 
  25         :Example:
  26             0.11.3-alpha.1
  27         """
  28         major, minor, patch = self.random.randints(3, 0, 10)
  29         version = '{}.{}.{}'.format(major, minor, patch)
  30 
  31         if pre_release:
  32             suffixes = ('alpha', 'beta', 'rc')
  33             suffix = self.random.choice(suffixes)
  34             number = self.random.randint(1, 11)
  35             return '{}-{}.{}'.format(version, suffix, number)
  36 
  37         return version
  38 
  39     def database(self, nosql: bool = False) -> str:
  40         """Get a random database name.
  41 
  42         :param bool nosql: only NoSQL databases.
  43         :return: Database name.
  44 
  45         :Example:
  46             PostgreSQL.
  47         """
  48         if nosql:
  49             return self.random.choice(NOSQL)
  50         return self.random.choice(SQL)
  51 
  52     def container(self) -> str:
  53         """Get a random containerization system.
  54 
  55         :return: Containerization system.
  56 
  57         :Example:
  58             Docker.
  59         """
  60         return self.random.choice(CONTAINER)
  61 
  62     def version_control_system(self) -> str:
  63         """Get a random version control system.
  64 
  65         :return: Version control system
  66 
  67         :Example:
  68             Git
  69         """
  70         vcs = ('Git', 'Subversion')
  71         return self.random.choice(vcs)
  72 
  73     def programming_language(self) -> str:
  74         """Get a random programming language from the list.
  75 
  76         :return: Programming language.
  77 
  78         :Example:
  79             Erlang.
  80         """
  81         return self.random.choice(PROGRAMMING_LANGS)
  82 
  83     def backend(self) -> str:
  84         """Get a random backend stack.
  85 
  86         :return: Stack.
  87 
  88         :Example:
  89             Elixir/Phoenix
  90         """
  91         return self.random.choice(BACKEND)
  92 
  93     def frontend(self) -> str:
  94         """Get a random front-end stack.
  95 
  96         :return: Stack.
  97 
  98         :Example:
  99             JS/React.
  100         """
  101         return self.random.choice(FRONTEND)
  102 
  103     def os(self) -> str:
  104         """Get a random operating system or distributive name.
  105 
  106         :return: The name of OS.
  107 
  108         :Example:
  109             Gentoo
  110         """
  111         return self.random.choice(OS)
  112 
  113     def boolean(self) -> bool:
  114         """Get a random boolean value.
  115 
  116         :return: True of False.
  117         """
  118         values = (0, 1)
  119         value = self.random.choice(values)
  120         return bool(value)
  121
  [end of mimesis/providers/development.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/mimesis/providers/development.py b/mimesis/providers/development.py
  --- a/mimesis/providers/development.py
  +++ b/mimesis/providers/development.py
  @@ -16,16 +16,28 @@
           """
           return self.random.choice(LICENSES)
   
  -    def version(self, pre_release: bool = False) -> str:
  +    def version(self, calver: bool = False, pre_release: bool = False) -> str:
           """Generate a random version information.
   
  +        :param calver: Use calendar versioning.
           :param pre_release: Pre-release.
           :return: The version of software.
  -
  +.
           :Example:
               0.11.3-alpha.1
           """
  +        version = '{}.{}.{}'
           major, minor, patch = self.random.randints(3, 0, 10)
  +
  +        if calver:
  +            if minor == 0:
  +                minor += 1
  +
  +            if patch == 0:
  +                patch += 1
  +            major = self.random.randint(2016, 2018)
  +            return version.format(major, minor, patch)
  +
           version = '{}.{}.{}'.format(major, minor, patch)
   
           if pre_release:
  
verification_info: {"golden_diff": "diff --git a/mimesis/providers/development.py b/mimesis/providers/development.py\n--- a/mimesis/providers/development.py\n+++ b/mimesis/providers/development.py\n@@ -16,16 +16,28 @@\n         \"\"\"\n         return self.random.choice(LICENSES)\n \n-    def version(self, pre_release: bool = False) -> str:\n+    def version(self, calver: bool = False, pre_release: bool = False) -> str:\n         \"\"\"Generate a random version information.\n \n+        :param calver: Use calendar versioning.\n         :param pre_release: Pre-release.\n         :return: The version of software.\n-\n+.\n         :Example:\n             0.11.3-alpha.1\n         \"\"\"\n+        version = '{}.{}.{}'\n         major, minor, patch = self.random.randints(3, 0, 10)\n+\n+        if calver:\n+            if minor == 0:\n+                minor += 1\n+\n+            if patch == 0:\n+                patch += 1\n+            major = self.random.randint(2016, 2018)\n+            return version.format(major, minor, patch)\n+\n         version = '{}.{}.{}'.format(major, minor, patch)\n \n         if pre_release:\n", "issue": "Change how works generating data by schema\nThe current design is bad for following reasons:\r\n\r\n`Field` is an object which can represent any method of any provider and it's mean that is data provider which should return data and it's the only thing that we want by this object, but here how it works right now:\r\n\r\n```\r\n>>> from mimesis.schema import Field\r\n>>> from mimesis.enums import Gender\r\n_ = Field('en')\r\n>>> _ = Field('en')\r\n>>> app_schema = (\r\n...     lambda: {\r\n...         \"id\": _('uuid'),\r\n...         \"name\": _('word'),\r\n...         \"version\": _('version'),\r\n...         \"owner\": {\r\n...             \"email\": _('email'),\r\n...             \"token\": _('token'),\r\n...             \"creator\": _('full_name', gender=Gender.FEMALE),\r\n...         },\r\n...     }\r\n... )\r\n>>> _.fill(schema=app_schema, iterations=10)\r\n```\r\n\r\nIt looks really annoying.\r\n\r\nIt should be done using another way because here every instance of `Field` contains method `fill`, but why? Good question... because this is disgusting API designed by me. And now I see my mistake and suggest that it be corrected.\r\n\r\nI suggest this:\r\n\r\n```\r\nfrom mimesis.schema import Field, Schema\r\n_ = Field('en')\r\napp_data = Schema(lambda: {\r\n    \"id\": _('uuid'),\r\n    \"name\": _('word'),\r\n    \"version\": _('version'),\r\n    \"owner\": {\r\n        \"email\": _('email'),\r\n        \"token\": _('token'),\r\n        \"creator\": _('full_name', gender=Gender.FEMALE),\r\n    },\r\n}).create(iterations=20)\r\n```\r\n\r\nI think that is much better because the code is much more readable and looks more logical.\n", "before_files": [{"content": "from mimesis.data import (BACKEND, CONTAINER, FRONTEND, LICENSES, NOSQL, OS,\n                          PROGRAMMING_LANGS, SQL)\nfrom mimesis.providers.base import BaseProvider\n\n\nclass Development(BaseProvider):\n    \"\"\"Class for getting fake data for Developers.\"\"\"\n\n    def software_license(self) -> str:\n        \"\"\"Get a random software license from list.\n\n        :return: License name.\n\n        :Example:\n            The BSD 3-Clause License.\n        \"\"\"\n        return self.random.choice(LICENSES)\n\n    def version(self, pre_release: bool = False) -> str:\n        \"\"\"Generate a random version information.\n\n        :param pre_release: Pre-release.\n        :return: The version of software.\n\n        :Example:\n            0.11.3-alpha.1\n        \"\"\"\n        major, minor, patch = self.random.randints(3, 0, 10)\n        version = '{}.{}.{}'.format(major, minor, patch)\n\n        if pre_release:\n            suffixes = ('alpha', 'beta', 'rc')\n            suffix = self.random.choice(suffixes)\n            number = self.random.randint(1, 11)\n            return '{}-{}.{}'.format(version, suffix, number)\n\n        return version\n\n    def database(self, nosql: bool = False) -> str:\n        \"\"\"Get a random database name.\n\n        :param bool nosql: only NoSQL databases.\n        :return: Database name.\n\n        :Example:\n            PostgreSQL.\n        \"\"\"\n        if nosql:\n            return self.random.choice(NOSQL)\n        return self.random.choice(SQL)\n\n    def container(self) -> str:\n        \"\"\"Get a random containerization system.\n\n        :return: Containerization system.\n\n        :Example:\n            Docker.\n        \"\"\"\n        return self.random.choice(CONTAINER)\n\n    def version_control_system(self) -> str:\n        \"\"\"Get a random version control system.\n\n        :return: Version control system\n\n        :Example:\n            Git\n        \"\"\"\n        vcs = ('Git', 'Subversion')\n        return self.random.choice(vcs)\n\n    def programming_language(self) -> str:\n        \"\"\"Get a random programming language from the list.\n\n        :return: Programming language.\n\n        :Example:\n            Erlang.\n        \"\"\"\n        return self.random.choice(PROGRAMMING_LANGS)\n\n    def backend(self) -> str:\n        \"\"\"Get a random backend stack.\n\n        :return: Stack.\n\n        :Example:\n            Elixir/Phoenix\n        \"\"\"\n        return self.random.choice(BACKEND)\n\n    def frontend(self) -> str:\n        \"\"\"Get a random front-end stack.\n\n        :return: Stack.\n\n        :Example:\n            JS/React.\n        \"\"\"\n        return self.random.choice(FRONTEND)\n\n    def os(self) -> str:\n        \"\"\"Get a random operating system or distributive name.\n\n        :return: The name of OS.\n\n        :Example:\n            Gentoo\n        \"\"\"\n        return self.random.choice(OS)\n\n    def boolean(self) -> bool:\n        \"\"\"Get a random boolean value.\n\n        :return: True of False.\n        \"\"\"\n        values = (0, 1)\n        value = self.random.choice(values)\n        return bool(value)\n", "path": "mimesis/providers/development.py"}]}