<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def axis_source(self):
 		"""The source for a given axis event. 		Axis events (scroll events) can be caused by a hardware item such as 		a scroll wheel or emulated from other input sources, such as two-finger 		or edge scrolling on a touchpad. 		If the source is :attr:`~libinput.constant.PointerAxisSource.FINGER`, 		libinput guarantees that a scroll sequence is terminated with a scroll 		value of 0. A caller may use this information to decide on whether 		kinetic scrolling should be triggered on this scroll sequence. The 		coordinate system is identical to the cursor movement, i.e. a scroll 		value of 1 represents the equivalent relative motion of 1. 		If the source is :attr:`~libinput.constant.PointerAxisSource.WHEEL`, 		no terminating event is guaranteed (though it may happen). Scrolling 		is in discrete steps, the value is the angle the wheel moved in 		degrees. The default is 15 degrees per wheel click, but some mice may 		have differently grained wheels. It is up to the caller how to 		interpret such different step sizes. 		If the source is :attr:`~libinput.constant.PointerAxisSource.CONTINUOUS`, 		no terminating event is guaranteed (though it may happen). The 		coordinate system is identical to the cursor movement, i.e. a scroll 		value of 1 represents the equivalent relative motion of 1. 		If the source is :attr:`~libinput.constant.PointerAxisSource.WHEEL_TILT`, 		no terminating event is guaranteed (though it may happen). Scrolling 		is in discrete steps and there is no physical equivalent for the value 		returned here. For backwards compatibility, the value of this 		property is identical to a single mouse wheel rotation by this device 		(see the documentation for 		:attr:`~libinput.constant.PointerAxisSource.WHEEL` above). Callers 		should not use this value but instead exclusively refer to the value 		returned by :meth:`get_axis_value_discrete`. 		For pointer events that are not of type 		:attr:`~libinput.constant.Event.POINTER_AXIS`, this property raises 		:exc:`AttributeError`. 		Returns: 			~libinput.constant.PointerAxisSource: The source for this axis 			event. 		Raises: 			AttributeError 		"""


		if self.type != EventType.POINTER_AXIS:
			raise AttributeError(_wrong_prop.format(self.type))
		return self._libinput.libinput_event_pointer_get_axis_source(
			self._handle)