]> foleosoft.com Git - QAnsel.git/commitdiff
Fri Aug 2 10:17:51 PM EDT 2024
authormiha-q <>
Sat, 3 Aug 2024 02:17:51 +0000 (22:17 -0400)
committermiha-q <>
Sat, 3 Aug 2024 02:17:51 +0000 (22:17 -0400)
src/gui.html
src/qansel.h

index 40115693c3cc08459e52a7c03237d6dbf2dfbfe1..1dd69378867c53c55ccb68498b39d67c0bd89a71 100644 (file)
                </tr>
                <tr>
                        <td colspan="2">
-                               <div style="overflow-y: scroll; overflow-x: scroll; height: 256px; width: 0px;" oncontextmenu="return false;" class="program-track-container">
+                               <div style="overflow-y: auto; overflow-x: auto; height: 256px; width: 0px;" oncontextmenu="return false;" class="program-track-container">
                                        <table border=1 class="program-track"></table>
                                </div>
                        </td>
                                break;
                        }
                        if (compare == undefined) return r;
-                       compare = compare.replace(/[\"]/g, "'").trim();
-                       return compare == r;
+                       return compare.toString().replace(/[\"]/g, "'").trim() == r;
                }
 
                var INSTRUCTIONS =
                [
-                       "X",
-                       "Y",
-                       "Z",
-                       "H",
-                       "S",
-                       "T",
-                       "S<sup>&dagger;</sup>",
-                       "T<sup>&dagger;</sup>",
-                       "CX",
-                       "CCX",
-                       "SW",
-                       "CSW",
-                       "Rx",
-                       "Ry",
-                       "Rz",
-                       "|0⟩",
-                       "|1⟩",
-                       "🔍",
-                       "=1",
-                       "=0",
+                       "X", "Pauli-X",
+                       "Y", "Pauli-Y",
+                       "Z", "Pauli-Z",
+                       "H", "Hadamard",
+                       "S", "Phase-S",
+                       "T", "Phase-T",
+                       "S<sup>&dagger;</sup>", "Phase-S Hermitian Transpose",
+                       "T<sup>&dagger;</sup>", "Phase-T Hermitian Transpose",
+                       "CX", "Controlled-NOT",
+                       "CCX", "Toffoli",
+                       "SW", "Swap",
+                       "CSW", "Fredkin",
+                       "Rx", "Rotation-X",
+                       "Ry", "Rotation-Y",
+                       "Rz", "Rotation-Z",
+                       "|0⟩", "Qubit Set",
+                       "|1⟩", "Qubit Reset",
+                       "🔍", "Measure",
+                       "=1", "Conditional Set",
+                       "=0", "Conditional Reset"
                ]; 
                var ProgramTrack =
                {
                        SCALE: 64,
                        STATE: [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
                        DRAG: "",
+                       DRAGPOS: [0, 0],
+                       DRAGELEM: undefined,
                        init: () =>
                        {
                                for (var i = 0; i < ProgramTrack.STATE.length; i++)
                                        var h = e.innerHTML.replace(/[<].*?[>]/g, "");
                                        h = e.innerHTML;
                                        ProgramTrack.DRAG = h;
+                                       ProgramTrack.DRAGPOS = [evt.clientX, evt.clientY];
                                        $(".program-drag")[0].innerHTML = tr + td + h + "</tr></td>";                           
                                        $(".program-drag")[0].style.visibility = "";
                                }
                                td = "<td style='width: " + px + "; height: " + px + "; cursor: grab;'";
                                td += " oncontextmenu='return false;'";
                                td += " " + drag_event.replace("true", "false");
-                               td += ">";
                                var itr = 0;
                                html = tr;
-                               for (var i = 0; i < INSTRUCTIONS.length; i++)
+                               for (var i = 0; i < INSTRUCTIONS.length; i += 2)
                                {
-                                       html += td + INSTRUCTIONS[i] + "</td>";
+                                       html += td + "title='" + INSTRUCTIONS[i + 1] + "'" + ">" + INSTRUCTIONS[i] + "</td>";
                                        itr++;
-                                       if (itr > 4 && i != INSTRUCTIONS.length - 1)
+                                       if (itr > 4 && i != INSTRUCTIONS.length - 2)
                                        {
                                                html += "</tr>" + tr;
                                                itr = 0;
                        $(".program-track-container")[0].style.width = $(".program-track-container")[0].parentNode.getBoundingClientRect().width + "px"
                };
 
+               document.body.addEventListener("keydown", e =>
+               {
+                       modalFixes();
+               });
                document.body.addEventListener("mousemove", e =>
                {
+                       modalFixes();
                        var x = $(".program-drag")[0];
                        var w = parseFloat(getComputedStyle(x).width.replace("px", "")) / 2;
                        var h = parseFloat(getComputedStyle(x).height.replace("px", "")) / 2;
                                if (str) {} else {str = ""};
                                if (str.includes(",") && (trackerElem.innerHTML == "..." || trackerElem.innerHTML == ""))
                                {
+                                       ProgramTrack.DRAGELEM = trackerElem;
                                        $(".program-instr")[0].style.display = "none";
                                        $(".program-instr")[0].className = $(".program-instr")[0].className.replace("menu-hidden", "").trim();
                                        $(".program-instr")[0].className += " menu-reveal";
                        ProgramTrack.draw();
                        $(".program-drag")[0].style.visibility = "hidden";
                        ProgramTrack.DRAG = "";
+
                        var elem = document.elementFromPoint(e.clientX, e.clientY);
+                       var dist = Math.sqrt(Math.pow(ProgramTrack.DRAGPOS[0] - e.clientX, 2) + Math.pow(ProgramTrack.DRAGPOS[1] - e.clientY, 2));
+                       if (dist < 8) elem = ProgramTrack.DRAGELEM;
                        var attr = elem.getAttribute("pidx");
                        if (attr == null) return;
                        attr = attr.split(",");
                                default:
                                        if (!qubit) return;
                        }
+                       var f = [0, 0, 0];
                        switch (html)
                        {
-                               case "CX": html = overline("CX", "10"); break;
-                               case "SW": html = overline("SW", "10"); break;
-                               case "CCX": html = overline("CCX", "100"); break;
-                               case "CSW": html = overline("CSW", "100"); break;
+                               case "CX":
+                                       if (ProgramTrack.STATE[attr[0]].length > attr[1])
+                                       {
+                                               for (var i = 0; i < ProgramTrack.STATE.length; i++)
+                                               {
+                                                       if (i != attr[0])
+                                                       {
+                                                               if (overline("CX", "10", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+                                                               if (overline("CX", "01", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+                                                       }
+                                               }
+                                       }
+                                       if (!f[0]) html = overline("CX", "10");
+                                       else html = overline("CX", "01");
+                               break;
+                               case "SW":
+                                       if (ProgramTrack.STATE[attr[0]].length > attr[1])
+                                       {
+                                               for (var i = 0; i < ProgramTrack.STATE.length; i++)
+                                               {
+                                                       if (i != attr[0])
+                                                       {
+                                                               if (overline("SW", "10", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+                                                               if (overline("SW", "01", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+                                                       }
+                                               }
+                                       }
+                                       if (!f[0]) html = overline("SW", "10");
+                                       else html = overline("SW", "01");
+                               break;
+                               case "CCX":
+                                       if (ProgramTrack.STATE[attr[0]].length > attr[1])
+                                       {
+                                               for (var i = 0; i < ProgramTrack.STATE.length; i++)
+                                               {
+                                                       if (i != attr[0])
+                                                       {
+                                                               if (overline("CCX", "100", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+                                                               if (overline("CCX", "010", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+                                                               if (overline("CCX", "001", ProgramTrack.STATE[i][attr[1]])) f[2] = 1;
+                                                       }
+                                               }
+                                       }
+                                       if (!f[0]) html = overline("CCX", "100");
+                                       else if (!f[1]) html = overline("CCX", "010");
+                                       else html = overline("CCX", "001");
+                               break;
+                               case "CSW":
+                                       if (ProgramTrack.STATE[attr[0]].length > attr[1])
+                                       {
+                                               for (var i = 0; i < ProgramTrack.STATE.length; i++)
+                                               {
+                                                       if (i != attr[0])
+                                                       {
+                                                               if (overline("CSW", "100", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+                                                               if (overline("CSW", "010", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+                                                               if (overline("CSW", "001", ProgramTrack.STATE[i][attr[1]])) f[2] = 1;
+                                                       }
+                                               }
+                                       }
+                                       if (!f[0]) html = overline("CSW", "100");
+                                       else if (!f[1]) html = overline("CSW", "010");
+                                       else html = overline("CSW", "001");
+                               break;
                                case "🔍": html = "🔍<sub>0</sub>"; break;
                                case "=1": html = "=1<sub>0</sub>"; break;
                                case "=0": html = "=0<sub>0</sub>"; break;
                        ProgramTrack.draw();
                        if (elem.innerHTML.trim() == "...")
                        {
-                               $(".program-track-container")[0].scrollLeft = $(".program-track-container")[0].scrollLeftMax;
+                               $(".program-track-container")[0].scrollLeft = 999999;
                        }
                });
                //Chart
                        key = key ? key : "";
                        if (key.split(":").length != 3)
                        {
+                               $("#blocker-div")[0].remove();
+                               $("#blocker-img")[0].remove();
                                errorModal("Please click the gear icon and input your API key.");
                                return;
                        }
                                {
                                        errorModal(x.response, 1);
                                }
-                       }).catch(x => errorModal(x.message, 1));
+                       }).catch(x =>
+                       {
+                               $("#blocker-div")[0].remove();
+                               $("#blocker-img")[0].remove();
+                               errorModal(x.message, 1);
+                       });
                });
                MicroModal.init();
                function menu(cmd)
                                case "clear":
                                        $("#modal-main-title")[0].innerHTML = "Clear Project";
                                        $("#modal-main-content")[0].innerHTML = "<p>Are you sure you want to clear this project?</p>";
+                                       $("#modal-main-cancel")[0].style.display = "";
                                        $("#modal-main-confirm")[0].style.display = "";
                                        $("#modal-main-confirm")[0].setAttribute("onclick", "ProgramTrack.init(); closeModal();");
-                                       $(".istina-basis")[0].style.visibility = "hidden";
                                        MicroModal.show("modal-main");
                                break;
                                case "settings":
                                        $("#apikey")[0].value = apikey;
                                        $("#modal-main-confirm")[0].style.display = "";
                                        $("#modal-main-confirm")[0].setAttribute("onclick", "localStorage.setItem('apikey', $('#modal-main-content input')[0].value); closeModal();");
-                                       $(".istina-basis")[0].style.visibility = "hidden";
                                        MicroModal.show("modal-main");
                                break;
                                case "save":
                        $("#modal-main-cancel")[0].style.display = "none";
                        $("#modal-main-title")[0].innerHTML = "An Error Occurred";
                        $("#modal-main-content")[0].innerHTML = "<p style='color: red;'>" + err + "</p>";
-                       $(".istina-basis")[0].style.visibility = "hidden";
                        MicroModal.show("modal-main");
                }
                function closeModal()
                {
-                       $(".istina-basis")[0].style.visibility = "";
                        MicroModal.close();
                }
                $("#file-input")[0].addEventListener("change", e =>
                        document.body.appendChild(div);
                        document.body.appendChild(img);
                }
-
+               function modalFixes()
+               {
+                       if (getComputedStyle($("#modal-main")[0]).display == "none")
+                       {
+                               $(".istina-basis")[0].style.visibility = "";
+                       }
+                       else
+                       {
+                               $(".istina-basis")[0].style.visibility = "hidden";
+                       }
+               }
        </script>
        
 </body>
index da843580ac784d5211aac8993e11f6eac7d98271..dc62aeb8662a86c216f1d528ceaa536d7a0ca914 100644 (file)
@@ -3,7 +3,7 @@
 
 #define QANSEL_MAX_SIZE 1073741824
 
-#define QANSEL_SHOTS_DEFAULT 1000
+#define QANSEL_SHOTS_DEFAULT 10000
 #define QANSEL_QUBITS_MAX 16
 #define QANSEL_MODE_BARE 0
 #define QANSEL_MODE_SMART 1