<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def compute_sensori_effect(self, m):
 """ This function generates the end effector position at the end of the movement. .. note:: The duration of the movement is 1000*self.dt .. note:: To use basis functions rather than step functions, set :use_basis_functions: to 1 """

        if self.use_basis_functions:
            func = simulation.step(m, 1000*self.dt)
        else:
            traj = self.bf.trajectory(m).flatten()
            func = lambda t: traj[int(1000*self.dt * t)]

        states = simulation.simulate(self.n, self.x0, self.dt, func)
        last_state_cartesian = simulation.cartesian(self.n, states[-1])

        end_effector_pos = array([last_state_cartesian[self.n], last_state_cartesian[2*self.n]])
        end_effector_pos += self.noise * random.randn(len(end_effector_pos))
        return end_effector_pos