<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def as_XYZ100_w(whitepoint):
 """A convenience function for getting whitepoints. ``whitepoint`` can be either a string naming a standard illuminant (see :func:`standard_illuminant_XYZ100`), or else a whitepoint given explicitly as an array-like of XYZ values. We internally call this function anywhere you have to specify a whitepoint (e.g. for CIECAM02 or CIELAB conversions). Always uses the "standard" 2 degree observer. """

    if isinstance(whitepoint, str):
        return standard_illuminant_XYZ100(whitepoint)
    else:
        whitepoint = np.asarray(whitepoint, dtype=float)
        if whitepoint.shape[-1] != 3:
            raise ValueError("Bad whitepoint shape")
        return whitepoint