class_docstr: Abstract base class for classes used to estimate a function's first
  derivatives, and deduce the dofs for a CubicTriInterpolator using a
  reduced HCT element formulation.
  
  Derived classes implement ``compute_df(self, **kwargs)``, returning
  ``np.vstack([dfx, dfy]).T`` where ``dfx, dfy`` are the estimation of the 2
  gradient coordinates.
class_docstr_tok: ["Abstract","base","class","for","classes","used","to","estimate","a","function","'s","first","derivatives",",","and","deduce","the","dofs","for","a","CubicTriInterpolator","using","a","reduced","HCT","element","formulation",".","Derived","classes","implement","``","compute_df","(","self",",","*","*","kwargs",")","``",",","returning","``","np.vstack","(","[","dfx",",","dfy","]",")",".T","``","where","``","dfx",",","dfy","``","are","the","estimation","of","the","2","gradient","coordinates","."]
docstr: Compute reduced-HCT elements degrees of freedom, from the gradient.
docstr_tok: ["Compute","reduced-HCT","elements","degrees","of","freedom",",","from","the","gradient","."]
code: def compute_dof_from_df(self):
      """
      Compute reduced-HCT elements degrees of freedom, from the gradient.
      """
      J = CubicTriInterpolator._get_jacobian(self._tris_pts)
      tri_z = self.z[self._triangles]
      tri_dz = self.dz[self._triangles]
      tri_dof = self.get_dof_vec(tri_z, tri_dz, J)
      return tri_dof
  
imports: import numpy
  from matplotlib import _api
  from matplotlib.tri import Triangulation
  from matplotlib.tri._trifinder import TriFinder
  from matplotlib.tri._tritools import TriAnalyzer
label_desc: Use image node_id 3 for calling the _DOF_estimator obj's underlying member method code with example usage: obj.compute_dof_from_df() and returns: tri_dof