{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "15a8b1c9",
   "metadata": {},
   "outputs": [],
   "source": [
    "using QuantumAlgebra\n",
    "using SymPy\n",
    "\n",
    "dispnormal(x) = display(\"text/latex\",\"\\$ $(latex(x)) \\\\quad\\\\to\\\\quad $(latex(normal_form(x))) \\$\")\n",
    "acomm(A,B) = A*B + B*A;"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d3e6611f",
   "metadata": {},
   "outputs": [],
   "source": [
    "ξp = param(:ξ_p,'n')\n",
    "ϕ  = param(:ϕ,'r',:i);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2b467fba",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/latex": [
       "${{\\xi}_p^{*}}^{2} {{\\phi}_{2}}^{2} + 2{\\xi}_p^{*} {\\xi}_p {{\\phi}_{2}}^{2} + {{\\xi}_p}^{2} {{\\phi}_{2}}^{2} + {{\\phi}_{1}}^{2} + {{\\phi}_{2}}^{2} + 2{\\xi}_p^{*} {\\phi}_{1} {\\phi}_{2}{a}_{1}^\\dagger + 2{\\xi}_p {\\phi}_{1} {\\phi}_{2}{a}_{1}^\\dagger + 2{\\xi}_p^{*} {{\\phi}_{2}}^{2}{a}_{2}^\\dagger + 2{\\xi}_p {{\\phi}_{2}}^{2}{a}_{2}^\\dagger + 2{\\xi}_p^{*} {\\phi}_{1} {\\phi}_{2}{a}_{1} + 2{\\xi}_p {\\phi}_{1} {\\phi}_{2}{a}_{1} + 2{\\xi}_p^{*} {{\\phi}_{2}}^{2}{a}_{2} + 2{\\xi}_p {{\\phi}_{2}}^{2}{a}_{2} + {{\\phi}_{1}}^{2}{{a}_{1}^\\dagger}^{2} + 2{\\phi}_{1} {\\phi}_{2}{a}_{1}^\\dagger {a}_{2}^\\dagger + 2{{\\phi}_{1}}^{2}{a}_{1}^\\dagger {a}_{1} + 2{\\phi}_{1} {\\phi}_{2}{a}_{1}^\\dagger {a}_{2} + {{\\phi}_{2}}^{2}{{a}_{2}^\\dagger}^{2} + 2{\\phi}_{1} {\\phi}_{2}{a}_{2}^\\dagger {a}_{1} + 2{{\\phi}_{2}}^{2}{a}_{2}^\\dagger {a}_{2} + {{\\phi}_{1}}^{2}{{a}_{1}}^{2} + 2{\\phi}_{1} {\\phi}_{2}{a}_{1} {a}_{2} + {{\\phi}_{2}}^{2}{{a}_{2}}^{2}$"
      ],
      "text/plain": [
       "ξ_p*² ϕ(2)²  + 2 ξ_p* ξ_p ϕ(2)²  + ξ_p² ϕ(2)²  + ϕ(1)²  + ϕ(2)²  + 2 ξ_p* ϕ(1) ϕ(2) a†(1) + 2 ξ_p ϕ(1) ϕ(2) a†(1) + 2 ξ_p* ϕ(2)² a†(2) + 2 ξ_p ϕ(2)² a†(2) + 2 ξ_p* ϕ(1) ϕ(2) a(1) + 2 ξ_p ϕ(1) ϕ(2) a(1) + 2 ξ_p* ϕ(2)² a(2) + 2 ξ_p ϕ(2)² a(2) + ϕ(1)² a†(1)² + 2 ϕ(1) ϕ(2) a†(1) a†(2) + 2 ϕ(1)² a†(1) a(1) + 2 ϕ(1) ϕ(2) a†(1) a(2) + ϕ(2)² a†(2)² + 2 ϕ(1) ϕ(2) a†(2) a(1) + 2 ϕ(2)² a†(2) a(2) + ϕ(1)² a(1)² + 2 ϕ(1) ϕ(2) a(1) a(2) + ϕ(2)² a(2)²"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "phi2 = normal_form((param(:ϕ,:1)* (a(1) + a(1)') + param(:ϕ,:2)* (a(2) + a(2)' + ξp + ξp'))^2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b1fb740b",
   "metadata": {},
   "outputs": [],
   "source": [
    "P = Vector{QuantumAlgebra.Param}[]\n",
    "B = Vector{QuantumAlgebra.BaseOperator}[]\n",
    "T = Vector{Int64}();\n",
    "\n",
    "###\n",
    "for (s,t) in phi2.terms\n",
    "    if !isempty(s.bares)\n",
    "        check0 = adjoint(s.bares).v\n",
    "        check1 = reshape([v::QuantumAlgebra.BaseOperator for v in adjoint(s.bares.v)],length(s.bares.v),)\n",
    "        if check0 ∉ B && check1 ∉ B\n",
    "            push!(B,s.bares.v)\n",
    "            push!(P,s.params)\n",
    "            push!(T,t)\n",
    "        end\n",
    "    end\n",
    "end\n",
    "\n",
    "###\n",
    "BB = [QuantumAlgebra.BaseOpProduct(b) for b in unique(B)]\n",
    "\n",
    "Punique = [P[findall(x->x==b.v, B)] for b in BB]\n",
    "PP = [[QuantumAlgebra.QuTerm(0, QuantumAlgebra.δ[], pint, QuantumAlgebra.ExpVal[], QuantumAlgebra.Corr[], QuantumAlgebra.BaseOpProduct()) for pint in pext] for pext in Punique]\n",
    "\n",
    "TT = [T[findall(x->x==b.v, B)] for b in BB];"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "14a0b581",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Vector{QuantumAlgebra.BaseOpProduct}:\n",
       " a†(1)²\n",
       " a(2)²\n",
       " a(2)\n",
       " a†(2) a(1)\n",
       " a(1) a(2)\n",
       " a(1)\n",
       " a†(1) a(1)\n",
       " a†(2) a(2)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "BB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cb239da9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Vector{Vector{QuantumAlgebra.QuTerm}}:\n",
       " [ϕ(1)² ]\n",
       " [ϕ(2)² ]\n",
       " [ξ_p ϕ(2)² , ξ_p* ϕ(2)² ]\n",
       " [ϕ(1) ϕ(2) ]\n",
       " [ϕ(1) ϕ(2) ]\n",
       " [ξ_p ϕ(1) ϕ(2) , ξ_p* ϕ(1) ϕ(2) ]\n",
       " [ϕ(1)² ]\n",
       " [ϕ(2)² ]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PP"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8053ca79",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Vector{Vector{Int64}}:\n",
       " [1]\n",
       " [1]\n",
       " [2, 2]\n",
       " [2]\n",
       " [2]\n",
       " [2, 2]\n",
       " [2]\n",
       " [2]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "TT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a1c1650b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "2d1057d0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Vector{QuExpr}:\n",
       " ϕ(1)² \n",
       " ϕ(2)² \n",
       " 2 ξ_p* ϕ(2)²  + 2 ξ_p ϕ(2)² \n",
       " 2 ϕ(1) ϕ(2) \n",
       " 2 ϕ(1) ϕ(2) \n",
       " 2 ξ_p* ϕ(1) ϕ(2)  + 2 ξ_p ϕ(1) ϕ(2) \n",
       " 2 ϕ(1)² \n",
       " 2 ϕ(2)² "
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "AA = Vector{QuantumAlgebra.QuExpr}()\n",
    "for (pext,text) in zip(PP,TT)\n",
    "    A = QuExpr()\n",
    "    for (pint,tint) in zip(pext,text)\n",
    "        QuantumAlgebra._add_with_auto_order!(A,pint,tint)\n",
    "    end\n",
    "    push!(AA,A)\n",
    "end\n",
    "\n",
    "AA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "6b06e547",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Vector{QuantumAlgebra.BaseOpProduct}:\n",
       " a†(1)²\n",
       " a(2)²\n",
       " a(2)\n",
       " a†(2) a(1)\n",
       " a(1) a(2)\n",
       " a(1)\n",
       " a†(1) a(1)\n",
       " a†(2) a(2)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "BB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "548188cb",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3a09f9a4",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4ebe9442",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2b03d42f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8349c245",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "521aa480",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "${{\\xi}_p^{*}}^{4} {{\\phi}_{2}}^{4} + 4{{\\xi}_p^{*}}^{3} {\\xi}_p {{\\phi}_{2}}^{4} + 6{{\\xi}_p^{*}}^{2} {{\\xi}_p}^{2} {{\\phi}_{2}}^{4} + 6{{\\xi}_p^{*}}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2} + 6{{\\xi}_p^{*}}^{2} {{\\phi}_{2}}^{4} + 4{\\xi}_p^{*} {{\\xi}_p}^{3} {{\\phi}_{2}}^{4} + 12{\\xi}_p^{*} {\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2} + 12{\\xi}_p^{*} {\\xi}_p {{\\phi}_{2}}^{4} + {{\\xi}_p}^{4} {{\\phi}_{2}}^{4} + 6{{\\xi}_p}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2} + 6{{\\xi}_p}^{2} {{\\phi}_{2}}^{4} + 3{{\\phi}_{1}}^{4} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2} + 3{{\\phi}_{2}}^{4} + 4{{\\xi}_p^{*}}^{3} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger + 12{{\\xi}_p^{*}}^{2} {\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger + 12{\\xi}_p^{*} {{\\xi}_p}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger + 12{\\xi}_p^{*} {{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger + 12{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger + 4{{\\xi}_p}^{3} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger + 12{\\xi}_p {{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger + 12{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger + 4{{\\xi}_p^{*}}^{3} {{\\phi}_{2}}^{4}{a}_{2}^\\dagger + 12{{\\xi}_p^{*}}^{2} {\\xi}_p {{\\phi}_{2}}^{4}{a}_{2}^\\dagger + 12{\\xi}_p^{*} {{\\xi}_p}^{2} {{\\phi}_{2}}^{4}{a}_{2}^\\dagger + 12{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2}^\\dagger + 12{\\xi}_p^{*} {{\\phi}_{2}}^{4}{a}_{2}^\\dagger + 4{{\\xi}_p}^{3} {{\\phi}_{2}}^{4}{a}_{2}^\\dagger + 12{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2}^\\dagger + 12{\\xi}_p {{\\phi}_{2}}^{4}{a}_{2}^\\dagger + 4{{\\xi}_p^{*}}^{3} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} + 12{{\\xi}_p^{*}}^{2} {\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} + 12{\\xi}_p^{*} {{\\xi}_p}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} + 12{\\xi}_p^{*} {{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1} + 12{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} + 4{{\\xi}_p}^{3} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} + 12{\\xi}_p {{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1} + 12{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} + 4{{\\xi}_p^{*}}^{3} {{\\phi}_{2}}^{4}{a}_{2} + 12{{\\xi}_p^{*}}^{2} {\\xi}_p {{\\phi}_{2}}^{4}{a}_{2} + 12{\\xi}_p^{*} {{\\xi}_p}^{2} {{\\phi}_{2}}^{4}{a}_{2} + 12{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2} + 12{\\xi}_p^{*} {{\\phi}_{2}}^{4}{a}_{2} + 4{{\\xi}_p}^{3} {{\\phi}_{2}}^{4}{a}_{2} + 12{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2} + 12{\\xi}_p {{\\phi}_{2}}^{4}{a}_{2} + 6{{\\xi}_p^{*}}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} + 12{\\xi}_p^{*} {\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} + 6{{\\xi}_p}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} + 6{{\\phi}_{1}}^{4}{{a}_{1}^\\dagger}^{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} + 12{{\\xi}_p^{*}}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2}^\\dagger + 24{\\xi}_p^{*} {\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2}^\\dagger + 12{{\\xi}_p}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2}^\\dagger + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger {a}_{2}^\\dagger + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2}^\\dagger + 12{{\\xi}_p^{*}}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{1} + 24{\\xi}_p^{*} {\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{1} + 12{{\\xi}_p}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{1} + 12{{\\phi}_{1}}^{4}{a}_{1}^\\dagger {a}_{1} + 12{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{1} + 12{{\\xi}_p^{*}}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2} + 24{\\xi}_p^{*} {\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2} + 12{{\\xi}_p}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2} + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger {a}_{2} + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2} + 6{{\\xi}_p^{*}}^{2} {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{2} + 12{\\xi}_p^{*} {\\xi}_p {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{2} + 6{{\\xi}_p}^{2} {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{2}^\\dagger}^{2} + 6{{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{2} + 12{{\\xi}_p^{*}}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{2}^\\dagger {a}_{1} + 24{\\xi}_p^{*} {\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{2}^\\dagger {a}_{1} + 12{{\\xi}_p}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{2}^\\dagger {a}_{1} + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{2}^\\dagger {a}_{1} + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{2}^\\dagger {a}_{1} + 12{{\\xi}_p^{*}}^{2} {{\\phi}_{2}}^{4}{a}_{2}^\\dagger {a}_{2} + 24{\\xi}_p^{*} {\\xi}_p {{\\phi}_{2}}^{4}{a}_{2}^\\dagger {a}_{2} + 12{{\\xi}_p}^{2} {{\\phi}_{2}}^{4}{a}_{2}^\\dagger {a}_{2} + 12{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2}^\\dagger {a}_{2} + 12{{\\phi}_{2}}^{4}{a}_{2}^\\dagger {a}_{2} + 6{{\\xi}_p^{*}}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}}^{2} + 12{\\xi}_p^{*} {\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}}^{2} + 6{{\\xi}_p}^{2} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}}^{2} + 6{{\\phi}_{1}}^{4}{{a}_{1}}^{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}}^{2} + 12{{\\xi}_p^{*}}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} {a}_{2} + 24{\\xi}_p^{*} {\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} {a}_{2} + 12{{\\xi}_p}^{2} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} {a}_{2} + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1} {a}_{2} + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} {a}_{2} + 6{{\\xi}_p^{*}}^{2} {{\\phi}_{2}}^{4}{{a}_{2}}^{2} + 12{\\xi}_p^{*} {\\xi}_p {{\\phi}_{2}}^{4}{{a}_{2}}^{2} + 6{{\\xi}_p}^{2} {{\\phi}_{2}}^{4}{{a}_{2}}^{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{2}}^{2} + 6{{\\phi}_{2}}^{4}{{a}_{2}}^{2} + 4{\\xi}_p^{*} {{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{3} + 4{\\xi}_p {{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{3} + 12{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} {a}_{2}^\\dagger + 12{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} {a}_{2}^\\dagger + 12{\\xi}_p^{*} {{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{2} {a}_{1} + 12{\\xi}_p {{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{2} {a}_{1} + 12{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} {a}_{2} + 12{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} {a}_{2} + 12{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {{a}_{2}^\\dagger}^{2} + 12{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {{a}_{2}^\\dagger}^{2} + 24{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{2}^\\dagger {a}_{1} + 24{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{2}^\\dagger {a}_{1} + 24{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2}^\\dagger {a}_{2} + 24{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2}^\\dagger {a}_{2} + 12{\\xi}_p^{*} {{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger {{a}_{1}}^{2} + 12{\\xi}_p {{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger {{a}_{1}}^{2} + 24{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{1} {a}_{2} + 24{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{1} {a}_{2} + 12{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {{a}_{2}}^{2} + 12{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {{a}_{2}}^{2} + 4{\\xi}_p^{*} {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{3} + 4{\\xi}_p {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{3} + 12{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{{a}_{2}^\\dagger}^{2} {a}_{1} + 12{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{{a}_{2}^\\dagger}^{2} {a}_{1} + 12{\\xi}_p^{*} {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{2} {a}_{2} + 12{\\xi}_p {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{2} {a}_{2} + 12{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2}^\\dagger {{a}_{1}}^{2} + 12{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2}^\\dagger {{a}_{1}}^{2} + 24{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{2}^\\dagger {a}_{1} {a}_{2} + 24{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{2}^\\dagger {a}_{1} {a}_{2} + 12{\\xi}_p^{*} {{\\phi}_{2}}^{4}{a}_{2}^\\dagger {{a}_{2}}^{2} + 12{\\xi}_p {{\\phi}_{2}}^{4}{a}_{2}^\\dagger {{a}_{2}}^{2} + 4{\\xi}_p^{*} {{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}}^{3} + 4{\\xi}_p {{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}}^{3} + 12{\\xi}_p^{*} {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}}^{2} {a}_{2} + 12{\\xi}_p {{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}}^{2} {a}_{2} + 12{\\xi}_p^{*} {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} {{a}_{2}}^{2} + 12{\\xi}_p {\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} {{a}_{2}}^{2} + 4{\\xi}_p^{*} {{\\phi}_{2}}^{4}{{a}_{2}}^{3} + 4{\\xi}_p {{\\phi}_{2}}^{4}{{a}_{2}}^{3} + {{\\phi}_{1}}^{4}{{a}_{1}^\\dagger}^{4} + 4{{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{3} {a}_{2}^\\dagger + 4{{\\phi}_{1}}^{4}{{a}_{1}^\\dagger}^{3} {a}_{1} + 4{{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{3} {a}_{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} {{a}_{2}^\\dagger}^{2} + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{2} {a}_{2}^\\dagger {a}_{1} + 12{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} {a}_{2}^\\dagger {a}_{2} + 6{{\\phi}_{1}}^{4}{{a}_{1}^\\dagger}^{2} {{a}_{1}}^{2} + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}^\\dagger}^{2} {a}_{1} {a}_{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}^\\dagger}^{2} {{a}_{2}}^{2} + 4{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {{a}_{2}^\\dagger}^{3} + 12{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {{a}_{2}^\\dagger}^{2} {a}_{1} + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {{a}_{2}^\\dagger}^{2} {a}_{2} + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger {a}_{2}^\\dagger {{a}_{1}}^{2} + 24{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{2}^\\dagger {a}_{1} {a}_{2} + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {a}_{2}^\\dagger {{a}_{2}}^{2} + 4{{\\phi}_{1}}^{4}{a}_{1}^\\dagger {{a}_{1}}^{3} + 12{{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{1}^\\dagger {{a}_{1}}^{2} {a}_{2} + 12{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{1}^\\dagger {a}_{1} {{a}_{2}}^{2} + 4{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1}^\\dagger {{a}_{2}}^{3} + {{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{4} + 4{\\phi}_{1} {{\\phi}_{2}}^{3}{{a}_{2}^\\dagger}^{3} {a}_{1} + 4{{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{3} {a}_{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{2}^\\dagger}^{2} {{a}_{1}}^{2} + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{{a}_{2}^\\dagger}^{2} {a}_{1} {a}_{2} + 6{{\\phi}_{2}}^{4}{{a}_{2}^\\dagger}^{2} {{a}_{2}}^{2} + 4{{\\phi}_{1}}^{3} {\\phi}_{2}{a}_{2}^\\dagger {{a}_{1}}^{3} + 12{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{a}_{2}^\\dagger {{a}_{1}}^{2} {a}_{2} + 12{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{2}^\\dagger {a}_{1} {{a}_{2}}^{2} + 4{{\\phi}_{2}}^{4}{a}_{2}^\\dagger {{a}_{2}}^{3} + {{\\phi}_{1}}^{4}{{a}_{1}}^{4} + 4{{\\phi}_{1}}^{3} {\\phi}_{2}{{a}_{1}}^{3} {a}_{2} + 6{{\\phi}_{1}}^{2} {{\\phi}_{2}}^{2}{{a}_{1}}^{2} {{a}_{2}}^{2} + 4{\\phi}_{1} {{\\phi}_{2}}^{3}{a}_{1} {{a}_{2}}^{3} + {{\\phi}_{2}}^{4}{{a}_{2}}^{4}$"
      ],
      "text/plain": [
       "ξ_p*⁴ ϕ(2)⁴  + 4 ξ_p*³ ξ_p ϕ(2)⁴  + 6 ξ_p*² ξ_p² ϕ(2)⁴  + 6 ξ_p*² ϕ(1)² ϕ(2)²  + 6 ξ_p*² ϕ(2)⁴  + 4 ξ_p* ξ_p³ ϕ(2)⁴  + 12 ξ_p* ξ_p ϕ(1)² ϕ(2)²  + 12 ξ_p* ξ_p ϕ(2)⁴  + ξ_p⁴ ϕ(2)⁴  + 6 ξ_p² ϕ(1)² ϕ(2)²  + 6 ξ_p² ϕ(2)⁴  + 3 ϕ(1)⁴  + 6 ϕ(1)² ϕ(2)²  + 3 ϕ(2)⁴  + 4 ξ_p*³ ϕ(1) ϕ(2)³ a†(1) + 12 ξ_p*² ξ_p ϕ(1) ϕ(2)³ a†(1) + 12 ξ_p* ξ_p² ϕ(1) ϕ(2)³ a†(1) + 12 ξ_p* ϕ(1)³ ϕ(2) a†(1) + 12 ξ_p* ϕ(1) ϕ(2)³ a†(1) + 4 ξ_p³ ϕ(1) ϕ(2)³ a†(1) + 12 ξ_p ϕ(1)³ ϕ(2) a†(1) + 12 ξ_p ϕ(1) ϕ(2)³ a†(1) + 4 ξ_p*³ ϕ(2)⁴ a†(2) + 12 ξ_p*² ξ_p ϕ(2)⁴ a†(2) + 12 ξ_p* ξ_p² ϕ(2)⁴ a†(2) + 12 ξ_p* ϕ(1)² ϕ(2)² a†(2) + 12 ξ_p* ϕ(2)⁴ a†(2) + 4 ξ_p³ ϕ(2)⁴ a†(2) + 12 ξ_p ϕ(1)² ϕ(2)² a†(2) + 12 ξ_p ϕ(2)⁴ a†(2) + 4 ξ_p*³ ϕ(1) ϕ(2)³ a(1) + 12 ξ_p*² ξ_p ϕ(1) ϕ(2)³ a(1) + 12 ξ_p* ξ_p² ϕ(1) ϕ(2)³ a(1) + 12 ξ_p* ϕ(1)³ ϕ(2) a(1) + 12 ξ_p* ϕ(1) ϕ(2)³ a(1) + 4 ξ_p³ ϕ(1) ϕ(2)³ a(1) + 12 ξ_p ϕ(1)³ ϕ(2) a(1) + 12 ξ_p ϕ(1) ϕ(2)³ a(1) + 4 ξ_p*³ ϕ(2)⁴ a(2) + 12 ξ_p*² ξ_p ϕ(2)⁴ a(2) + 12 ξ_p* ξ_p² ϕ(2)⁴ a(2) + 12 ξ_p* ϕ(1)² ϕ(2)² a(2) + 12 ξ_p* ϕ(2)⁴ a(2) + 4 ξ_p³ ϕ(2)⁴ a(2) + 12 ξ_p ϕ(1)² ϕ(2)² a(2) + 12 ξ_p ϕ(2)⁴ a(2) + 6 ξ_p*² ϕ(1)² ϕ(2)² a†(1)² + 12 ξ_p* ξ_p ϕ(1)² ϕ(2)² a†(1)² + 6 ξ_p² ϕ(1)² ϕ(2)² a†(1)² + 6 ϕ(1)⁴ a†(1)² + 6 ϕ(1)² ϕ(2)² a†(1)² + 12 ξ_p*² ϕ(1) ϕ(2)³ a†(1) a†(2) + 24 ξ_p* ξ_p ϕ(1) ϕ(2)³ a†(1) a†(2) + 12 ξ_p² ϕ(1) ϕ(2)³ a†(1) a†(2) + 12 ϕ(1)³ ϕ(2) a†(1) a†(2) + 12 ϕ(1) ϕ(2)³ a†(1) a†(2) + 12 ξ_p*² ϕ(1)² ϕ(2)² a†(1) a(1) + 24 ξ_p* ξ_p ϕ(1)² ϕ(2)² a†(1) a(1) + 12 ξ_p² ϕ(1)² ϕ(2)² a†(1) a(1) + 12 ϕ(1)⁴ a†(1) a(1) + 12 ϕ(1)² ϕ(2)² a†(1) a(1) + 12 ξ_p*² ϕ(1) ϕ(2)³ a†(1) a(2) + 24 ξ_p* ξ_p ϕ(1) ϕ(2)³ a†(1) a(2) + 12 ξ_p² ϕ(1) ϕ(2)³ a†(1) a(2) + 12 ϕ(1)³ ϕ(2) a†(1) a(2) + 12 ϕ(1) ϕ(2)³ a†(1) a(2) + 6 ξ_p*² ϕ(2)⁴ a†(2)² + 12 ξ_p* ξ_p ϕ(2)⁴ a†(2)² + 6 ξ_p² ϕ(2)⁴ a†(2)² + 6 ϕ(1)² ϕ(2)² a†(2)² + 6 ϕ(2)⁴ a†(2)² + 12 ξ_p*² ϕ(1) ϕ(2)³ a†(2) a(1) + 24 ξ_p* ξ_p ϕ(1) ϕ(2)³ a†(2) a(1) + 12 ξ_p² ϕ(1) ϕ(2)³ a†(2) a(1) + 12 ϕ(1)³ ϕ(2) a†(2) a(1) + 12 ϕ(1) ϕ(2)³ a†(2) a(1) + 12 ξ_p*² ϕ(2)⁴ a†(2) a(2) + 24 ξ_p* ξ_p ϕ(2)⁴ a†(2) a(2) + 12 ξ_p² ϕ(2)⁴ a†(2) a(2) + 12 ϕ(1)² ϕ(2)² a†(2) a(2) + 12 ϕ(2)⁴ a†(2) a(2) + 6 ξ_p*² ϕ(1)² ϕ(2)² a(1)² + 12 ξ_p* ξ_p ϕ(1)² ϕ(2)² a(1)² + 6 ξ_p² ϕ(1)² ϕ(2)² a(1)² + 6 ϕ(1)⁴ a(1)² + 6 ϕ(1)² ϕ(2)² a(1)² + 12 ξ_p*² ϕ(1) ϕ(2)³ a(1) a(2) + 24 ξ_p* ξ_p ϕ(1) ϕ(2)³ a(1) a(2) + 12 ξ_p² ϕ(1) ϕ(2)³ a(1) a(2) + 12 ϕ(1)³ ϕ(2) a(1) a(2) + 12 ϕ(1) ϕ(2)³ a(1) a(2) + 6 ξ_p*² ϕ(2)⁴ a(2)² + 12 ξ_p* ξ_p ϕ(2)⁴ a(2)² + 6 ξ_p² ϕ(2)⁴ a(2)² + 6 ϕ(1)² ϕ(2)² a(2)² + 6 ϕ(2)⁴ a(2)² + 4 ξ_p* ϕ(1)³ ϕ(2) a†(1)³ + 4 ξ_p ϕ(1)³ ϕ(2) a†(1)³ + 12 ξ_p* ϕ(1)² ϕ(2)² a†(1)² a†(2) + 12 ξ_p ϕ(1)² ϕ(2)² a†(1)² a†(2) + 12 ξ_p* ϕ(1)³ ϕ(2) a†(1)² a(1) + 12 ξ_p ϕ(1)³ ϕ(2) a†(1)² a(1) + 12 ξ_p* ϕ(1)² ϕ(2)² a†(1)² a(2) + 12 ξ_p ϕ(1)² ϕ(2)² a†(1)² a(2) + 12 ξ_p* ϕ(1) ϕ(2)³ a†(1) a†(2)² + 12 ξ_p ϕ(1) ϕ(2)³ a†(1) a†(2)² + 24 ξ_p* ϕ(1)² ϕ(2)² a†(1) a†(2) a(1) + 24 ξ_p ϕ(1)² ϕ(2)² a†(1) a†(2) a(1) + 24 ξ_p* ϕ(1) ϕ(2)³ a†(1) a†(2) a(2) + 24 ξ_p ϕ(1) ϕ(2)³ a†(1) a†(2) a(2) + 12 ξ_p* ϕ(1)³ ϕ(2) a†(1) a(1)² + 12 ξ_p ϕ(1)³ ϕ(2) a†(1) a(1)² + 24 ξ_p* ϕ(1)² ϕ(2)² a†(1) a(1) a(2) + 24 ξ_p ϕ(1)² ϕ(2)² a†(1) a(1) a(2) + 12 ξ_p* ϕ(1) ϕ(2)³ a†(1) a(2)² + 12 ξ_p ϕ(1) ϕ(2)³ a†(1) a(2)² + 4 ξ_p* ϕ(2)⁴ a†(2)³ + 4 ξ_p ϕ(2)⁴ a†(2)³ + 12 ξ_p* ϕ(1) ϕ(2)³ a†(2)² a(1) + 12 ξ_p ϕ(1) ϕ(2)³ a†(2)² a(1) + 12 ξ_p* ϕ(2)⁴ a†(2)² a(2) + 12 ξ_p ϕ(2)⁴ a†(2)² a(2) + 12 ξ_p* ϕ(1)² ϕ(2)² a†(2) a(1)² + 12 ξ_p ϕ(1)² ϕ(2)² a†(2) a(1)² + 24 ξ_p* ϕ(1) ϕ(2)³ a†(2) a(1) a(2) + 24 ξ_p ϕ(1) ϕ(2)³ a†(2) a(1) a(2) + 12 ξ_p* ϕ(2)⁴ a†(2) a(2)² + 12 ξ_p ϕ(2)⁴ a†(2) a(2)² + 4 ξ_p* ϕ(1)³ ϕ(2) a(1)³ + 4 ξ_p ϕ(1)³ ϕ(2) a(1)³ + 12 ξ_p* ϕ(1)² ϕ(2)² a(1)² a(2) + 12 ξ_p ϕ(1)² ϕ(2)² a(1)² a(2) + 12 ξ_p* ϕ(1) ϕ(2)³ a(1) a(2)² + 12 ξ_p ϕ(1) ϕ(2)³ a(1) a(2)² + 4 ξ_p* ϕ(2)⁴ a(2)³ + 4 ξ_p ϕ(2)⁴ a(2)³ + ϕ(1)⁴ a†(1)⁴ + 4 ϕ(1)³ ϕ(2) a†(1)³ a†(2) + 4 ϕ(1)⁴ a†(1)³ a(1) + 4 ϕ(1)³ ϕ(2) a†(1)³ a(2) + 6 ϕ(1)² ϕ(2)² a†(1)² a†(2)² + 12 ϕ(1)³ ϕ(2) a†(1)² a†(2) a(1) + 12 ϕ(1)² ϕ(2)² a†(1)² a†(2) a(2) + 6 ϕ(1)⁴ a†(1)² a(1)² + 12 ϕ(1)³ ϕ(2) a†(1)² a(1) a(2) + 6 ϕ(1)² ϕ(2)² a†(1)² a(2)² + 4 ϕ(1) ϕ(2)³ a†(1) a†(2)³ + 12 ϕ(1)² ϕ(2)² a†(1) a†(2)² a(1) + 12 ϕ(1) ϕ(2)³ a†(1) a†(2)² a(2) + 12 ϕ(1)³ ϕ(2) a†(1) a†(2) a(1)² + 24 ϕ(1)² ϕ(2)² a†(1) a†(2) a(1) a(2) + 12 ϕ(1) ϕ(2)³ a†(1) a†(2) a(2)² + 4 ϕ(1)⁴ a†(1) a(1)³ + 12 ϕ(1)³ ϕ(2) a†(1) a(1)² a(2) + 12 ϕ(1)² ϕ(2)² a†(1) a(1) a(2)² + 4 ϕ(1) ϕ(2)³ a†(1) a(2)³ + ϕ(2)⁴ a†(2)⁴ + 4 ϕ(1) ϕ(2)³ a†(2)³ a(1) + 4 ϕ(2)⁴ a†(2)³ a(2) + 6 ϕ(1)² ϕ(2)² a†(2)² a(1)² + 12 ϕ(1) ϕ(2)³ a†(2)² a(1) a(2) + 6 ϕ(2)⁴ a†(2)² a(2)² + 4 ϕ(1)³ ϕ(2) a†(2) a(1)³ + 12 ϕ(1)² ϕ(2)² a†(2) a(1)² a(2) + 12 ϕ(1) ϕ(2)³ a†(2) a(1) a(2)² + 4 ϕ(2)⁴ a†(2) a(2)³ + ϕ(1)⁴ a(1)⁴ + 4 ϕ(1)³ ϕ(2) a(1)³ a(2) + 6 ϕ(1)² ϕ(2)² a(1)² a(2)² + 4 ϕ(1) ϕ(2)³ a(1) a(2)³ + ϕ(2)⁴ a(2)⁴"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "phi4 = normal_form((param(:ϕ,:1)* (a(1) + a(1)') + param(:ϕ,:2)* (a(2) + a(2)' + ξp + ξp'))^4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "aaf28bec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "171"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "phi4.terms.count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "515b72ab",
   "metadata": {},
   "outputs": [],
   "source": [
    "P = Vector{QuantumAlgebra.Param}[]\n",
    "B = Vector{QuantumAlgebra.BaseOperator}[]\n",
    "T = Vector{Int64}();\n",
    "\n",
    "###\n",
    "for (s,t) in phi4.terms\n",
    "    if !isempty(s.bares)\n",
    "        check0 = adjoint(s.bares).v\n",
    "        check1 = reshape([v::QuantumAlgebra.BaseOperator for v in adjoint(s.bares.v)],length(s.bares.v),)\n",
    "        if check0 ∉ B && check1 ∉ B\n",
    "            push!(B,s.bares.v)\n",
    "            push!(P,s.params)\n",
    "            push!(T,t)\n",
    "        end\n",
    "    end\n",
    "end\n",
    "\n",
    "###\n",
    "BB = [QuantumAlgebra.BaseOpProduct(b) for b in unique(B)]\n",
    "\n",
    "Punique = [P[findall(x->x==b.v, B)] for b in BB]\n",
    "PP = [[QuantumAlgebra.QuTerm(0, QuantumAlgebra.δ[], pint, QuantumAlgebra.ExpVal[], QuantumAlgebra.Corr[], QuantumAlgebra.BaseOpProduct()) for pint in pext] for pext in Punique]\n",
    "\n",
    "TT = [T[findall(x->x==b.v, B)] for b in BB];"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "f1cd1d2f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45-element Vector{QuantumAlgebra.BaseOpProduct}:\n",
       " a†(2)² a(1)\n",
       " a†(1) a†(2)³\n",
       " a†(1)² a(1) a(2)\n",
       " a†(2) a(2)\n",
       " a†(1) a(1)²\n",
       " a†(2) a(2)³\n",
       " a†(2)³\n",
       " a†(2) a(2)²\n",
       " a†(2)³ a(1)\n",
       " a(1) a(2)²\n",
       " a†(1)³ a†(2)\n",
       " a†(1)² a(2)\n",
       " a†(1)² a(1)²\n",
       " ⋮\n",
       " a†(1) a†(2) a(2)²\n",
       " a†(1)² a(2)²\n",
       " a†(2)² a(2)²\n",
       " a†(1) a†(2)² a(2)\n",
       " a†(1) a(1)\n",
       " a†(1) a†(2) a(2)\n",
       " a†(2)² a(1) a(2)\n",
       " a†(1) a†(2) a(1)²\n",
       " a†(1)³\n",
       " a†(1) a(1) a(2)\n",
       " a†(1) a†(2)² a(1)\n",
       " a†(1) a†(2) a(1)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "BB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "61c7aca9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45-element Vector{Vector{QuantumAlgebra.QuTerm}}:\n",
       " [ξ_p ϕ(1) ϕ(2)³ , ξ_p* ϕ(1) ϕ(2)³ ]\n",
       " [ϕ(1) ϕ(2)³ ]\n",
       " [ϕ(1)³ ϕ(2) ]\n",
       " [ξ_p² ϕ(2)⁴ ]\n",
       " [ξ_p ϕ(1)³ ϕ(2) , ξ_p* ϕ(1)³ ϕ(2) ]\n",
       " [ϕ(2)⁴ ]\n",
       " [ξ_p ϕ(2)⁴ , ξ_p* ϕ(2)⁴ ]\n",
       " [ξ_p ϕ(2)⁴ , ξ_p* ϕ(2)⁴ ]\n",
       " [ϕ(1) ϕ(2)³ ]\n",
       " [ξ_p ϕ(1) ϕ(2)³ , ξ_p* ϕ(1) ϕ(2)³ ]\n",
       " [ϕ(1)³ ϕ(2) ]\n",
       " [ξ_p ϕ(1)² ϕ(2)² , ξ_p* ϕ(1)² ϕ(2)² ]\n",
       " [ϕ(1)⁴ ]\n",
       " ⋮\n",
       " [ϕ(1) ϕ(2)³ ]\n",
       " [ϕ(1)² ϕ(2)² ]\n",
       " [ϕ(2)⁴ ]\n",
       " [ϕ(1) ϕ(2)³ ]\n",
       " [ϕ(1)⁴ ]\n",
       " [ξ_p ϕ(1) ϕ(2)³ , ξ_p* ϕ(1) ϕ(2)³ ]\n",
       " [ϕ(1) ϕ(2)³ ]\n",
       " [ϕ(1)³ ϕ(2) ]\n",
       " [ξ_p ϕ(1)³ ϕ(2) , ξ_p* ϕ(1)³ ϕ(2) ]\n",
       " [ξ_p ϕ(1)² ϕ(2)² , ξ_p* ϕ(1)² ϕ(2)² ]\n",
       " [ϕ(1)² ϕ(2)² ]\n",
       " [ξ_p ϕ(1)² ϕ(2)² , ξ_p* ϕ(1)² ϕ(2)² ]"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PP"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "8e61f757",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45-element Vector{Vector{Int64}}:\n",
       " [12, 12]\n",
       " [4]\n",
       " [12]\n",
       " [12]\n",
       " [12, 12]\n",
       " [4]\n",
       " [4, 4]\n",
       " [12, 12]\n",
       " [4]\n",
       " [12, 12]\n",
       " [4]\n",
       " [12, 12]\n",
       " [6]\n",
       " ⋮\n",
       " [12]\n",
       " [6]\n",
       " [6]\n",
       " [12]\n",
       " [12]\n",
       " [24, 24]\n",
       " [12]\n",
       " [12]\n",
       " [4, 4]\n",
       " [24, 24]\n",
       " [12]\n",
       " [24, 24]"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "TT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "4ca75419",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45-element Vector{QuExpr}:\n",
       " 12 ξ_p* ϕ(1) ϕ(2)³  + 12 ξ_p ϕ(1) ϕ(2)³ \n",
       " 4 ϕ(1) ϕ(2)³ \n",
       " 12 ϕ(1)³ ϕ(2) \n",
       " 12 ξ_p² ϕ(2)⁴ \n",
       " 12 ξ_p* ϕ(1)³ ϕ(2)  + 12 ξ_p ϕ(1)³ ϕ(2) \n",
       " 4 ϕ(2)⁴ \n",
       " 4 ξ_p* ϕ(2)⁴  + 4 ξ_p ϕ(2)⁴ \n",
       " 12 ξ_p* ϕ(2)⁴  + 12 ξ_p ϕ(2)⁴ \n",
       " 4 ϕ(1) ϕ(2)³ \n",
       " 12 ξ_p* ϕ(1) ϕ(2)³  + 12 ξ_p ϕ(1) ϕ(2)³ \n",
       " 4 ϕ(1)³ ϕ(2) \n",
       " 12 ξ_p* ϕ(1)² ϕ(2)²  + 12 ξ_p ϕ(1)² ϕ(2)² \n",
       " 6 ϕ(1)⁴ \n",
       " ⋮\n",
       " 12 ϕ(1) ϕ(2)³ \n",
       " 6 ϕ(1)² ϕ(2)² \n",
       " 6 ϕ(2)⁴ \n",
       " 12 ϕ(1) ϕ(2)³ \n",
       " 12 ϕ(1)⁴ \n",
       " 24 ξ_p* ϕ(1) ϕ(2)³  + 24 ξ_p ϕ(1) ϕ(2)³ \n",
       " 12 ϕ(1) ϕ(2)³ \n",
       " 12 ϕ(1)³ ϕ(2) \n",
       " 4 ξ_p* ϕ(1)³ ϕ(2)  + 4 ξ_p ϕ(1)³ ϕ(2) \n",
       " 24 ξ_p* ϕ(1)² ϕ(2)²  + 24 ξ_p ϕ(1)² ϕ(2)² \n",
       " 12 ϕ(1)² ϕ(2)² \n",
       " 24 ξ_p* ϕ(1)² ϕ(2)²  + 24 ξ_p ϕ(1)² ϕ(2)² "
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "AA = Vector{QuantumAlgebra.QuExpr}()\n",
    "for (pext,text) in zip(PP,TT)\n",
    "    A = QuExpr()\n",
    "    for (pint,tint) in zip(pext,text)\n",
    "        QuantumAlgebra._add_with_auto_order!(A,pint,tint)\n",
    "    end\n",
    "    push!(AA,A)\n",
    "end\n",
    "\n",
    "AA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "7fa98481",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45-element Vector{QuantumAlgebra.BaseOpProduct}:\n",
       " a†(1)\n",
       " a†(2)\n",
       " a†(1)²\n",
       " a†(1) a†(2)\n",
       " a†(1) a(1)\n",
       " a†(2) a(1)\n",
       " a†(2) a(2)\n",
       " a(2)²\n",
       " a†(1)³\n",
       " a†(1)² a†(2)\n",
       " a†(1)² a(2)\n",
       " a†(1) a†(2) a(1)\n",
       " a†(1) a†(2) a(2)\n",
       " ⋮\n",
       " a†(1) a†(2) a(1) a(2)\n",
       " a†(1) a†(2) a(2)²\n",
       " a†(1) a(1)³\n",
       " a†(1) a(1)² a(2)\n",
       " a†(1) a(1) a(2)²\n",
       " a†(2)⁴\n",
       " a†(2)³ a(1)\n",
       " a†(2)² a(1) a(2)\n",
       " a†(2)² a(2)²\n",
       " a†(2) a(1)² a(2)\n",
       " a†(2) a(1) a(2)²\n",
       " a†(2) a(2)³"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perm = sortperm(BB)\n",
    "BB[perm]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "fddddcd6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45-element Vector{QuExpr}:\n",
       " 4 ξ_p*³ ϕ(1) ϕ(2)³  + 12 ξ_p*² ξ_p ϕ(1) ϕ(2)³  + 12 ξ_p* ξ_p² ϕ(1) ϕ(2)³  + 12 ξ_p* ϕ(1)³ ϕ(2)  + 12 ξ_p* ϕ(1) ϕ(2)³  + 4 ξ_p³ ϕ(1) ϕ(2)³  + 12 ξ_p ϕ(1)³ ϕ(2)  + 12 ξ_p ϕ(1) ϕ(2)³ \n",
       " 4 ξ_p*³ ϕ(2)⁴  + 12 ξ_p*² ξ_p ϕ(2)⁴  + 12 ξ_p* ξ_p² ϕ(2)⁴  + 12 ξ_p* ϕ(1)² ϕ(2)²  + 12 ξ_p* ϕ(2)⁴  + 4 ξ_p³ ϕ(2)⁴  + 12 ξ_p ϕ(1)² ϕ(2)²  + 12 ξ_p ϕ(2)⁴ \n",
       " 6 ξ_p*² ϕ(1)² ϕ(2)²  + 12 ξ_p* ξ_p ϕ(1)² ϕ(2)²  + 6 ξ_p² ϕ(1)² ϕ(2)²  + 6 ϕ(1)⁴  + 6 ϕ(1)² ϕ(2)² \n",
       " 12 ξ_p*² ϕ(1) ϕ(2)³  + 24 ξ_p* ξ_p ϕ(1) ϕ(2)³  + 12 ξ_p² ϕ(1) ϕ(2)³  + 12 ϕ(1)³ ϕ(2)  + 12 ϕ(1) ϕ(2)³ \n",
       " 12 ϕ(1)⁴ \n",
       " 12 ξ_p*² ϕ(1) ϕ(2)³  + 24 ξ_p* ξ_p ϕ(1) ϕ(2)³  + 12 ξ_p² ϕ(1) ϕ(2)³  + 12 ϕ(1)³ ϕ(2)  + 12 ϕ(1) ϕ(2)³ \n",
       " 12 ξ_p² ϕ(2)⁴ \n",
       " 6 ξ_p*² ϕ(2)⁴  + 12 ξ_p* ξ_p ϕ(2)⁴  + 6 ξ_p² ϕ(2)⁴  + 6 ϕ(1)² ϕ(2)²  + 6 ϕ(2)⁴ \n",
       " 4 ξ_p* ϕ(1)³ ϕ(2)  + 4 ξ_p ϕ(1)³ ϕ(2) \n",
       " 12 ξ_p* ϕ(1)² ϕ(2)²  + 12 ξ_p ϕ(1)² ϕ(2)² \n",
       " 12 ξ_p* ϕ(1)² ϕ(2)²  + 12 ξ_p ϕ(1)² ϕ(2)² \n",
       " 24 ξ_p* ϕ(1)² ϕ(2)²  + 24 ξ_p ϕ(1)² ϕ(2)² \n",
       " 24 ξ_p* ϕ(1) ϕ(2)³  + 24 ξ_p ϕ(1) ϕ(2)³ \n",
       " ⋮\n",
       " 24 ϕ(1)² ϕ(2)² \n",
       " 12 ϕ(1) ϕ(2)³ \n",
       " 4 ϕ(1)⁴ \n",
       " 12 ϕ(1)³ ϕ(2) \n",
       " 12 ϕ(1)² ϕ(2)² \n",
       " ϕ(2)⁴ \n",
       " 4 ϕ(1) ϕ(2)³ \n",
       " 12 ϕ(1) ϕ(2)³ \n",
       " 6 ϕ(2)⁴ \n",
       " 12 ϕ(1)² ϕ(2)² \n",
       " 12 ϕ(1) ϕ(2)³ \n",
       " 4 ϕ(2)⁴ "
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "AA[perm]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1e90eaa2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 1.7.2",
   "language": "julia",
   "name": "julia-1.7"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}