cubing 0.29.2 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/esm/alg/index.js +1 -2
  2. package/dist/esm/bluetooth/index.js +8 -9
  3. package/dist/esm/bluetooth/index.js.map +2 -2
  4. package/dist/esm/{chunk-RH4WZIGC.js → chunk-5QXVR3FK.js} +2 -2
  5. package/dist/esm/{chunk-RH4WZIGC.js.map → chunk-5QXVR3FK.js.map} +0 -0
  6. package/dist/esm/{chunk-WNZXZ4MW.js → chunk-7LJHXZJM.js} +6 -8
  7. package/dist/esm/{chunk-WNZXZ4MW.js.map → chunk-7LJHXZJM.js.map} +2 -2
  8. package/dist/esm/{chunk-OT7AIIFN.js → chunk-CUIME76I.js} +3 -3
  9. package/dist/esm/chunk-CUIME76I.js.map +7 -0
  10. package/dist/esm/{chunk-NUMCMGLU.js → chunk-J5IQUWXC.js} +2 -2
  11. package/dist/esm/{chunk-NUMCMGLU.js.map → chunk-J5IQUWXC.js.map} +0 -0
  12. package/dist/esm/{chunk-J5KJ2WWA.js → chunk-JQLCWEVU.js} +44 -31
  13. package/dist/esm/chunk-JQLCWEVU.js.map +7 -0
  14. package/dist/esm/{chunk-7OIUETFU.js → chunk-RBZINRTT.js} +213 -106
  15. package/dist/esm/chunk-RBZINRTT.js.map +7 -0
  16. package/dist/esm/{chunk-EOEJDDXN.js → chunk-SNLVO6OQ.js} +256 -31
  17. package/dist/esm/chunk-SNLVO6OQ.js.map +7 -0
  18. package/dist/esm/{chunk-YD2TMJI2.js → chunk-SYSXHJ4V.js} +137 -183
  19. package/dist/esm/chunk-SYSXHJ4V.js.map +7 -0
  20. package/dist/esm/{chunk-POCUG6QW.js → chunk-UAHLC2BK.js} +3 -5
  21. package/dist/esm/{chunk-POCUG6QW.js.map → chunk-UAHLC2BK.js.map} +2 -2
  22. package/dist/esm/{chunk-RIXFKOD6.js → chunk-V67YQOIN.js} +4 -4
  23. package/dist/esm/{chunk-RIXFKOD6.js.map → chunk-V67YQOIN.js.map} +2 -2
  24. package/dist/esm/kpuzzle/index.js +2 -3
  25. package/dist/esm/notation/index.js +2 -3
  26. package/dist/esm/protocol/index.js +4 -5
  27. package/dist/esm/puzzle-geometry/index.js +6 -19
  28. package/dist/esm/puzzle-geometry/index.js.map +2 -2
  29. package/dist/esm/puzzles/index.js +4 -5
  30. package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js → puzzles-dynamic-3x3x3-ZKMODX2P.js} +1 -3
  31. package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js.map → puzzles-dynamic-3x3x3-ZKMODX2P.js.map} +1 -1
  32. package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js → puzzles-dynamic-4x4x4-DT42HVIY.js} +1 -3
  33. package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js.map → puzzles-dynamic-4x4x4-DT42HVIY.js.map} +1 -1
  34. package/dist/esm/{puzzles-dynamic-side-events-3K26JTOG.js → puzzles-dynamic-side-events-HMUBMHA5.js} +1 -3
  35. package/dist/esm/{puzzles-dynamic-side-events-3K26JTOG.js.map → puzzles-dynamic-side-events-HMUBMHA5.js.map} +1 -1
  36. package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js → puzzles-dynamic-unofficial-QXSDLTK5.js} +1 -3
  37. package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js.map → puzzles-dynamic-unofficial-QXSDLTK5.js.map} +1 -1
  38. package/dist/esm/scramble/index.js +2 -3
  39. package/dist/esm/search/index.js +6 -7
  40. package/dist/esm/{search-dynamic-sgs-side-events-AE3TLLPA.js → search-dynamic-sgs-side-events-KVUAIBGE.js} +6 -7
  41. package/dist/esm/{search-dynamic-sgs-side-events-AE3TLLPA.js.map → search-dynamic-sgs-side-events-KVUAIBGE.js.map} +1 -1
  42. package/dist/esm/{search-dynamic-sgs-unofficial-JUXMNMNO.js → search-dynamic-sgs-unofficial-7ICOL4T7.js} +6 -7
  43. package/dist/esm/{search-dynamic-sgs-unofficial-JUXMNMNO.js.map → search-dynamic-sgs-unofficial-7ICOL4T7.js.map} +1 -1
  44. package/dist/esm/{search-dynamic-solve-3x3x3-SA75BI5I.js → search-dynamic-solve-3x3x3-DDVSUP2C.js} +275 -292
  45. package/dist/esm/search-dynamic-solve-3x3x3-DDVSUP2C.js.map +7 -0
  46. package/dist/esm/{search-dynamic-solve-4x4x4-ALKH43DT.js → search-dynamic-solve-4x4x4-GGDX7YYZ.js} +6 -7
  47. package/dist/esm/{search-dynamic-solve-4x4x4-ALKH43DT.js.map → search-dynamic-solve-4x4x4-GGDX7YYZ.js.map} +1 -1
  48. package/dist/esm/{search-dynamic-solve-fto-5B5ZESQC.js → search-dynamic-solve-fto-MA4X6JEE.js} +6 -17
  49. package/dist/esm/search-dynamic-solve-fto-MA4X6JEE.js.map +7 -0
  50. package/dist/esm/{search-dynamic-solve-kilominx-OY4VIARG.js → search-dynamic-solve-kilominx-TVKK4KDH.js} +2 -3
  51. package/dist/esm/search-dynamic-solve-kilominx-TVKK4KDH.js.map +7 -0
  52. package/dist/esm/{search-dynamic-solve-master_tetraminx-GE2BTRGI.js → search-dynamic-solve-master_tetraminx-YKINTRUU.js} +4 -11
  53. package/dist/esm/search-dynamic-solve-master_tetraminx-YKINTRUU.js.map +7 -0
  54. package/dist/esm/{search-dynamic-solve-sq1-W6PSSLR6.js → search-dynamic-solve-sq1-W33UXTDZ.js} +1 -2
  55. package/dist/esm/{search-dynamic-solve-sq1-W6PSSLR6.js.map → search-dynamic-solve-sq1-W33UXTDZ.js.map} +1 -1
  56. package/dist/esm/{search-worker-inside-generated-string-7HYFSSPW.js → search-worker-inside-generated-string-I4T4KADX.js} +28 -30
  57. package/dist/esm/search-worker-inside-generated-string-I4T4KADX.js.map +7 -0
  58. package/dist/esm/{search-worker-js-entry-SNUA3SOE.js → search-worker-js-entry-KWGCJXGS.js} +34 -41
  59. package/dist/esm/search-worker-js-entry-KWGCJXGS.js.map +7 -0
  60. package/dist/esm/{search-worker-ts-entry-LNB7KNFY.js → search-worker-ts-entry-J533AM5E.js} +2 -3
  61. package/dist/esm/{search-worker-ts-entry-LNB7KNFY.js.map → search-worker-ts-entry-J533AM5E.js.map} +1 -1
  62. package/dist/esm/stream/index.js +1 -2
  63. package/dist/esm/stream/index.js.map +2 -2
  64. package/dist/esm/twisty/index.js +450 -254
  65. package/dist/esm/twisty/index.js.map +4 -4
  66. package/dist/esm/{twisty-dynamic-3d-PU74EKRA.js → twisty-dynamic-3d-OAYMJ6OD.js} +125 -107
  67. package/dist/esm/twisty-dynamic-3d-OAYMJ6OD.js.map +7 -0
  68. package/dist/types/{Alg-137fb0d5.d.ts → Alg-60b374e8.d.ts} +25 -26
  69. package/dist/types/{KState-a73111d7.d.ts → KState-958b873c.d.ts} +1 -1
  70. package/dist/types/{TwizzleLink-ce20e840.d.ts → TwizzleLink-e873f6e5.d.ts} +77 -54
  71. package/dist/types/alg/index.d.ts +31 -9
  72. package/dist/types/bluetooth/index.d.ts +4 -4
  73. package/dist/types/{bluetooth-puzzle-8a678993.d.ts → bluetooth-puzzle-cc8eeaae.d.ts} +2 -2
  74. package/dist/types/kpuzzle/index.d.ts +2 -2
  75. package/dist/types/notation/index.d.ts +1 -1
  76. package/dist/types/{outside-e55f28a0.d.ts → outside-15f39b79.d.ts} +2 -2
  77. package/dist/types/{parseAlg-a28f7568.d.ts → parseAlg-3c77c4b3.d.ts} +1 -1
  78. package/dist/types/protocol/index.d.ts +2 -2
  79. package/dist/types/puzzle-geometry/index.d.ts +3 -3
  80. package/dist/types/puzzles/index.d.ts +5 -5
  81. package/dist/types/scramble/index.d.ts +3 -3
  82. package/dist/types/search/index.d.ts +3 -3
  83. package/dist/types/stream/index.d.ts +3 -3
  84. package/dist/types/twisty/index.d.ts +6 -6
  85. package/package.json +3 -2
  86. package/dist/esm/chunk-7OIUETFU.js.map +0 -7
  87. package/dist/esm/chunk-EOEJDDXN.js.map +0 -7
  88. package/dist/esm/chunk-J5KJ2WWA.js.map +0 -7
  89. package/dist/esm/chunk-OT7AIIFN.js.map +0 -7
  90. package/dist/esm/chunk-SBZRVSPK.js +0 -30
  91. package/dist/esm/chunk-SBZRVSPK.js.map +0 -7
  92. package/dist/esm/chunk-YD2TMJI2.js.map +0 -7
  93. package/dist/esm/search-dynamic-solve-3x3x3-SA75BI5I.js.map +0 -7
  94. package/dist/esm/search-dynamic-solve-fto-5B5ZESQC.js.map +0 -7
  95. package/dist/esm/search-dynamic-solve-kilominx-OY4VIARG.js.map +0 -7
  96. package/dist/esm/search-dynamic-solve-master_tetraminx-GE2BTRGI.js.map +0 -7
  97. package/dist/esm/search-worker-inside-generated-string-7HYFSSPW.js.map +0 -7
  98. package/dist/esm/search-worker-js-entry-SNUA3SOE.js.map +0 -7
  99. package/dist/esm/twisty-dynamic-3d-PU74EKRA.js.map +0 -7
