prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Feedstock failing due to pandas datetime
  ### Description
  CI is failing due to datetime units not being set for csv reader
  
  ### What I Did
  
  See the PR here that was failing
  https://github.com/conda-forge/act-atmos-feedstock/pull/63
  
  
  </issue>
  <code>
  [start of act/io/csvfiles.py]
  1 """
  2 This module contains I/O operations for loading csv files.
  3 
  4 """
  5 
  6 import pathlib
  7 
  8 import pandas as pd
  9 
  10 from .armfiles import check_arm_standards
  11 
  12 
  13 def read_csv(filename, sep=',', engine='python', column_names=None, skipfooter=0, ignore_index=True, **kwargs):
  14 
  15     """
  16     Returns an `xarray.Dataset` with stored data and metadata from user-defined
  17     query of CSV files.
  18 
  19     Parameters
  20     ----------
  21     filenames : str or list
  22         Name of file(s) to read.
  23     sep : str
  24         The separator between columns in the csv file.
  25     column_names : list or None
  26         The list of column names in the csv file.
  27     verbose : bool
  28         If true, will print if a file is not found.
  29     ignore_index : bool
  30          Keyword for pandas concat function.  If True, do not use the index
  31          values along the concatenation axis. The resulting axis will be labeled
  32          0, …, n - 1. This is useful if you are concatenating datasets where the
  33          concatenation axis does not have meaningful indexing information. Note
  34          the index values on the other axes are still respected in the join.
  35 
  36     Additional keyword arguments will be passed into pandas.read_csv.
  37 
  38     Returns
  39     -------
  40     ds : xarray.Dataset
  41         ACT Xarray dataset. Will be None if the file is not found.
  42 
  43     Examples
  44     --------
  45     This example will load the example sounding data used for unit testing:
  46 
  47     .. code-block:: python
  48 
  49         import act
  50 
  51         ds = act.io.csvfiles.read(act.tests.sample_files.EXAMPLE_CSV_WILDCARD)
  52 
  53     """
  54 
  55     # Convert to string if filename is a pathlib or not a list
  56     if isinstance(filename, (pathlib.PurePath, str)):
  57         filename = [str(filename)]
  58 
  59     if isinstance(filename, list) and isinstance(filename[0], pathlib.PurePath):
  60         filename = [str(ii) for ii in filename]
  61 
  62     # Read data using pandas read_csv one file at a time and append to
  63     # list. Then concatinate the list into one pandas dataframe.
  64     li = []
  65     for fl in filename:
  66         df = pd.read_csv(
  67             fl, sep=sep, names=column_names, skipfooter=skipfooter, engine=engine, **kwargs
  68         )
  69         li.append(df)
  70 
  71     if len(li) == 1:
  72         df = li[0]
  73     else:
  74         df = pd.concat(li, axis=0, ignore_index=ignore_index)
  75 
  76     # Set Coordinates if there's a variable date_time
  77     if 'date_time' in df:
  78         df.date_time = df.date_time.astype('datetime64')
  79         df.time = df.date_time
  80         df = df.set_index('time')
  81 
  82     # Convert to xarray DataSet
  83     ds = df.to_xarray()
  84 
  85     # Set additional variables
  86     # Since we cannot assume a standard naming convention setting
  87     # file_date and file_time to the first time in the file
  88     x_coord = ds.coords.to_index().values[0]
  89     if isinstance(x_coord, str):
  90         x_coord_dt = pd.to_datetime(x_coord)
  91         ds.attrs['_file_dates'] = x_coord_dt.strftime('%Y%m%d')
  92         ds.attrs['_file_times'] = x_coord_dt.strftime('%H%M%S')
  93 
  94     # Check for standard ARM datastream name, if none, assume the file is ARM
  95     # standard format.
  96     is_arm_file_flag = check_arm_standards(ds)
  97     if is_arm_file_flag == 0:
  98 
  99         ds.attrs['_datastream'] = '.'.join(filename[0].split('/')[-1].split('.')[0:2])
  100 
  101     # Add additional attributes, site, standards flag, etc...
  102     ds.attrs['_site'] = str(ds.attrs['_datastream'])[0:3]
  103     ds.attrs['_arm_standards_flag'] = is_arm_file_flag
  104 
  105     return ds
  106
  [end of act/io/csvfiles.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/act/io/csvfiles.py b/act/io/csvfiles.py
  --- a/act/io/csvfiles.py
  +++ b/act/io/csvfiles.py
  @@ -75,7 +75,7 @@
   
       # Set Coordinates if there's a variable date_time
       if 'date_time' in df:
  -        df.date_time = df.date_time.astype('datetime64')
  +        df.date_time = df.date_time.astype('datetime64[ns]')
           df.time = df.date_time
           df = df.set_index('time')
  
verification_info: {"golden_diff": "diff --git a/act/io/csvfiles.py b/act/io/csvfiles.py\n--- a/act/io/csvfiles.py\n+++ b/act/io/csvfiles.py\n@@ -75,7 +75,7 @@\n \n     # Set Coordinates if there's a variable date_time\n     if 'date_time' in df:\n-        df.date_time = df.date_time.astype('datetime64')\n+        df.date_time = df.date_time.astype('datetime64[ns]')\n         df.time = df.date_time\n         df = df.set_index('time')\n", "issue": "Feedstock failing due to pandas datetime\n### Description\r\nCI is failing due to datetime units not being set for csv reader\r\n\r\n### What I Did\r\n\r\nSee the PR here that was failing\r\nhttps://github.com/conda-forge/act-atmos-feedstock/pull/63\r\n\n", "before_files": [{"content": "\"\"\"\nThis module contains I/O operations for loading csv files.\n\n\"\"\"\n\nimport pathlib\n\nimport pandas as pd\n\nfrom .armfiles import check_arm_standards\n\n\ndef read_csv(filename, sep=',', engine='python', column_names=None, skipfooter=0, ignore_index=True, **kwargs):\n\n    \"\"\"\n    Returns an `xarray.Dataset` with stored data and metadata from user-defined\n    query of CSV files.\n\n    Parameters\n    ----------\n    filenames : str or list\n        Name of file(s) to read.\n    sep : str\n        The separator between columns in the csv file.\n    column_names : list or None\n        The list of column names in the csv file.\n    verbose : bool\n        If true, will print if a file is not found.\n    ignore_index : bool\n         Keyword for pandas concat function.  If True, do not use the index\n         values along the concatenation axis. The resulting axis will be labeled\n         0, \u2026, n - 1. This is useful if you are concatenating datasets where the\n         concatenation axis does not have meaningful indexing information. Note\n         the index values on the other axes are still respected in the join.\n\n    Additional keyword arguments will be passed into pandas.read_csv.\n\n    Returns\n    -------\n    ds : xarray.Dataset\n        ACT Xarray dataset. Will be None if the file is not found.\n\n    Examples\n    --------\n    This example will load the example sounding data used for unit testing:\n\n    .. code-block:: python\n\n        import act\n\n        ds = act.io.csvfiles.read(act.tests.sample_files.EXAMPLE_CSV_WILDCARD)\n\n    \"\"\"\n\n    # Convert to string if filename is a pathlib or not a list\n    if isinstance(filename, (pathlib.PurePath, str)):\n        filename = [str(filename)]\n\n    if isinstance(filename, list) and isinstance(filename[0], pathlib.PurePath):\n        filename = [str(ii) for ii in filename]\n\n    # Read data using pandas read_csv one file at a time and append to\n    # list. Then concatinate the list into one pandas dataframe.\n    li = []\n    for fl in filename:\n        df = pd.read_csv(\n            fl, sep=sep, names=column_names, skipfooter=skipfooter, engine=engine, **kwargs\n        )\n        li.append(df)\n\n    if len(li) == 1:\n        df = li[0]\n    else:\n        df = pd.concat(li, axis=0, ignore_index=ignore_index)\n\n    # Set Coordinates if there's a variable date_time\n    if 'date_time' in df:\n        df.date_time = df.date_time.astype('datetime64')\n        df.time = df.date_time\n        df = df.set_index('time')\n\n    # Convert to xarray DataSet\n    ds = df.to_xarray()\n\n    # Set additional variables\n    # Since we cannot assume a standard naming convention setting\n    # file_date and file_time to the first time in the file\n    x_coord = ds.coords.to_index().values[0]\n    if isinstance(x_coord, str):\n        x_coord_dt = pd.to_datetime(x_coord)\n        ds.attrs['_file_dates'] = x_coord_dt.strftime('%Y%m%d')\n        ds.attrs['_file_times'] = x_coord_dt.strftime('%H%M%S')\n\n    # Check for standard ARM datastream name, if none, assume the file is ARM\n    # standard format.\n    is_arm_file_flag = check_arm_standards(ds)\n    if is_arm_file_flag == 0:\n\n        ds.attrs['_datastream'] = '.'.join(filename[0].split('/')[-1].split('.')[0:2])\n\n    # Add additional attributes, site, standards flag, etc...\n    ds.attrs['_site'] = str(ds.attrs['_datastream'])[0:3]\n    ds.attrs['_arm_standards_flag'] = is_arm_file_flag\n\n    return ds\n", "path": "act/io/csvfiles.py"}]}