@staticmethod
def extract_values(fingerprint: str):
    """Return the original values from the passed fingerprint
           or filename. This assumes that the fingerprint
           was created using the 'fingerprint' function, namely
           that any integers are actually 0.INTEGER

           Parameters
           ----------
           fingerprint: str
             The fingerprint (or filename) to decode

           Returns
           -------
           (values, repeat): (List[float], int)
             The list of values of the variables and the repeat
             index. The repeat index is None if it wasn't included
             in the fingerprint
        """
    from pathlib import Path
    fingerprint = Path(Path(fingerprint).name)
    for suffix in fingerprint.suffixes:
        fingerprint = str(fingerprint).replace(suffix, '')
    fingerprint = str(fingerprint)
    parts = fingerprint.split('@')
    if len(parts) > 1:
        repeat_index = int(parts[-1])
        fingerprint = '@'.join(parts[0:-1])
    else:
        repeat_index = None
    values = []
    for part in fingerprint.split(':'):
        try:
            values.append(float(part.replace('_', '.')))
        except Exception:
            pass
    return values, repeat_index