@@ -1,10 +1,3 @@
1
- import {
2
- __privateAdd,
3
- __privateGet,
4
- __privateMethod,
5
- __privateSet
6
- } from "./chunk-SBZRVSPK.js";
7
-
8
1
  // src/cubing/alg/common.ts
9
2
  var writeAlgDebugField = false;
10
3
  var Comparable = class {
@@ -958,59 +951,182 @@ var TraversalUp = class extends TraversalDownUp {
958
951
  return mustBeAlgNode(this.traverseAlgNode(algNode));
959
952
  }
960
953
  };
961
- var _newPlaceholderAssociationsMap, _newPlaceholderAssociations, newPlaceholderAssociations_fn, _newAmount, newAmount_fn;
962
- var _Simplify = class extends TraversalDownUp {
963
- constructor() {
964
- super(...arguments);
965
- __privateAdd(this, _newPlaceholderAssociations);
966
- __privateAdd(this, _newPlaceholderAssociationsMap, void 0);
954
+
955
+ // src/cubing/alg/simplify/options.ts
956
+ var DEFAULT_DIRECTIONAL = "any-direction";
957
+ var DEFAULT_MOD_WRAP = "canonical-centered";
958
+ var AppendOptionsHelper = class {
959
+ constructor(config = {}) {
960
+ this.config = config;
961
+ }
962
+ cancelQuantum() {
963
+ const { cancel } = this.config;
964
+ if (cancel === true) {
965
+ return DEFAULT_DIRECTIONAL;
966
+ }
967
+ if (cancel === false) {
968
+ return "none";
969
+ }
970
+ return cancel?.directional ?? "none";
967
971
  }
968
- *traverseAlg(alg, options) {
969
- if (options.depth === 0) {
970
- yield* alg.childAlgNodes();
971
- return;
972
+ cancelAny() {
973
+ return this.config.cancel && this.cancelQuantum() !== "none";
974
+ }
975
+ cancelPuzzleSpecificModWrap() {
976
+ const { cancel } = this.config;
977
+ if (cancel === true || cancel === false) {
978
+ return DEFAULT_MOD_WRAP;
972
979
  }
973
- const newAlgNodes = [];
974
- let lastAlgNode = null;
975
- const collapseMoves = options?.collapseMoves ?? true;
976
- function appendMoveWithNewAmount(move, deltaAmount) {
977
- var _a;
978
- const newAmount = __privateMethod(_a = _Simplify, _newAmount, newAmount_fn).call(_a, move, deltaAmount, options);
979
- if (newAmount === 0) {
980
- return false;
980
+ return cancel?.puzzleSpecificModWrap ?? DEFAULT_MOD_WRAP;
981
+ }
982
+ puzzleSpecificSimplifyOptions() {
983
+ return this.config.puzzleLoader?.puzzleSpecificSimplifyOptions ?? this.config.puzzleSpecificSimplifyOptions;
984
+ }
985
+ };
986
+
987
+ // src/cubing/alg/simplify/append.ts
988
+ function areSameDirection(direction, move2) {
989
+ return direction * Math.sign(move2.amount) >= 0;
990
+ }
991
+ function offsetMod(x, positiveMod, offset) {
992
+ return ((x - offset) % positiveMod + positiveMod) % positiveMod + offset;
993
+ }
994
+ function experimentalAppendMove(alg, addedMove, options) {
995
+ const optionsHelper = new AppendOptionsHelper(options);
996
+ let outputPrefix = Array.from(alg.childAlgNodes());
997
+ let outputSuffix = [addedMove];
998
+ function output() {
999
+ return new Alg([...outputPrefix, ...outputSuffix]);
1000
+ }
1001
+ function modMove(move) {
1002
+ if (optionsHelper.cancelPuzzleSpecificModWrap() === "none") {
1003
+ return move;
1004
+ }
1005
+ const quantumMoveOrder = optionsHelper.puzzleSpecificSimplifyOptions()?.quantumMoveOrder;
1006
+ if (!quantumMoveOrder) {
1007
+ return move;
1008
+ }
1009
+ const mod = quantumMoveOrder(addedMove.quantum);
1010
+ let offset;
1011
+ switch (optionsHelper.cancelPuzzleSpecificModWrap()) {
1012
+ case "gravity": {
1013
+ offset = -Math.floor((mod - (move.amount < 0 ? 0 : 1)) / 2);
1014
+ break;
1015
+ }
1016
+ case "canonical-centered": {
1017
+ offset = -Math.floor((mod - 1) / 2);
1018
+ break;
1019
+ }
1020
+ case "canonical-positive": {
1021
+ offset = 0;
1022
+ break;
1023
+ }
1024
+ case "preserve-sign": {
1025
+ offset = move.amount < 0 ? 1 - mod : 0;
1026
+ break;
1027
+ }
1028
+ default: {
1029
+ throw new Error("Unknown mod wrap");
981
1030
  }
982
- const newMove = new Move(move.quantum, newAmount);
983
- newAlgNodes.push(newMove);
984
- lastAlgNode = newMove;
985
- return true;
986
1031
  }
987
- function appendCollapsed(newAlgNode) {
988
- if (collapseMoves && lastAlgNode?.is(Move) && newAlgNode.is(Move) && lastAlgNode.quantum.isIdentical(newAlgNode.quantum)) {
989
- newAlgNodes.pop();
990
- if (!appendMoveWithNewAmount(
991
- lastAlgNode,
992
- newAlgNode.amount
993
- )) {
994
- lastAlgNode = newAlgNodes.slice(-1)[0];
995
- }
996
- } else {
997
- if (newAlgNode.is(Move)) {
998
- appendMoveWithNewAmount(newAlgNode, 0);
999
- } else {
1000
- newAlgNodes.push(newAlgNode);
1001
- lastAlgNode = newAlgNode;
1032
+ let offsetAmount = offsetMod(move.amount, mod, offset);
1033
+ return move.modified({ amount: offsetAmount });
1034
+ }
1035
+ if (optionsHelper.cancelAny()) {
1036
+ let canCancelMoveBasedOnQuantum;
1037
+ const axis = optionsHelper.puzzleSpecificSimplifyOptions()?.axis;
1038
+ if (axis) {
1039
+ canCancelMoveBasedOnQuantum = (move) => axis.areQuantumMovesSameAxis(addedMove.quantum, move.quantum);
1040
+ } else {
1041
+ const newMoveQuantumString = addedMove.quantum.toString();
1042
+ canCancelMoveBasedOnQuantum = (move) => move.quantum.toString() === newMoveQuantumString;
1043
+ }
1044
+ const sameDirectionOnly = optionsHelper.cancelQuantum() === "same-direction";
1045
+ const quantumDirections = /* @__PURE__ */ new Map();
1046
+ quantumDirections.set(
1047
+ addedMove.quantum.toString(),
1048
+ Math.sign(addedMove.amount)
1049
+ );
1050
+ let i;
1051
+ for (i = outputPrefix.length - 1; i >= 0; i--) {
1052
+ const move = outputPrefix[i].as(Move);
1053
+ if (!move) {
1054
+ break;
1055
+ }
1056
+ if (!canCancelMoveBasedOnQuantum(move)) {
1057
+ break;
1058
+ }
1059
+ const quantumKey = move.quantum.toString();
1060
+ if (sameDirectionOnly) {
1061
+ const existingQuantumDirectionOnAxis = quantumDirections.get(quantumKey);
1062
+ if (existingQuantumDirectionOnAxis && !areSameDirection(existingQuantumDirectionOnAxis, move)) {
1063
+ break;
1002
1064
  }
1065
+ quantumDirections.set(quantumKey, Math.sign(move.amount));
1066
+ }
1067
+ }
1068
+ const suffix = [...outputPrefix.splice(i + 1), addedMove];
1069
+ if (axis) {
1070
+ outputSuffix = axis.simplifySameAxisMoves(
1071
+ suffix,
1072
+ optionsHelper.cancelPuzzleSpecificModWrap() !== "none"
1073
+ );
1074
+ } else {
1075
+ let amount = suffix.reduce(
1076
+ (sum, move) => sum + move.amount,
1077
+ 0
1078
+ );
1079
+ if (quantumDirections.size !== 1) {
1080
+ throw new Error(
1081
+ "Internal error: multiple quantums when one was expected"
1082
+ );
1003
1083
  }
1084
+ outputSuffix = [new Move(addedMove.quantum, amount)];
1004
1085
  }
1005
- const newOptions = {
1086
+ }
1087
+ outputSuffix = outputSuffix.map((m) => modMove(m)).filter((move) => move.amount !== 0);
1088
+ return output();
1089
+ }
1090
+ function experimentalAppendNode(alg, leaf, options) {
1091
+ const maybeMove = leaf.as(Move);
1092
+ if (maybeMove) {
1093
+ return experimentalAppendMove(alg, maybeMove, options);
1094
+ } else {
1095
+ return new Alg([...alg.childAlgNodes(), leaf]);
1096
+ }
1097
+ }
1098
+
1099
+ // src/cubing/alg/simplify/simplify.ts
1100
+ var Simplify = class extends TraversalDownUp {
1101
+ #newPlaceholderAssociationsMap;
1102
+ #newPlaceholderAssociations() {
1103
+ return this.#newPlaceholderAssociationsMap ?? (this.#newPlaceholderAssociationsMap = /* @__PURE__ */ new Map());
1104
+ }
1105
+ #descendOptions(options) {
1106
+ return {
1107
+ ...options,
1006
1108
  depth: options.depth ? options.depth - 1 : null
1007
1109
  };
1110
+ }
1111
+ *traverseAlg(alg, options) {
1112
+ if (options.depth === 0) {
1113
+ yield* alg.childAlgNodes();
1114
+ return;
1115
+ }
1116
+ let output = [];
1117
+ const newOptions = this.#descendOptions(options);
1008
1118
  for (const algNode of alg.childAlgNodes()) {
1009
- for (const ancestorAlgNode of this.traverseAlgNode(algNode, newOptions)) {
1010
- appendCollapsed(ancestorAlgNode);
1119
+ for (const traversedNode of this.traverseAlgNode(algNode, newOptions)) {
1120
+ output = Array.from(
1121
+ experimentalAppendNode(
1122
+ new Alg(output),
1123
+ traversedNode,
1124
+ newOptions
1125
+ ).childAlgNodes()
1126
+ );
1011
1127
  }
1012
1128
  }
1013
- for (const newAlgNode of newAlgNodes) {
1129
+ for (const newAlgNode of output) {
1014
1130
  yield newAlgNode;
1015
1131
  }
1016
1132
  }
@@ -1019,14 +1135,17 @@ var _Simplify = class extends TraversalDownUp {
1019
1135
  yield grouping;
1020
1136
  return;
1021
1137
  }
1022
- const newOptions = {
1023
- depth: options.depth ? options.depth - 1 : null
1024
- };
1138
+ if (grouping.amount === 0) {
1139
+ return;
1140
+ }
1025
1141
  const newGrouping = new Grouping(
1026
- this.traverseAlg(grouping.alg, newOptions),
1142
+ this.traverseAlg(grouping.alg, this.#descendOptions(options)),
1027
1143
  grouping.amount
1028
1144
  );
1029
- const newPlaceholder = __privateMethod(this, _newPlaceholderAssociations, newPlaceholderAssociations_fn).call(this).get(grouping);
1145
+ if (newGrouping.alg.experimentalIsEmpty()) {
1146
+ return;
1147
+ }
1148
+ const newPlaceholder = this.#newPlaceholderAssociations().get(grouping);
1030
1149
  if (newPlaceholder) {
1031
1150
  newGrouping.experimentalNISSPlaceholder = newPlaceholder;
1032
1151
  newPlaceholder.experimentalNISSGrouping = newGrouping;
@@ -1036,36 +1155,61 @@ var _Simplify = class extends TraversalDownUp {
1036
1155
  *traverseMove(move, _options) {
1037
1156
  yield move;
1038
1157
  }
1158
+ #doChildrenCommute(A, B, options) {
1159
+ if (A.experimentalNumChildAlgNodes() === 1 && B.experimentalNumChildAlgNodes() === 1) {
1160
+ const aMove = Array.from(A.childAlgNodes())[0]?.as(Move);
1161
+ const bMove = Array.from(B.childAlgNodes())[0]?.as(Move);
1162
+ if (!(aMove && bMove)) {
1163
+ return false;
1164
+ }
1165
+ if (bMove.quantum.isIdentical(aMove.quantum)) {
1166
+ return true;
1167
+ }
1168
+ const appendOptionsHelper = new AppendOptionsHelper(options);
1169
+ if (appendOptionsHelper.puzzleSpecificSimplifyOptions()?.axis?.areQuantumMovesSameAxis(aMove.quantum, bMove.quantum)) {
1170
+ return true;
1171
+ }
1172
+ }
1173
+ return false;
1174
+ }
1039
1175
  *traverseCommutator(commutator, options) {
1040
1176
  if (options.depth === 0) {
1041
1177
  yield commutator;
1042
1178
  return;
1043
1179
  }
1044
- const newOptions = {
1045
- depth: options.depth ? options.depth - 1 : null
1046
- };
1047
- yield new Commutator(
1180
+ const newOptions = this.#descendOptions(options);
1181
+ const newCommutator = new Commutator(
1048
1182
  this.traverseAlg(commutator.A, newOptions),
1049
1183
  this.traverseAlg(commutator.B, newOptions)
1050
1184
  );
1185
+ if (newCommutator.A.experimentalIsEmpty() || newCommutator.B.experimentalIsEmpty() || newCommutator.A.isIdentical(newCommutator.B) || newCommutator.A.isIdentical(newCommutator.B.invert()) || this.#doChildrenCommute(newCommutator.A, newCommutator.B, options)) {
1186
+ return;
1187
+ }
1188
+ yield newCommutator;
1051
1189
  }
1052
1190
  *traverseConjugate(conjugate, options) {
1053
1191
  if (options.depth === 0) {
1054
1192
  yield conjugate;
1055
1193
  return;
1056
1194
  }
1057
- const newOptions = {
1058
- depth: options.depth ? options.depth - 1 : null
1059
- };
1060
- yield new Conjugate(
1195
+ const newOptions = this.#descendOptions(options);
1196
+ const newConjugate = new Conjugate(
1061
1197
  this.traverseAlg(conjugate.A, newOptions),
1062
1198
  this.traverseAlg(conjugate.B, newOptions)
1063
1199
  );
1200
+ if (newConjugate.B.experimentalIsEmpty()) {
1201
+ return;
1202
+ }
1203
+ if (newConjugate.A.experimentalIsEmpty() || newConjugate.A.isIdentical(newConjugate.B) || newConjugate.A.isIdentical(newConjugate.B.invert()) || this.#doChildrenCommute(newConjugate.A, newConjugate.B, options)) {
1204
+ yield* conjugate.B.childAlgNodes();
1205
+ return;
1206
+ }
1207
+ yield newConjugate;
1064
1208
  }
1065
1209
  *traversePause(pause, _options) {
1066
1210
  if (pause.experimentalNISSGrouping) {
1067
1211
  const newPause = new Pause();
1068
- __privateMethod(this, _newPlaceholderAssociations, newPlaceholderAssociations_fn).call(this).set(
1212
+ this.#newPlaceholderAssociations().set(
1069
1213
  pause.experimentalNISSGrouping,
1070
1214
  newPause
1071
1215
  );
@@ -1081,23 +1225,6 @@ var _Simplify = class extends TraversalDownUp {
1081
1225
  yield comment;
1082
1226
  }
1083
1227
  };
1084
- var Simplify = _Simplify;
1085
- _newPlaceholderAssociationsMap = new WeakMap();
1086
- _newPlaceholderAssociations = new WeakSet();
1087
- newPlaceholderAssociations_fn = function() {
1088
- return __privateGet(this, _newPlaceholderAssociationsMap) ?? __privateSet(this, _newPlaceholderAssociationsMap, /* @__PURE__ */ new Map());
1089
- };
1090
- _newAmount = new WeakSet();
1091
- newAmount_fn = function(move, deltaAmount, options) {
1092
- let newAmount = move.amount + deltaAmount;
1093
- if (options?.quantumMoveOrder) {
1094
- const order = options.quantumMoveOrder(move.quantum);
1095
- const min = Math.floor(order / 2) + 1 - order;
1096
- newAmount = (newAmount % order + order - min) % order + min;
1097
- }
1098
- return newAmount;
1099
- };
1100
- __privateAdd(Simplify, _newAmount);
1101
1228
  var simplifyInstance = new Simplify();
1102
1229
  var simplify = simplifyInstance.traverseAlg.bind(simplifyInstance);
1103
1230
 
@@ -1229,9 +1356,12 @@ var Alg = class extends AlgCommon {
1229
1356
  }
1230
1357
  return output;
1231
1358
  }
1232
- simplify(options) {
1359
+ experimentalSimplify(options) {
1233
1360
  return new Alg(simplify(this, options ?? {}));
1234
1361
  }
1362
+ simplify(options) {
1363
+ return this.experimentalSimplify(options);
1364
+ }
1235
1365
  };
1236
1366
  function spaceBetween(u1, u2) {
1237
1367
  if (u1.is(Newline) || u2.is(Newline)) {
@@ -1491,29 +1621,6 @@ function experimentalAlgCubingNetLink(options) {
1491
1621
  return url.toString();
1492
1622
  }
1493
1623
 
1494
- // src/cubing/alg/operation.ts
1495
- function experimentalAppendMove(alg, newMove, options) {
1496
- const oldAlgNodes = Array.from(alg.childAlgNodes());
1497
- const oldLastMove = oldAlgNodes[oldAlgNodes.length - 1];
1498
- if (options?.coalesce && oldLastMove && oldLastMove.quantum && oldLastMove.quantum.isIdentical(newMove.quantum)) {
1499
- const newAlgNodes = oldAlgNodes.slice(0, oldAlgNodes.length - 1);
1500
- let newAmount = oldLastMove.amount + newMove.amount;
1501
- const mod = options?.mod;
1502
- if (mod) {
1503
- newAmount = (newAmount % mod + mod) % mod;
1504
- if (newAmount * 2 > mod) {
1505
- newAmount -= mod;
1506
- }
1507
- }
1508
- if (newAmount !== 0) {
1509
- newAlgNodes.push(oldLastMove.modified({ amount: newAmount }));
1510
- }
1511
- return new Alg(newAlgNodes);
1512
- } else {
1513
- return new Alg([...oldAlgNodes, newMove]);
1514
- }
1515
- }
1516
-
1517
1624
  export {
1518
1625
  direct,
1519
1626
  directedGenerator,
@@ -1530,10 +1637,10 @@ export {
1530
1637
  experimentalIs,
1531
1638
  TraversalDownUp,
1532
1639
  TraversalUp,
1640
+ experimentalAppendMove,
1533
1641
  Alg,
1534
1642
  Example,
1535
1643
  keyToMove,
1536
- experimentalAlgCubingNetLink,
1537
- experimentalAppendMove
1644
+ experimentalAlgCubingNetLink
1538
1645
  };
1539
- //# sourceMappingURL=chunk-7OIUETFU.js.map
1646
+ //# sourceMappingURL=chunk-RBZINRTT.js.map