<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_transform(degree, weights_a, weights_b, weights_c):
 """Compute matrices corresponding to the de Casteljau algorithm. .. note:: This is a helper used only by :func:`_specialize_surface`. Applies the de Casteljau to the identity matrix, thus effectively caching the algorithm in a transformation matrix. .. note:: This is premature optimization. It's unclear if the time saved from "caching" one round of de Casteljau is cancelled out by the extra storage required for the 3 matrices. Args: degree (int):
 The degree of a candidate surface. weights_a (numpy.ndarray):
 Triple (1D array) of barycentric weights for a point in the reference triangle weights_b (numpy.ndarray):
 Triple (1D array) of barycentric weights for a point in the reference triangle weights_c (numpy.ndarray):
 Triple (1D array) of barycentric weights for a point in the reference triangle Returns: Mapping[int, numpy.ndarray]: Mapping from keys to the de Casteljau transformation mappings. The keys are ``0`` corresponding to ``weights_a``, ``1`` to ``weights_b`` and ``2`` to ``weights_c``. """

    num_nodes = ((degree + 1) * (degree + 2)) // 2
    id_mat = np.eye(num_nodes, order="F")
    # Pre-compute the matrices that do the reduction so we don't
    # have to **actually** perform the de Casteljau algorithm
    # every time.
    transform = {
        0: de_casteljau_one_round(id_mat, degree, *weights_a),
        1: de_casteljau_one_round(id_mat, degree, *weights_b),
        2: de_casteljau_one_round(id_mat, degree, *weights_c),
    }
    return transform