<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def src_position(self, angle):
 """Return the source position at ``angle``. For an angle ``phi``, the source position is given by :: src(phi) = translation + rot_matrix(phi) * (-src_rad * src_to_det_init) where ``src_to_det_init`` is the initial unit vector pointing from source to detector. Parameters angle : float or `array-like` Angle(s) in radians describing the counter-clockwise rotation of source and detector. Returns ------- pos : `numpy.ndarray` Vector(s) pointing from the origin to the source. If ``angle`` is a single parameter, the returned array has shape ``(2,)``, otherwise ``angle.shape + (2,)``. See Also -------- det_refpoint Examples -------- With default arguments, the source starts at ``src_rad * (-e_y)`` and rotates to ``src_rad * e_x`` at 90 degrees: array([ 0., -2.]) True The method is vectorized, i.e., it can be called with multiple angles at once: True True """

        squeeze_out = (np.shape(angle) == ())
        angle = np.array(angle, dtype=float, copy=False, ndmin=1)

        # Initial vector from the rotation center to the source. It can be
        # computed this way since source and detector are at maximum distance,
        # i.e. the connecting line passes the origin.
        center_to_src_init = -self.src_radius * self.src_to_det_init
        pos_vec = (self.translation[None, :]
                   + self.rotation_matrix(angle).dot(center_to_src_init))
        if squeeze_out:
            pos_vec = pos_vec.squeeze()

        return pos_vec