def in_obiectum_ex_planum(
        rem: dict,
        pydictsep: str = '.',
        pylistsep: str = ' ') -> dict:
    """in_obiectum_planum Unflatten a nested python object

    Note: the pylistsep intentionally have no effect. The object will not
    try to convert back to list what in_obiectum_planum() converted.

    Trivia:
      - obiectum, https://en.wiktionary.org/wiki/obiectum#Latin
      - recursiōnem, https://en.wiktionary.org/wiki/recursio#Latin
      - praefīxum, https://en.wiktionary.org/wiki/praefixus#Latin
      - plānum, https://en.wiktionary.org/wiki/planus

    Args:
        rem (dict): The object to flatten
        pydictsep (pydictsep, optional): The separator for python dict keys
        pylistsep (pydictsep, optional): The separator for python list values

    Returns:
        [dict]: A flattened python dictionary

    Exemplōrum gratiā (et Python doctest, id est, testum automata):

    >>> testum1_inv = {'a0.a1.a2': 'va', 'b0': '1 2 3'}
    >>> testum1_inv5 = {'a0.a1.a2.a3.a4.a5': 'va', 'b0': '1 2 3'}
    >>> in_obiectum_ex_planum(testum1_inv)
    {'a0': {'a1': {'a2': 'va'}}, 'b0': '1 2 3'}

    >>> in_obiectum_ex_planum(testum1_inv5)
    {'a0': {'a1': {'a2': {'a3': {'a4': {'a5': 'va'}}}}}, 'b0': '1 2 3'}

    >>> testum1_inv_sep = {'a0->a1->a2': 'va', 'b0': '1 2 3'}
    >>> in_obiectum_ex_planum(testum1_inv_sep, pydictsep='->')
    {'a0': {'a1': {'a2': 'va'}}, 'b0': '1 2 3'}

    # Be strict about type
    >>> in_obiectum_ex_planum([1, 2, 3, 4])
    Traceback (most recent call last):
    ...
    TypeError: in_obiectum_ex_planum non dict<class 'list'>
    """
    resultatum = {}

    if not isinstance(rem, dict):
        raise TypeError('in_obiectum_ex_planum non dict' + str(type(rem)))

    if pylistsep and pylistsep != ' ':
        raise NotImplementedError(
            'in_obiectum_ex_planum pylistsep ' + pylistsep)

    for clavem, item in rem.items():
        clavem_partem = clavem.split(pydictsep)
        ad_hoc = resultatum
        for part in clavem_partem[:-1]:
            if part not in ad_hoc:
                ad_hoc[part] = {}
            ad_hoc = ad_hoc[part]
        ad_hoc[clavem_partem[-1]] = item
    return resultatum