<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def resplit_datasets(dataset, other_dataset, random_seed=None, split=None):
 """Deterministic shuffle and split algorithm. Given the same two datasets and the same ``random_seed``, the split happens the same exact way every call. Args: dataset (lib.datasets.Dataset):
 First dataset. other_dataset (lib.datasets.Dataset):
 Another dataset. random_seed (int, optional):
 Seed to control the shuffle of both datasets. split (float, optional):
 If defined it is the percentage of rows that first dataset gets after split otherwise the original proportions are kept. Returns: :class:`lib.datasets.Dataset`, :class:`lib.datasets.Dataset`: Resplit datasets. """

    # Prevent circular dependency
    from torchnlp.datasets import Dataset

    concat = dataset.rows + other_dataset.rows
    shuffle(concat, random_seed=random_seed)
    if split is None:
        return Dataset(concat[:len(dataset)]), Dataset(concat[len(dataset):])
    else:
        split = max(min(round(len(concat) * split), len(concat)), 0)
        return Dataset(concat[:split]), Dataset(concat[split:])