You can learn a lot about this from the source code in FIAT/quadrature_schemes.py . In my distribution it is in /usr/lib/python3/dist-packages. Or you can find it at github . As explained in the comments, for triangles and tetrahedra and degree <= 6 a hard-coded rule is used, and you can find the exact rules later in the file. For tensor-product cells (intervals, quads, hexes), a tensor-product Gaussian quadrature rule is used, and for triangles and tets, a collapsed tensor-product Gaussian quadrature rule is used.