def check_keys(data1, data2):
    """Check it both files have the same datasets.
    Keyword arguments:
    data1 -- current data dictionary
    data2 -- data dictionary to be added
    """

    if data1.keys() != data2.keys():
        msg.error("Files have different datasets.")
        sys.exit(1)
def same_sizes(data1, data2):
    """Check if files have the same #entries per dataset.
    Keyword arguments:
    data1 -- first file
    data2 -- second file
    """

    if get_size(data1) != get_size(data2):
        msg.error("Files must have the same number of entries to be combined.")
        sys.exit(1)
def check_duplicates(keys1, keys2):
    """Check if given files have different (except skip) datasets.
    Keyword arguments:
    keys1 -- the list of keys to be copied from file1
    keys2 -- the list of keys to be copied from file2
    """

    for key in keys1:
        if key in keys2:
            msg.error("Duplicated dataset: %s in input files." % key)
            sys.exit(1)
def check_shapes(data1, data2):
    """Check if shapes of datasets are the same.
    Keyword arguments:
    data1 -- current data dictionary
    data2 -- data dictionary to be added
    """

    for key in data1.keys():
        if data1[key].shape[1:] != data2[key].shape[1:]:
            msg.error("Different shapes for dataset: %s. " % key)
            sys.exit(1)
def key_exists(key, data, filename):
    """Check if given dataset is included in the file.
    Keyword arguments:
    key -- key to look for
    data -- data dictionary to check
    """

    if key not in data.keys():
        msg.error("'%(key)s' key is missing in %(file)s." % {
            "key": key,
            "file": filename
        })
        sys.exit(1)
def get_size(data):
    """Check if #entries is the same for all keys and return it
    Keyword arguments:
    data -- data dictionary
    """

    sizes = [d.shape[0] for d in data.values()]  # shape[0] = #entries

    if max(sizes) != min(sizes):
        msg.error("Each dataset within a file must have the "
                  "same number of entries!")
        sys.exit(1)

    return sizes[0]
def different_keys(data1, data2, skip):
    """Check if given files have different (except skip) datasets.
    Keyword arguments:
    data1 -- data dictionary
    data2 -- data dictionary
    skip -- common key
    """

    for key in data1.keys():
        if key == skip:
            continue
        if key in data2.keys():
            msg.error("Duplicated dataset: %s in input files." % key)
            sys.exit(1)
def match(input1, input2, output, key):

    """Check if matching dataset is the same for inputs. Copy to output.
    input1 -- input file
    input2 -- input file
    output -- output file
    key -- dataset to match
    """

    if key not in input1 or key not in input2:
        msg.error("Both files must contains %s" % key)
        sys.exit(1)

    if len(input1[key].shape) != 1 or len(input2[key].shape) != 1:
        msg.error("Matching key should have (N,) shape.")
        sys.exit(1)

    if not np.array_equal(input1[key], input2[key]):
        msg.error("%s in input files are not the same." % key)
        sys.exit(1)

    msg.info("Copying %s" % key)

    input1.copy(key, output)