READ_DOCSTRING = """
    Read the input ``table`` and return the table.  Most of
    the default behavior for various parameters is determined by the Reader
    class.

    See also:

    - https://docs.astropy.org/en/stable/io/ascii/
    - https://docs.astropy.org/en/stable/io/ascii/read.html

    Parameters
    ----------
    table : str, file-like, list, `pathlib.Path` object
        Input table as a file name, file-like object, list of string[s],
        single newline-separated string or `pathlib.Path` object.
    guess : bool
        Try to guess the table format. Defaults to None.
    format : str, `~astropy.io.ascii.BaseReader`
        Input table format
    Inputter : `~astropy.io.ascii.BaseInputter`
        Inputter class
    Outputter : `~astropy.io.ascii.BaseOutputter`
        Outputter class
    delimiter : str
        Column delimiter string
    comment : str
        Regular expression defining a comment line in table
    quotechar : str
        One-character string to quote fields containing special characters
    header_start : int
        Line index for the header line not counting comment or blank lines.
        A line with only whitespace is considered blank.
    data_start : int
        Line index for the start of data not counting comment or blank lines.
        A line with only whitespace is considered blank.
    data_end : int
        Line index for the end of data not counting comment or blank lines.
        This value can be negative to count from the end.
    converters : dict
        Dictionary of converters. Keys in the dictionary are columns names,
        values are converter functions. In addition to single column names
        you can use wildcards via `fnmatch` to select multiple columns.
    data_Splitter : `~astropy.io.ascii.BaseSplitter`
        Splitter class to split data columns
    header_Splitter : `~astropy.io.ascii.BaseSplitter`
        Splitter class to split header columns
    names : list
        List of names corresponding to each data column
    include_names : list
        List of names to include in output.
    exclude_names : list
        List of names to exclude from output (applied after ``include_names``)
    fill_values : tuple, list of tuple
        specification of fill values for bad or missing table values
    fill_include_names : list
        List of names to include in fill_values.
    fill_exclude_names : list
        List of names to exclude from fill_values (applied after ``fill_include_names``)
    fast_reader : bool, str or dict
        Whether to use the C engine, can also be a dict with options which
        defaults to `False`; parameters for options dict:

        use_fast_converter: bool
            enable faster but slightly imprecise floating point conversion method
        parallel: bool or int
            multiprocessing conversion using ``cpu_count()`` or ``'number'`` processes
        exponent_style: str
            One-character string defining the exponent or ``'Fortran'`` to auto-detect
            Fortran-style scientific notation like ``'3.14159D+00'`` (``'E'``, ``'D'``, ``'Q'``),
            all case-insensitive; default ``'E'``, all other imply ``use_fast_converter``
        chunk_size : int
            If supplied with a value > 0 then read the table in chunks of
            approximately ``chunk_size`` bytes. Default is reading table in one pass.
        chunk_generator : bool
            If True and ``chunk_size > 0`` then return an iterator that returns a
            table for each chunk.  The default is to return a single stacked table
            for all the chunks.

    encoding : str
        Allow to specify encoding to read the file (default= ``None``).

    Returns
    -------
    dat : `~astropy.table.Table` or <generator>
        Output table

    """

# Specify allowed types for core write() keyword arguments.  Each entry
# corresponds to the name of an argument and either a type (e.g. int) or a
# list of types.  These get used in io.ascii.ui._validate_read_write_kwargs().
# -  The commented-out kwargs are too flexible for a useful check
# -  'list-list' is a special case for an iterable that is not a string.
READ_KWARG_TYPES = {
    # 'table'
    'guess': bool,
    # 'format'
    # 'Reader'
    # 'Inputter'
    # 'Outputter'
    'delimiter': str,
    'comment': str,
    'quotechar': str,
    'header_start': int,
    'data_start': (int, str),  # CDS allows 'guess'
    'data_end': int,
    'converters': dict,
    # 'data_Splitter'
    # 'header_Splitter'
    'names': 'list-like',
    'include_names': 'list-like',
    'exclude_names': 'list-like',
    'fill_values': 'list-like',
    'fill_include_names': 'list-like',
    'fill_exclude_names': 'list-like',
    'fast_reader': (bool, str, dict),
    'encoding': str,
}


WRITE_DOCSTRING = """
    Write the input ``table`` to ``filename``.  Most of the default behavior
    for various parameters is determined by the Writer class.

    See also:

    - https://docs.astropy.org/en/stable/io/ascii/
    - https://docs.astropy.org/en/stable/io/ascii/write.html

    Parameters
    ----------
    table : `~astropy.io.ascii.BaseReader`, array-like, str, file-like, list
        Input table as a Reader object, Numpy struct array, file name,
        file-like object, list of strings, or single newline-separated string.
    output : str, file-like
        Output [filename, file-like object]. Defaults to``sys.stdout``.
    format : str
        Output table format. Defaults to 'basic'.
    delimiter : str
        Column delimiter string
    comment : str, bool
        String defining a comment line in table.  If `False` then comments
        are not written out.
    quotechar : str
        One-character string to quote fields containing special characters
    formats : dict
        Dictionary of format specifiers or formatting functions
    strip_whitespace : bool
        Strip surrounding whitespace from column values.
    names : list
        List of names corresponding to each data column
    include_names : list
        List of names to include in output.
    exclude_names : list
        List of names to exclude from output (applied after ``include_names``)
    fast_writer : bool, str
        Whether to use the fast Cython writer.  Can be `True` (use fast writer
        if available), `False` (do not use fast writer), or ``'force'`` (use
        fast writer and fail if not available, mostly for testing).
    overwrite : bool
        If ``overwrite=False`` (default) and the file exists, then an OSError
        is raised. This parameter is ignored when the ``output`` arg is not a
        string (e.g., a file object).

    """
# Specify allowed types for core write() keyword arguments.  Each entry
# corresponds to the name of an argument and either a type (e.g. int) or a
# list of types.  These get used in io.ascii.ui._validate_read_write_kwargs().
# -  The commented-out kwargs are too flexible for a useful check
# -  'list-list' is a special case for an iterable that is not a string.
WRITE_KWARG_TYPES = {
    # 'table'
    # 'output'
    'format': str,
    'delimiter': str,
    'comment': (str, bool),
    'quotechar': str,
    'header_start': int,
    'formats': dict,
    'strip_whitespace': (bool),
    'names': 'list-like',
    'include_names': 'list-like',
    'exclude_names': 'list-like',
    'fast_writer': (bool, str),
    'overwrite': (bool),
}
