<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _make_tooth_template(self):
 """ Builds a single tooth including the cylinder with tooth faces tangential to its circumference. """

        # parameters
        period_arc = (2 * pi) / self.tooth_count
        tooth_arc = period_arc * self.spacing_ratio  # the arc between faces at effective_radius
        outer_radius = self.effective_radius + (self.tooth_height / 2)
        face_angle_rad = radians(self.face_angle)

        # cartesian isosceles trapezoid dimensions
        side_angle = face_angle_rad - (tooth_arc / 2)
        side_tangent_radius = sin(face_angle_rad) * self.effective_radius
        extra_side_angle = side_angle + acos(side_tangent_radius / outer_radius)

        tooth = cadquery.Workplane('XY', origin=(0, 0, -self.width / 2)) \
            .moveTo(
                side_tangent_radius * cos(side_angle),
                side_tangent_radius * sin(side_angle)
            )
        opposite_point = (
            -side_tangent_radius * cos(side_angle),
            side_tangent_radius * sin(side_angle)
        )
        if self.face_angle:
            tooth = tooth.lineTo(*opposite_point)
            #tooth = tooth.threePointArc(
            #    (0, -side_tangent_radius),
            #    opposite_point
            #)
        tooth = tooth.lineTo(
                -cos(extra_side_angle) * outer_radius,
                sin(extra_side_angle) * outer_radius
            )
        opposite_point = (
            cos(extra_side_angle) * outer_radius,
            sin(extra_side_angle) * outer_radius
        )
        if self.flat_top:
            tooth = tooth.lineTo(*opposite_point)
        else:
            tooth = tooth.threePointArc((0, outer_radius), opposite_point)
        tooth = tooth.close().extrude(self.width)

        return tooth