zxcalc / quantomatic

Quantomatic is a tool for doing automated graph rewriting.
http://quantomatic.github.io
151 stars 22 forks source link

Rewriting Fails #238

Closed rossduncan closed 5 years ago

rossduncan commented 6 years ago

Attempting a rewrite sometimes fails.

To reproduce, load the attached graph into the default zx-stabilizer project. Load the rule "red_to_green", and apply the first match in the forward direction. The rewrite will not be performed and the following stack trace is emitted.

[error] Exception in thread "AWT-EventQueue-0" java.security.PrivilegedActionException: java.security.PrivilegedActionException: quanto.data.PhaseParseException: Attempting parse ValueType threw message Asked to parse unexpected data
[error]     at java.base/java.security.AccessController.doPrivileged(Native Method)
[error]     at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
[error]     at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
[error]     at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
[error] Caused by: java.security.PrivilegedActionException: quanto.data.PhaseParseException: Attempting parse ValueType threw message Asked to parse unexpected data
[error]     at java.base/java.security.AccessController.doPrivileged(Native Method)
[error]     at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
[error]     at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
[error]     at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
[error]     at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
[error]     ... 9 more
[error] Caused by: quanto.data.PhaseParseException: Attempting parse ValueType threw message Asked to parse unexpected data
[error]     at quanto.data.PhaseExpression$.parse(PhaseExpression.scala:149)
[error]     at quanto.data.CompositeExpression$.parseSingle(CompositeExpression.scala:147)
[error]     at quanto.data.CompositeExpression$.$anonfun$parseKnowingTypes$1(CompositeExpression.scala:144)
[error]     at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
[error]     at scala.collection.Iterator.foreach(Iterator.scala:944)
[error]     at scala.collection.Iterator.foreach$(Iterator.scala:944)
[error]     at scala.collection.AbstractIterator.foreach(Iterator.scala:1432)
[error]     at scala.collection.IterableLike.foreach(IterableLike.scala:71)
[error]     at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
[error]     at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
[error]     at scala.collection.TraversableLike.map(TraversableLike.scala:234)
[error]     at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
[error]     at scala.collection.AbstractTraversable.map(Traversable.scala:104)
[error]     at quanto.data.CompositeExpression$.parseKnowingTypes(CompositeExpression.scala:144)
[error]     at quanto.data.Graph$.$anonfun$variablesUsedWithType$1(Graph.scala:1291)
[error]     at scala.collection.TraversableOnce.$anonfun$foldLeft$1(TraversableOnce.scala:157)
[error]     at scala.collection.TraversableOnce.$anonfun$foldLeft$1$adapted(TraversableOnce.scala:157)
[error]     at scala.collection.MapLike$MappedValues.$anonfun$foreach$3(MapLike.scala:253)
[error]     at scala.collection.TraversableLike$WithFilter.$anonfun$foreach$1(TraversableLike.scala:789)
[error]     at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:231)
[error]     at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
[error]     at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:788)
[error]     at scala.collection.MapLike$MappedValues.foreach(MapLike.scala:253)
[error]     at scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:157)
[error]     at scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:155)
[error]     at scala.collection.AbstractTraversable.foldLeft(Traversable.scala:104)
[error]     at quanto.data.Graph$.variablesUsedWithType(Graph.scala:1287)
[error]     at quanto.gui.RewriteController$$anonfun$1.$anonfun$applyOrElse$6(RewriteController.scala:249)
[error]     at quanto.gui.RewriteController$$anonfun$1.$anonfun$applyOrElse$6$adapted(RewriteController.scala:236)
[error]     at scala.Option.foreach(Option.scala:257)
[error]     at quanto.gui.RewriteController$$anonfun$1.$anonfun$applyOrElse$5(RewriteController.scala:236)
[error]     at quanto.gui.RewriteController$$anonfun$1.$anonfun$applyOrElse$5$adapted(RewriteController.scala:236)
[error]     at scala.Option.foreach(Option.scala:257)
[error]     at quanto.gui.RewriteController$$anonfun$1.applyOrElse(RewriteController.scala:236)
[error]     at quanto.gui.RewriteController$$anonfun$1.applyOrElse(RewriteController.scala:190)
[error]     at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:34)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1$adapted(Reactions.scala:24)
[error]     at scala.collection.immutable.List.foreach(List.scala:389)
[error]     at scala.collection.generic.TraversableForwarder.foreach(TraversableForwarder.scala:35)
[error]     at scala.collection.generic.TraversableForwarder.foreach$(TraversableForwarder.scala:35)
[error]     at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:44)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:18)
[error]     at scala.swing.Publisher.$anonfun$publish$1(Publisher.scala:46)
[error]     at scala.swing.Publisher.$anonfun$publish$1$adapted(Publisher.scala:46)
[error]     at scala.collection.Iterator.foreach(Iterator.scala:944)
[error]     at scala.collection.Iterator.foreach$(Iterator.scala:944)
[error]     at scala.swing.SingleRefCollection$$anon$4.foreach(Publisher.scala:108)
[error]     at scala.collection.IterableLike.foreach(IterableLike.scala:71)
[error]     at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
[error]     at scala.swing.RefSet.foreach(Publisher.scala:165)
[error]     at scala.swing.Publisher.publish(Publisher.scala:46)
[error]     at scala.swing.Publisher.publish$(Publisher.scala:46)
[error]     at scala.swing.Component.publish(Component.scala:43)
[error]     at scala.swing.AbstractButton.$anonfun$new$1(AbstractButton.scala:44)
[error]     at scala.swing.AbstractButton.$anonfun$new$1$adapted(AbstractButton.scala:43)
[error]     at scala.swing.Swing$$anon$9.actionPerformed(Swing.scala:40)
[error]     at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
[error]     at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
[error]     at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
[error]     at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
[error]     at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:270)
[error]     at java.desktop/java.awt.Component.processMouseEvent(Component.java:6589)
[error]     at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
[error]     at java.desktop/java.awt.Component.processEvent(Component.java:6354)
[error]     at java.desktop/java.awt.Container.processEvent(Container.java:2261)
[error]     at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4966)
[error]     at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2319)
[error]     at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)
[error]     at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4914)
[error]     at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4543)
[error]     at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4484)
[error]     at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2305)
[error]     at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
[error]     at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)
[error]     at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
[error]     at java.desktop/java.awt.EventQueue.access$600(EventQueue.java:97)
[error]     at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
[error]     at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
[error]     ... 14 more

broken.qgraph.zip

hmillerbakewell commented 6 years ago

There were two things going on here: Firstly the Hadamard nodes were expecting to have "string" data on them, (should have been "empty" instead,) and also the parsers were missing for "string" data

rossduncan commented 6 years ago

This graph was made in the graph editor of quanto itself.

hmillerbakewell commented 6 years ago

The errors were in the qtheory and the parsers, not in the user! Is it working now?

rossduncan commented 6 years ago

It is working now, thanks. Recently I have been generating .qgraph files from various different sources so I just wanted to emphasise that this particular one was not broken due to a bug in some other tool.