def vpoint2point(vpoint):
    """Convert *vpoint* into a point in an N-dimensional Boolean space.

    The *vpoint* argument is a mapping from multi-dimensional arrays of
    variables to matching arrays of :math:`{0, 1}`.
    Elements from the values array will be converted to :math:`{0, 1}` using
    the `int` builtin function.

    For example::

       >>> from pyeda.boolalg.expr import exprvar
       >>> a = exprvar('a')
       >>> b00, b01, b10, b11 = map(exprvar, "b00 b01 b10 b11".split())
       >>> vpoint = {a: 0, ((b00, b01), (b10, b11)): ["01", "01"]}
       >>> point = vpoint2point(vpoint)
       >>> point[a], point[b00], point[b01], point[b10], point[b11]
       (0, 0, 1, 0, 1)

    The vpoint mapping is more concise if ``B`` is an farray::

       >>> from pyeda.boolalg.expr import exprvar
       >>> from pyeda.boolalg.bfarray import exprvars
       >>> a = exprvar('a')
       >>> B = exprvars('b', 2, 2)
       >>> vpoint = {a: 0, B: ["01", "01"]}
       >>> point = vpoint2point(vpoint)
       >>> point[a], point[B[0,0]], point[B[0,1]], point[B[1,0]], point[B[1,1]]
       (0, 0, 1, 0, 1)

    The shape of the array must match the shape of its values::

       >>> from pyeda.boolalg.bfarray import exprvars
       >>> X = exprvars('x', 2, 2)
       >>> vpoint = {X: "0101"}
       >>> point = vpoint2point(vpoint)
       Traceback (most recent call last):
           ...
       ValueError: expected 1:1 mapping from Variable => {0, 1}
    """
    point = dict()
    for v, val in vpoint.items():
        point.update(_flatten(v, val))
    return point