prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  IPv4Address doesn't import from pydantic.validators
  **Describe the bug**
  
  When using `format: ipv4`, the following import is added to the output:
  
  ```py
  from pydantic import IPv4Address
  ```
  
  This isn't a valid import.
  
  **To Reproduce**
  
  Example schema:
  ```yaml
  openapi: 3.0.0
  
  info:
    version: 0.0.1
    title: Foo API
  
  paths:
    /foo:
      get:
        responses:
          "200":
            description: Success
  
  components:
    schemas:
      Foo:
        type: object
        properties:
          ip:
            type: string
            format: ipv4
  ```
  
  Used commandline:
  ```
  $ datamodel-codegen --input openapi.yaml
  ```
  
  **Expected behavior**
  
  When using `format: ipv4`, the following import is added to the output:
  
  ```py
  from pydantic.validators import IPv4Address
  ```
  
  **Version:**
   - OS: MacOS
   - Python version: `3.9.2`
   - datamodel-code-generator version: `0.8.2`
  
  **Additional context**
  None
  
  
  </issue>
  <code>
  [start of datamodel_code_generator/model/pydantic/imports.py]
  1 from datamodel_code_generator.imports import Import
  2 
  3 IMPORT_CONSTR = Import.from_full_path('pydantic.constr')
  4 IMPORT_CONINT = Import.from_full_path('pydantic.conint')
  5 IMPORT_CONFLOAT = Import.from_full_path('pydantic.confloat')
  6 IMPORT_CONDECIMAL = Import.from_full_path('pydantic.condecimal')
  7 IMPORT_CONBYTES = Import.from_full_path('pydantic.conbytes')
  8 IMPORT_POSITIVE_INT = Import.from_full_path('pydantic.PositiveInt')
  9 IMPORT_NEGATIVE_INT = Import.from_full_path('pydantic.NegativeInt')
  10 IMPORT_POSITIVE_FLOAT = Import.from_full_path('pydantic.PositiveFloat')
  11 IMPORT_NEGATIVE_FLOAT = Import.from_full_path('pydantic.NegativeFloat')
  12 IMPORT_SECRET_STR = Import.from_full_path('pydantic.SecretStr')
  13 IMPORT_EMAIL_STR = Import.from_full_path('pydantic.EmailStr')
  14 IMPORT_UUID1 = Import.from_full_path('pydantic.UUID1')
  15 IMPORT_UUID2 = Import.from_full_path('pydantic.UUID2')
  16 IMPORT_UUID3 = Import.from_full_path('pydantic.UUID3')
  17 IMPORT_UUID4 = Import.from_full_path('pydantic.UUID4')
  18 IMPORT_UUID5 = Import.from_full_path('pydantic.UUID5')
  19 IMPORT_ANYURL = Import.from_full_path('pydantic.AnyUrl')
  20 IMPORT_IPV4ADDRESS = Import.from_full_path('pydantic.IPv4Address')
  21 IMPORT_IPV6ADDRESS = Import.from_full_path('pydantic.IPv6Address')
  22 IMPORT_EXTRA = Import.from_full_path('pydantic.Extra')
  23 IMPORT_FIELD = Import.from_full_path('pydantic.Field')
  24 IMPORT_STRICT_INT = Import.from_full_path('pydantic.StrictInt')
  25 IMPORT_STRICT_FLOAT = Import.from_full_path('pydantic.StrictFloat')
  26 IMPORT_STRICT_STR = Import.from_full_path('pydantic.StrictStr')
  27 IMPORT_STRICT_BOOL = Import.from_full_path('pydantic.StrictBool')
  28 IMPORT_STRICT_BYTES = Import.from_full_path('pydantic.StrictBytes')
  29 IMPORT_DATACLASS = Import.from_full_path('pydantic.dataclasses.dataclass')
  30
  [end of datamodel_code_generator/model/pydantic/imports.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/datamodel_code_generator/model/pydantic/imports.py b/datamodel_code_generator/model/pydantic/imports.py
  --- a/datamodel_code_generator/model/pydantic/imports.py
  +++ b/datamodel_code_generator/model/pydantic/imports.py
  @@ -17,8 +17,8 @@
   IMPORT_UUID4 = Import.from_full_path('pydantic.UUID4')
   IMPORT_UUID5 = Import.from_full_path('pydantic.UUID5')
   IMPORT_ANYURL = Import.from_full_path('pydantic.AnyUrl')
  -IMPORT_IPV4ADDRESS = Import.from_full_path('pydantic.IPv4Address')
  -IMPORT_IPV6ADDRESS = Import.from_full_path('pydantic.IPv6Address')
  +IMPORT_IPV4ADDRESS = Import.from_full_path('ipaddress.IPv4Address')
  +IMPORT_IPV6ADDRESS = Import.from_full_path('ipaddress.IPv6Address')
   IMPORT_EXTRA = Import.from_full_path('pydantic.Extra')
   IMPORT_FIELD = Import.from_full_path('pydantic.Field')
   IMPORT_STRICT_INT = Import.from_full_path('pydantic.StrictInt')
  
verification_info: {"golden_diff": "diff --git a/datamodel_code_generator/model/pydantic/imports.py b/datamodel_code_generator/model/pydantic/imports.py\n--- a/datamodel_code_generator/model/pydantic/imports.py\n+++ b/datamodel_code_generator/model/pydantic/imports.py\n@@ -17,8 +17,8 @@\n IMPORT_UUID4 = Import.from_full_path('pydantic.UUID4')\n IMPORT_UUID5 = Import.from_full_path('pydantic.UUID5')\n IMPORT_ANYURL = Import.from_full_path('pydantic.AnyUrl')\n-IMPORT_IPV4ADDRESS = Import.from_full_path('pydantic.IPv4Address')\n-IMPORT_IPV6ADDRESS = Import.from_full_path('pydantic.IPv6Address')\n+IMPORT_IPV4ADDRESS = Import.from_full_path('ipaddress.IPv4Address')\n+IMPORT_IPV6ADDRESS = Import.from_full_path('ipaddress.IPv6Address')\n IMPORT_EXTRA = Import.from_full_path('pydantic.Extra')\n IMPORT_FIELD = Import.from_full_path('pydantic.Field')\n IMPORT_STRICT_INT = Import.from_full_path('pydantic.StrictInt')\n", "issue": "IPv4Address doesn't import from pydantic.validators\n**Describe the bug**\r\n\r\nWhen using `format: ipv4`, the following import is added to the output:\r\n\r\n```py\r\nfrom pydantic import IPv4Address\r\n```\r\n\r\nThis isn't a valid import.\r\n\r\n**To Reproduce**\r\n\r\nExample schema:\r\n```yaml\r\nopenapi: 3.0.0\r\n\r\ninfo:\r\n  version: 0.0.1\r\n  title: Foo API\r\n\r\npaths:\r\n  /foo:\r\n    get:\r\n      responses:\r\n        \"200\":\r\n          description: Success\r\n\r\ncomponents:\r\n  schemas:\r\n    Foo:\r\n      type: object\r\n      properties:\r\n        ip:\r\n          type: string\r\n          format: ipv4\r\n```\r\n\r\nUsed commandline:\r\n```\r\n$ datamodel-codegen --input openapi.yaml\r\n```\r\n\r\n**Expected behavior**\r\n\r\nWhen using `format: ipv4`, the following import is added to the output:\r\n\r\n```py\r\nfrom pydantic.validators import IPv4Address\r\n```\r\n\r\n**Version:**\r\n - OS: MacOS\r\n - Python version: `3.9.2`\r\n - datamodel-code-generator version: `0.8.2`\r\n\r\n**Additional context**\r\nNone\r\n\n", "before_files": [{"content": "from datamodel_code_generator.imports import Import\n\nIMPORT_CONSTR = Import.from_full_path('pydantic.constr')\nIMPORT_CONINT = Import.from_full_path('pydantic.conint')\nIMPORT_CONFLOAT = Import.from_full_path('pydantic.confloat')\nIMPORT_CONDECIMAL = Import.from_full_path('pydantic.condecimal')\nIMPORT_CONBYTES = Import.from_full_path('pydantic.conbytes')\nIMPORT_POSITIVE_INT = Import.from_full_path('pydantic.PositiveInt')\nIMPORT_NEGATIVE_INT = Import.from_full_path('pydantic.NegativeInt')\nIMPORT_POSITIVE_FLOAT = Import.from_full_path('pydantic.PositiveFloat')\nIMPORT_NEGATIVE_FLOAT = Import.from_full_path('pydantic.NegativeFloat')\nIMPORT_SECRET_STR = Import.from_full_path('pydantic.SecretStr')\nIMPORT_EMAIL_STR = Import.from_full_path('pydantic.EmailStr')\nIMPORT_UUID1 = Import.from_full_path('pydantic.UUID1')\nIMPORT_UUID2 = Import.from_full_path('pydantic.UUID2')\nIMPORT_UUID3 = Import.from_full_path('pydantic.UUID3')\nIMPORT_UUID4 = Import.from_full_path('pydantic.UUID4')\nIMPORT_UUID5 = Import.from_full_path('pydantic.UUID5')\nIMPORT_ANYURL = Import.from_full_path('pydantic.AnyUrl')\nIMPORT_IPV4ADDRESS = Import.from_full_path('pydantic.IPv4Address')\nIMPORT_IPV6ADDRESS = Import.from_full_path('pydantic.IPv6Address')\nIMPORT_EXTRA = Import.from_full_path('pydantic.Extra')\nIMPORT_FIELD = Import.from_full_path('pydantic.Field')\nIMPORT_STRICT_INT = Import.from_full_path('pydantic.StrictInt')\nIMPORT_STRICT_FLOAT = Import.from_full_path('pydantic.StrictFloat')\nIMPORT_STRICT_STR = Import.from_full_path('pydantic.StrictStr')\nIMPORT_STRICT_BOOL = Import.from_full_path('pydantic.StrictBool')\nIMPORT_STRICT_BYTES = Import.from_full_path('pydantic.StrictBytes')\nIMPORT_DATACLASS = Import.from_full_path('pydantic.dataclasses.dataclass')\n", "path": "datamodel_code_generator/model/pydantic/imports.py"}]}