def oligo_dilution_table(conc=None, sc=None):
    """Return dilution table

    Determine the amount of diluent to add to an oligo based on
    concentration wanted and scale ordered. This function can return the
    entire dilution table or slices and values as needd

    Example Usage:

    .. code-block:: python

        oligo_dilution_table(conc="100uM")
        oligo_dilution_table(conc="100uM", scale="25nm")

    Returns:

    .. code-block:: python

        {"100uM": {"10nm":60, "25nm": 250, "100nm": 1000, "250nm": 2500,
                   "1um": 10000}}
        250

    Parameters
    ----------
    conc : str, optional
        The concentration you wish to select for. Currently 100uM or 1mM.
    sc : str, optional
        The scale you wish to select for. Currently '10nm', '25nm',
        '100nm', '250nm' or '1um'.

    Returns
    -------
    int
        If concentration and scale are given this returns the dilution volume
        only
    dict
        If only one of concentration or scale is provided this function
        returns a dict. If a concentration is selected it returns a dict where
        scales are the keys and dilution volumes the values.
        If a scale is selected it returns a dict with concentrations as keys
        and dicts of scale (key) and dilution volume (value).
        If nothing is selected the full dict of concentrations with dicts of
        scales and dilution volumes is returned.



    Raises
    ------
    ValueError
        If conc is not a valid concentration: '100uM', '1mM'
    ValueError
        If sc is is not a valid scale: '10nm', '25nm', '100nm', '250nm', '1um'

    """
    concentration = '100uM', '1mM'
    scale = '10nm', '25nm', '100nm', '250nm', '1um'
    volumes = [60, 250, 1000, 2500, 10000, 6, 25, 100, 250, 1000]
    if conc:
        assert conc in concentration, 'conc has to be in %s ' % concentration
    if sc:
        assert sc in scale, 'sc has to be in %s ' % scale
    dilution_table = {}
    for i, y in enumerate(concentration):
        dilution_table[y] = dict(zip(scale, volumes[i * len(scale):i * len(
            scale) + len(scale)]))
    if conc and sc:
        return dilution_table[conc][sc]
    elif conc:
        return dilution_table[conc]
    elif sc:
        for x in scale:
            if sc != x:
                for c in dilution_table:
                    dilution_table[c].pop(x, None)
        return dilution_table
    else:
        return dilution_table
