<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def subnet_create(auth=None, **kwargs):
    '''
    Create a subnet

    network_name_or_id
        The unique name or ID of the attached network. If a non-unique name is
        supplied, an exception is raised.

    cidr
        The CIDR

    ip_version
        The IP version, which is 4 or 6.

    enable_dhcp : False
        Set to ``True`` if DHCP is enabled and ``False`` if disabled

    subnet_name
        The name of the subnet

    tenant_id
        The ID of the tenant who owns the network. Only administrative users
        can specify a tenant ID other than their own.

    allocation_pools
        A list of dictionaries of the start and end addresses for the
        allocation pools.

    gateway_ip
        The gateway IP address. When you specify both ``allocation_pools`` and
        ``gateway_ip``, you must ensure that the gateway IP does not overlap
        with the specified allocation pools.

    disable_gateway_ip : False
        Set to ``True`` if gateway IP address is disabled and ``False`` if
        enabled. It is not allowed with ``gateway_ip``.

    dns_nameservers
        A list of DNS name servers for the subnet

    host_routes
        A list of host route dictionaries for the subnet

    ipv6_ra_mode
        IPv6 Router Advertisement mode. Valid values are ``dhcpv6-stateful``,
        ``dhcpv6-stateless``, or ``slaac``.

    ipv6_address_mode
        IPv6 address mode. Valid values are ``dhcpv6-stateful``,
        ``dhcpv6-stateless``, or ``slaac``.

    use_default_subnetpool
        If ``True``, use the default subnetpool for ``ip_version`` to obtain a
        CIDR. It is required to pass ``None`` to the ``cidr`` argument when
        enabling this option.

    CLI Example:

    .. code-block:: bash

        salt '*' neutronng.subnet_create network_name_or_id=network1
          subnet_name=subnet1

        salt '*' neutronng.subnet_create subnet_name=subnet2\
          network_name_or_id=network2 enable_dhcp=True \
          allocation_pools='[{"start": "192.168.199.2",\
                              "end": "192.168.199.254"}]'\
          gateway_ip='192.168.199.1' cidr=192.168.199.0/24

        salt '*' neutronng.subnet_create network_name_or_id=network1 \
          subnet_name=subnet1 dns_nameservers='["8.8.8.8", "8.8.8.7"]'

    '''
    cloud = get_operator_cloud(auth)
    kwargs = _clean_kwargs(**kwargs)
    return cloud.create_subnet(**kwargs)