code: def curvature(self, T):
          
          seg_idx, t = self.T2t(T)
          seg = self[seg_idx]
          if np.isclose(t, 0) and (seg_idx != 0 or self.end==self.start):
              previous_seg_in_path = self._segments[
                  (seg_idx - 1) % len(self._segments)]
              if not seg.joins_smoothly_with(previous_seg_in_path):
                  return float('inf')
          elif np.isclose(t, 1) and (seg_idx != len(self) - 1 or
                                     self.end == self.start):
              next_seg_in_path = self._segments[
                  (seg_idx + 1) % len(self._segments)]
              if not next_seg_in_path.joins_smoothly_with(seg):
                  return float('inf')
          dz = self.derivative(T)
          ddz = self.derivative(T, n=2)
          dx, dy = dz.real, dz.imag
          ddx, ddy = ddz.real, ddz.imag
          return abs(dx*ddy - dy*ddx)/(dx*dx + dy*dy)**1.5
docs: returns the curvature of this Path object at T and outputs
          float('inf') if not differentiable at T.