Parse input arguments used in function evaluation.
        End result will be two arrays X of shape (m) or (T, m)
        Allowed input shapes are:
        (1) DICT:       dictionary mapping variable names to values
        (2) ARGS:       2 dictionaries mapping variable names to values

def _parse_dicts(self, *args) -> Tuple[np.ndarray, np.ndarray]:
        """
        Parse input arguments used in function evaluation.
        End result will be two arrays X of shape (m) or (T, m)
        Allowed input shapes are:
        (1) DICT:       dictionary mapping variable names to values
        (2) ARGS:       2 dictionaries mapping variable names to values
        """
        # initialize the X variable that will be returned
        X: np.ndarray
        dX: np.ndarray
        # get the number of arguments and inputs
        argc: int = len(args)

        if argc == 2:
            arg_vars = args[0]
            arg_seed = args[1]
            if arg_vars is None:
                return (None,None)
            X = self._parse_vars_tbl(arg_vars)
            dX = self._parse_seed_tbl(arg_seed)
            # if dX was the default dict, tile dX to match T
            if X.shape[0] > 1 and dX.shape[0] == 1:
                dX = np.tile(dX, (X.shape[0], 1))
            # Return the arrays of argument values
            return (X,dX)
        # If we reach here, the contract was broken
        msg = f'argc={argc}'
        for arg in args:
            msg += f'{arg}'
        raise ValueError(f'Contract broken. Unrecognized input type for Fluxion._parse_dicts.  Details: \n{msg}')