@@ -380,22 +380,6 @@ void Circuit::add_root(Node* new_root) {
380380 }
381381 roots.push_back (new_root);
382382
383-
384- if (new_root->layer != 0 ) {
385- // root layer's order might have changed:
386- // set ix back to those according to `roots` list.
387- // Since `roots` may contain duplicate node refs:
388- // we first set all ix to -1 to detect the duplicate refs.
389- for (size_t i = 0 ; i < roots.size (); ++i)
390- roots[i]->ix = -1 ;
391-
392- int root_idx = 0 ;
393- for (size_t i = 0 ; i < roots.size (); ++i) {
394- if (roots[i]->ix == -1 )
395- roots[i]->ix = root_idx++;
396- }
397- }
398-
399383 /*
400384 if (nb_layers() > 1) {
401385 if (roots.size() != layers[new_root->layer].size()) {
@@ -458,11 +442,12 @@ std::pair<Arrays, Arrays> Circuit::tensorize() {
458442 // per layer, a vector representing the layer
459443 Arrays csr_ndarrays;
460444
461- if (layers.size () == 1 )
462- // add node for roots
463- for (Node* root: roots)
464- add_node (root->dummy_parent ());
465-
445+ // add root layer on top
446+ for (std::size_t i=0 ; i<roots.size (); i++) {
447+ Node* root = roots[i]->dummy_parent ();
448+ root->hash = i;
449+ add_node (root);
450+ }
466451
467452 for (std::size_t i = 1 ; i < nb_layers (); ++i) {
468453 std::vector<long int > child_counts (layers[i].size (), 0 );
@@ -498,6 +483,9 @@ std::pair<Arrays, Arrays> Circuit::tensorize() {
498483 indices_ndarrays.push_back (indices_ndarray);
499484 csr_ndarrays.push_back (csr_ndarray);
500485 }
486+ // remove root layer again
487+ layers.pop_back ();
488+
501489 return std::make_pair (indices_ndarrays, csr_ndarrays);
502490}
503491
0 commit comments