# Compose circuit of different size

**URL:** <https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105>\
**Category:** PennyLane Help\
**Created:** [June 27, 2023, 8:27am UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105 "2023-06-27T08:27:33Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Maelle\_T](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/maelle_t/32/1757_2.png) [@Maelle\_T](https://discuss.pennylane.ai/u/Maelle_T)\
**Post date:** [June 27, 2023, 8:27am UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/1 "2023-06-27T08:27:33Z")

</div>

Hi !

I wanted to know if it is possible to compose circuits of different size in Pennylane.

For example I have two circuit, one of size 2 (the small one), and one of size 4 (the large one).

I want to construct the large one based on multiple repetition of the small one, but put on different wires.

```auto
@qml.qnode(dev) ##2-qubits circuit
def small_circuit(phi):
    qml.RZ(- np.pi, wires=1)
    qml.CNOT([1, 0])
    return [qml.expval(qml.PauliZ(j)) for j in range(2)]

@qml.qnode(dev) ##4-qubits circuit
def circuit(phi):
    #small_circuit(phi[0])(wires=0)
    #small_circuit(phi[0])(wires=3)
    # ...
    return [qml.expval(qml.PauliZ(j)) for j in range(4)]

```

So that the large circuit is a composition of the small one.

How is it possible ?

Thank you very much

---

<div class="post-metadata">

**Author:** ![wing\_chen](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/wing_chen/32/1703_2.png) [@wing\_chen](https://discuss.pennylane.ai/u/wing_chen)\
**Post date:** [June 27, 2023, 10:52am UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/2 "2023-06-27T10:52:04Z")

</div>

You make two devices:

```auto
dev4 = qml.device("default.qubit", wires=4)
dev2 = qml.device("default.qubit", wires=2)

```

Then make output from 4 qubit gate go to the 2 qubit gate twice. This sould work, unless you are worry about 2 vs 4 qubit entangelment.

---

<div class="post-metadata">

**Author:** ![isaacdevlugt](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/isaacdevlugt/32/1159_2.png) [@isaacdevlugt](https://discuss.pennylane.ai/u/isaacdevlugt)\
**Post date:** [June 27, 2023, 2:03pm UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/3 "2023-06-27T14:03:37Z")

</div>

Hey @Maelle_T! Welcome to the forum 🕶

You can totally do this in PennyLane, but how I would recommend doing it is slightly different. You can make use of quantum functions (basically python functions that aren’t decorated with `@qml.qnode`).

Here’s an example:

```auto
import pennylane as qml

def quantum_function(wires):
    qml.Hadamard(wires[0])
    qml.RX(0.1, wires[1]) 

```

I can then use `quantum_function` inside QNodes!

```auto
dev = qml.qnode("default.qubit", wires=4)

@qml.qnode(dev)
def qnode():
    quantum_function([0, 1])
    quantum_function([2, 3])
    return [qml.expval(qml.PauliZ(i)) for i in range(4)]

```

Essentially, you can think of quantum functions as building blocks just like PennyLane gates, layers, templates, etc., but you define them how you want!

Hope this helps!

---

<div class="post-metadata">

**Author:** ![Maelle\_T](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/maelle_t/32/1757_2.png) [@Maelle\_T](https://discuss.pennylane.ai/u/Maelle_T)\
**Post date:** [June 28, 2023, 8:28am UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/4 "2023-06-28T08:28:21Z")

</div>

How this is awesome 🙂 !!  
Thank you very much for your help !

---

<div class="post-metadata">

**Author:** ![isaacdevlugt](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/isaacdevlugt/32/1159_2.png) [@isaacdevlugt](https://discuss.pennylane.ai/u/isaacdevlugt)\
**Post date:** [June 28, 2023, 1:18pm UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/5 "2023-06-28T13:18:05Z")

</div>

Awesome! Glad I could help 🙂. If you don’t mind, could you mark my post as the solution to your question? It helps future people on the forum get the answer they need a little quicker 😁

---

<div class="post-metadata">

**Author:** ![Maelle\_T](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/maelle_t/32/1757_2.png) [@Maelle\_T](https://discuss.pennylane.ai/u/Maelle_T)\
**Post date:** [June 29, 2023, 8:20am UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/6 "2023-06-29T08:20:14Z")

</div>

Sure, it’s done !  
Thanks 💟

---

<div class="post-metadata">

**Author:** ![isaacdevlugt](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/isaacdevlugt/32/1159_2.png) [@isaacdevlugt](https://discuss.pennylane.ai/u/isaacdevlugt)\
**Post date:** [June 29, 2023, 2:10pm UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/7 "2023-06-29T14:10:48Z")

</div>

Thank you! 😃 Have a great day!

---

<div class="post-metadata">

**Author:** ![kevinkawchak](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/kevinkawchak/32/1801_2.png) [@kevinkawchak](https://discuss.pennylane.ai/u/kevinkawchak)\
**Post date:** [July 17, 2023, 8:33am UTC](https://discuss.pennylane.ai/t/compose-circuit-of-different-size/3105/8 "2023-07-17T08:33:01Z")

</div>

Thank you, I did not know that this was possible.
