<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def num_available_breakpoints(self, arm=False, thumb=False, ram=False, flash=False, hw=False):
 """Returns the number of available breakpoints of the specified type. If ``arm`` is set, gets the number of available ARM breakpoint units. If ``thumb`` is set, gets the number of available THUMB breakpoint units. If ``ram`` is set, gets the number of available software RAM breakpoint units. If ``flash`` is set, gets the number of available software flash breakpoint units. If ``hw`` is set, gets the number of available hardware breakpoint units. If a combination of the flags is given, then ``num_available_breakpoints()`` returns the number of breakpoints specified by the given flags. If no flags are specified, then the count of available breakpoint units is returned. Args: self (JLink):
 the ``JLink`` instance arm (bool):
 Boolean indicating to get number of ARM breakpoints. thumb (bool):
 Boolean indicating to get number of THUMB breakpoints. ram (bool):
 Boolean indicating to get number of SW RAM breakpoints. flash (bool):
 Boolean indicating to get number of Flash breakpoints. hw (bool):
 Boolean indicating to get number of Hardware breakpoints. Returns: The number of available breakpoint units of the specified type. """

        flags = [
            enums.JLinkBreakpoint.ARM,
            enums.JLinkBreakpoint.THUMB,
            enums.JLinkBreakpoint.SW_RAM,
            enums.JLinkBreakpoint.SW_FLASH,
            enums.JLinkBreakpoint.HW
        ]

        set_flags = [
            arm,
            thumb,
            ram,
            flash,
            hw
        ]

        if not any(set_flags):
            flags = enums.JLinkBreakpoint.ANY
        else:
            flags = list(f for i, f in enumerate(flags) if set_flags[i])
            flags = functools.reduce(operator.__or__, flags, 0)

        return self._dll.JLINKARM_GetNumBPUnits(flags)