diff --git a/docs/pictures/to-table.svg b/docs/pictures/to-table.svg index b41772cd..6b8300fc 100644 --- a/docs/pictures/to-table.svg +++ b/docs/pictures/to-table.svg @@ -1,10 +1,10 @@ + id="defs104"> + id="g63"> + id="path1" /> + id="path2" /> + id="path3" /> + id="path4" /> + id="path5" /> + id="path6" /> + id="path7" /> + id="path8" /> + id="path9" /> + id="path10" /> + id="path11" /> + id="path12" /> + id="path13" /> + id="path14" /> + id="path15" /> + id="path16" /> + id="path17" /> + id="path18" /> + id="path19" /> + id="path20" /> + id="path21" /> + id="path22" /> + id="path23" /> + id="path24" /> + id="path25" /> + id="path26" /> + id="path27" /> + id="path28" /> + id="path29" /> + id="path30" /> + id="path31" /> + id="path32" /> + id="path33" /> + id="path34" /> + id="path35" /> + id="path36" /> + id="path37" /> + d="M 4.28125 -3.6875 L 4.578125 -3.6875 C 4.734375 -3.6875 4.984375 -3.6875 4.984375 -3.984375 C 4.984375 -4.296875 4.75 -4.296875 4.578125 -4.296875 L 3.421875 -4.296875 C 3.265625 -4.296875 3.015625 -4.296875 3.015625 -4 C 3.015625 -3.6875 3.265625 -3.6875 3.421875 -3.6875 L 3.703125 -3.6875 L 2.984375 -1.5625 C 2.84375 -1.203125 2.796875 -1.015625 2.71875 -0.703125 C 2.65625 -0.890625 2.578125 -1.109375 2.5 -1.296875 L 1.578125 -3.6875 L 1.828125 -3.6875 C 1.96875 -3.6875 2.21875 -3.6875 2.21875 -3.984375 C 2.21875 -4.296875 1.984375 -4.296875 1.828125 -4.296875 L 0.65625 -4.296875 C 0.5 -4.296875 0.265625 -4.296875 0.265625 -3.984375 C 0.265625 -3.6875 0.515625 -3.6875 0.65625 -3.6875 L 0.96875 -3.6875 L 2.375 -0.125 C 2.421875 -0.03125 2.421875 -0.015625 2.421875 0 C 2.421875 0.015625 2.171875 0.84375 2.046875 1.09375 C 1.75 1.640625 1.390625 1.65625 1.25 1.671875 C 1.25 1.65625 1.296875 1.578125 1.296875 1.453125 C 1.296875 1.203125 1.109375 1.015625 0.875 1.015625 C 0.59375 1.015625 0.421875 1.203125 0.421875 1.453125 C 0.421875 1.875 0.765625 2.265625 1.25 2.265625 C 2.25 2.265625 2.703125 0.953125 2.734375 0.84375 Z M 4.28125 -3.6875 " + id="path38" /> + d="M 1.65625 -2.625 C 1.65625 -3.21875 2.234375 -3.75 2.859375 -3.75 C 3.59375 -3.75 4.171875 -3.015625 4.171875 -2.15625 C 4.171875 -1.203125 3.484375 -0.546875 2.78125 -0.546875 C 2 -0.546875 1.65625 -1.421875 1.65625 -1.90625 Z M 1.65625 -0.453125 C 2.0625 -0.03125 2.5 0.0625 2.8125 0.0625 C 3.890625 0.0625 4.859375 -0.890625 4.859375 -2.15625 C 4.859375 -3.375 3.984375 -4.359375 2.921875 -4.359375 C 2.4375 -4.359375 2 -4.171875 1.65625 -3.875 C 1.65625 -4.15625 1.640625 -4.296875 1.25 -4.296875 L 0.53125 -4.296875 C 0.375 -4.296875 0.125 -4.296875 0.125 -3.984375 C 0.125 -3.6875 0.375 -3.6875 0.515625 -3.6875 L 0.96875 -3.6875 L 0.96875 1.609375 L 0.53125 1.609375 C 0.375 1.609375 0.125 1.609375 0.125 1.90625 C 0.125 2.21875 0.375 2.21875 0.515625 2.21875 L 2.109375 2.21875 C 2.25 2.21875 2.5 2.21875 2.5 1.90625 C 2.5 1.609375 2.25 1.609375 2.09375 1.609375 L 1.65625 1.609375 Z M 1.65625 -0.453125 " + id="path39" /> + d="M 4.234375 -1.90625 C 4.4375 -1.90625 4.625 -1.90625 4.625 -2.265625 C 4.625 -3.40625 3.984375 -4.390625 2.6875 -4.390625 C 1.5 -4.390625 0.546875 -3.390625 0.546875 -2.15625 C 0.546875 -0.953125 1.5625 0.0625 2.84375 0.0625 C 4.15625 0.0625 4.625 -0.84375 4.625 -1.09375 C 4.625 -1.359375 4.34375 -1.359375 4.28125 -1.359375 C 4.09375 -1.359375 4.015625 -1.328125 3.953125 -1.140625 C 3.734375 -0.640625 3.1875 -0.546875 2.90625 -0.546875 C 2.15625 -0.546875 1.421875 -1.046875 1.25 -1.90625 Z M 1.265625 -2.5 C 1.40625 -3.234375 2 -3.78125 2.6875 -3.78125 C 3.203125 -3.78125 3.828125 -3.53125 3.921875 -2.5 Z M 1.265625 -2.5 " + id="path40" /> + d="M 4.390625 -3.453125 C 4.515625 -3.453125 4.84375 -3.453125 4.84375 -3.8125 C 4.84375 -4.15625 4.46875 -4.15625 4.34375 -4.15625 L 0.890625 -4.15625 C 0.75 -4.15625 0.375 -4.15625 0.375 -3.8125 C 0.375 -3.453125 0.703125 -3.453125 0.828125 -3.453125 Z M 4.34375 -1.9375 C 4.46875 -1.9375 4.84375 -1.9375 4.84375 -2.296875 C 4.84375 -2.640625 4.515625 -2.640625 4.390625 -2.640625 L 0.828125 -2.640625 C 0.703125 -2.640625 0.375 -2.640625 0.375 -2.296875 C 0.375 -1.9375 0.75 -1.9375 0.890625 -1.9375 Z M 4.34375 -1.9375 " + id="path41" /> + d="M 4.828125 -5.796875 C 4.828125 -5.953125 4.828125 -6.203125 4.53125 -6.203125 C 4.34375 -6.203125 4.296875 -6.09375 4.25 -6.03125 C 4.234375 -5.984375 4.234375 -5.96875 4.09375 -5.71875 C 3.765625 -6 3.3125 -6.203125 2.796875 -6.203125 C 1.515625 -6.203125 0.40625 -4.859375 0.40625 -3.046875 C 0.40625 -1.21875 1.515625 0.109375 2.8125 0.109375 C 3.96875 0.109375 4.828125 -0.78125 4.828125 -1.671875 C 4.828125 -2 4.578125 -2 4.46875 -2 C 4.390625 -2 4.15625 -2 4.140625 -1.71875 C 4.0625 -0.734375 3.265625 -0.5 2.84375 -0.5 C 1.9375 -0.5 1.09375 -1.5625 1.09375 -3.046875 C 1.09375 -4.53125 1.953125 -5.59375 2.84375 -5.59375 C 3.4375 -5.59375 3.984375 -5.140625 4.125 -4.328125 C 4.15625 -4.15625 4.171875 -4 4.46875 -4 C 4.828125 -4 4.828125 -4.203125 4.828125 -4.40625 Z M 4.828125 -5.796875 " + id="path42" /> + d="M 1.65625 -3.828125 C 1.65625 -4.140625 1.65625 -4.296875 1.25 -4.296875 L 0.53125 -4.296875 C 0.375 -4.296875 0.125 -4.296875 0.125 -3.984375 C 0.125 -3.6875 0.375 -3.6875 0.515625 -3.6875 L 0.96875 -3.6875 L 0.96875 -0.609375 L 0.53125 -0.609375 C 0.375 -0.609375 0.125 -0.609375 0.125 -0.296875 C 0.125 0 0.375 0 0.515625 0 L 2.109375 0 C 2.25 0 2.5 0 2.5 -0.296875 C 2.5 -0.609375 2.25 -0.609375 2.09375 -0.609375 L 1.65625 -0.609375 L 1.65625 -2.375 C 1.65625 -3.375 2.390625 -3.75 2.90625 -3.75 C 3.421875 -3.75 3.5625 -3.46875 3.5625 -2.875 L 3.5625 -0.609375 L 3.1875 -0.609375 C 3.015625 -0.609375 2.765625 -0.609375 2.765625 -0.296875 C 2.765625 0 3.046875 0 3.1875 0 L 4.703125 0 C 4.84375 0 5.109375 0 5.109375 -0.296875 C 5.109375 -0.609375 4.859375 -0.609375 4.6875 -0.609375 L 4.25 -0.609375 L 4.25 -2.921875 C 4.25 -3.921875 3.75 -4.359375 2.953125 -4.359375 C 2.296875 -4.359375 1.84375 -4.015625 1.65625 -3.828125 Z M 1.65625 -3.828125 " + id="path43" /> + d="M 3.5625 -0.3125 C 3.578125 0 3.78125 0 3.96875 0 L 4.6875 0 C 4.859375 0 5.109375 0 5.109375 -0.3125 C 5.109375 -0.609375 4.84375 -0.609375 4.703125 -0.609375 L 4.25 -0.609375 L 4.25 -3.890625 C 4.25 -4.203125 4.203125 -4.296875 3.859375 -4.296875 L 3.125 -4.296875 C 2.96875 -4.296875 2.71875 -4.296875 2.71875 -3.984375 C 2.71875 -3.6875 2.984375 -3.6875 3.125 -3.6875 L 3.5625 -3.6875 L 3.5625 -1.5625 C 3.5625 -0.671875 2.765625 -0.546875 2.4375 -0.546875 C 1.65625 -0.546875 1.65625 -0.875 1.65625 -1.203125 L 1.65625 -3.890625 C 1.65625 -4.203125 1.59375 -4.296875 1.25 -4.296875 L 0.53125 -4.296875 C 0.375 -4.296875 0.125 -4.296875 0.125 -3.984375 C 0.125 -3.6875 0.375 -3.6875 0.515625 -3.6875 L 0.96875 -3.6875 L 0.96875 -1.140625 C 0.96875 -0.171875 1.65625 0.0625 2.375 0.0625 C 2.796875 0.0625 3.203125 -0.046875 3.5625 -0.3125 Z M 3.5625 -0.3125 " + id="path44" /> + d="M 4.640625 -1.09375 C 4.640625 -1.359375 4.359375 -1.359375 4.296875 -1.359375 C 4.140625 -1.359375 4.03125 -1.34375 3.96875 -1.140625 C 3.90625 -1.015625 3.71875 -0.546875 2.984375 -0.546875 C 2.140625 -0.546875 1.421875 -1.25 1.421875 -2.15625 C 1.421875 -2.625 1.6875 -3.78125 3.046875 -3.78125 C 3.25 -3.78125 3.640625 -3.78125 3.640625 -3.6875 C 3.65625 -3.34375 3.84375 -3.203125 4.078125 -3.203125 C 4.3125 -3.203125 4.53125 -3.375 4.53125 -3.65625 C 4.53125 -4.390625 3.484375 -4.390625 3.046875 -4.390625 C 1.328125 -4.390625 0.734375 -3.03125 0.734375 -2.15625 C 0.734375 -0.953125 1.671875 0.0625 2.921875 0.0625 C 4.3125 0.0625 4.640625 -0.921875 4.640625 -1.09375 Z M 4.640625 -1.09375 " + id="path45" /> + d="M 3.515625 -3.046875 C 3.515625 -4.234375 3.046875 -5.140625 2.703125 -5.625 C 2.171875 -6.359375 1.421875 -6.921875 1.1875 -6.921875 C 0.9375 -6.921875 0.875 -6.71875 0.875 -6.640625 C 0.875 -6.484375 0.984375 -6.421875 1.03125 -6.390625 C 2.671875 -5.296875 2.828125 -3.703125 2.828125 -3.046875 C 2.828125 -2.046875 2.453125 -0.671875 1.109375 0.234375 C 0.953125 0.34375 0.875 0.390625 0.875 0.53125 C 0.875 0.625 0.9375 0.8125 1.1875 0.8125 C 1.46875 0.8125 3.515625 -0.5 3.515625 -3.046875 Z M 3.515625 -3.046875 " + id="path46" /> + d="M 1.703125 -2.734375 L 3.0625 -2.734375 C 3.0625 -2.328125 3.0625 -2.171875 3.40625 -2.171875 C 3.75 -2.171875 3.75 -2.390625 3.75 -2.578125 L 3.75 -3.515625 C 3.75 -3.703125 3.75 -3.921875 3.40625 -3.921875 C 3.0625 -3.921875 3.0625 -3.765625 3.0625 -3.34375 L 1.703125 -3.34375 L 1.703125 -5.484375 L 4.203125 -5.484375 L 4.203125 -4.953125 C 4.203125 -4.765625 4.203125 -4.546875 4.53125 -4.546875 C 4.890625 -4.546875 4.890625 -4.75 4.890625 -4.953125 L 4.890625 -5.6875 C 4.890625 -5.984375 4.828125 -6.09375 4.484375 -6.09375 L 0.6875 -6.09375 C 0.53125 -6.09375 0.28125 -6.09375 0.28125 -5.78125 C 0.28125 -5.484375 0.53125 -5.484375 0.6875 -5.484375 L 1.015625 -5.484375 L 1.015625 -0.609375 L 0.6875 -0.609375 C 0.53125 -0.609375 0.28125 -0.609375 0.28125 -0.296875 C 0.28125 0 0.53125 0 0.6875 0 L 2.21875 0 C 2.375 0 2.625 0 2.625 -0.296875 C 2.625 -0.609375 2.375 -0.609375 2.21875 -0.609375 L 1.703125 -0.609375 Z M 1.703125 -2.734375 " + id="path47" /> + d="M 3.078125 -3.890625 C 3.078125 -4.203125 3.015625 -4.296875 2.6875 -4.296875 L 1.265625 -4.296875 C 1.109375 -4.296875 0.859375 -4.296875 0.859375 -4 C 0.859375 -3.6875 1.109375 -3.6875 1.265625 -3.6875 L 2.390625 -3.6875 L 2.390625 -0.609375 L 1.1875 -0.609375 C 1.03125 -0.609375 0.78125 -0.609375 0.78125 -0.296875 C 0.78125 0 1.03125 0 1.1875 0 L 4.125 0 C 4.28125 0 4.53125 0 4.53125 -0.296875 C 4.53125 -0.609375 4.28125 -0.609375 4.125 -0.609375 L 3.078125 -0.609375 Z M 3.078125 -5.609375 C 3.078125 -5.875 2.859375 -6.09375 2.578125 -6.09375 C 2.296875 -6.09375 2.078125 -5.875 2.078125 -5.609375 C 2.078125 -5.328125 2.296875 -5.109375 2.578125 -5.109375 C 2.859375 -5.109375 3.078125 -5.328125 3.078125 -5.609375 Z M 3.078125 -5.609375 " + id="path48" /> + d="M 3.5625 -0.5 C 3.5625 -0.140625 3.5625 0 3.96875 0 L 4.6875 0 C 4.859375 0 5.109375 0 5.109375 -0.3125 C 5.109375 -0.609375 4.84375 -0.609375 4.703125 -0.609375 L 4.25 -0.609375 L 4.25 -5.6875 C 4.25 -5.984375 4.203125 -6.09375 3.859375 -6.09375 L 3.125 -6.09375 C 2.96875 -6.09375 2.71875 -6.09375 2.71875 -5.78125 C 2.71875 -5.484375 2.984375 -5.484375 3.125 -5.484375 L 3.5625 -5.484375 L 3.5625 -3.90625 C 3.234375 -4.203125 2.828125 -4.359375 2.40625 -4.359375 C 1.3125 -4.359375 0.359375 -3.40625 0.359375 -2.140625 C 0.359375 -0.90625 1.25 0.0625 2.3125 0.0625 C 2.875 0.0625 3.296875 -0.203125 3.5625 -0.5 Z M 3.5625 -2.640625 L 3.5625 -1.9375 C 3.5625 -1.375 3.125 -0.546875 2.359375 -0.546875 C 1.640625 -0.546875 1.046875 -1.25 1.046875 -2.140625 C 1.046875 -3.09375 1.75 -3.75 2.4375 -3.75 C 3.078125 -3.75 3.5625 -3.1875 3.5625 -2.640625 Z M 3.5625 -2.640625 " + id="path49" /> + d="M 1.65625 -2.4375 L 2.90625 -2.4375 C 4.0625 -2.4375 4.78125 -3.34375 4.78125 -4.265625 C 4.78125 -5.1875 4.046875 -6.09375 2.90625 -6.09375 L 0.671875 -6.09375 C 0.515625 -6.09375 0.265625 -6.09375 0.265625 -5.796875 C 0.265625 -5.484375 0.515625 -5.484375 0.671875 -5.484375 L 0.96875 -5.484375 L 0.96875 -0.609375 L 0.671875 -0.609375 C 0.515625 -0.609375 0.265625 -0.609375 0.265625 -0.296875 C 0.265625 0 0.515625 0 0.671875 0 L 1.953125 0 C 2.109375 0 2.359375 0 2.359375 -0.296875 C 2.359375 -0.609375 2.109375 -0.609375 1.953125 -0.609375 L 1.65625 -0.609375 Z M 1.65625 -5.484375 L 2.71875 -5.484375 C 3.671875 -5.484375 4.09375 -4.796875 4.09375 -4.265625 C 4.09375 -3.734375 3.671875 -3.046875 2.71875 -3.046875 L 1.65625 -3.046875 Z M 1.65625 -5.484375 " + id="path50" /> + d="M 2.953125 -5.484375 L 4.03125 -5.484375 C 4.1875 -5.484375 4.453125 -5.484375 4.453125 -5.78125 C 4.453125 -6.09375 4.1875 -6.09375 4.03125 -6.09375 L 1.203125 -6.09375 C 1.046875 -6.09375 0.78125 -6.09375 0.78125 -5.796875 C 0.78125 -5.484375 1.046875 -5.484375 1.203125 -5.484375 L 2.265625 -5.484375 L 2.265625 -0.609375 L 1.203125 -0.609375 C 1.046875 -0.609375 0.78125 -0.609375 0.78125 -0.3125 C 0.78125 0 1.046875 0 1.203125 0 L 4.03125 0 C 4.1875 0 4.453125 0 4.453125 -0.296875 C 4.453125 -0.609375 4.1875 -0.609375 4.03125 -0.609375 L 2.953125 -0.609375 Z M 2.953125 -5.484375 " + id="path51" /> + d="M 4.28125 -3.6875 L 4.578125 -3.6875 C 4.734375 -3.6875 4.984375 -3.6875 4.984375 -3.984375 C 4.984375 -4.296875 4.75 -4.296875 4.578125 -4.296875 L 3.421875 -4.296875 C 3.265625 -4.296875 3.015625 -4.296875 3.015625 -4 C 3.015625 -3.6875 3.265625 -3.6875 3.421875 -3.6875 L 3.703125 -3.6875 L 2.609375 -0.484375 L 1.53125 -3.6875 L 1.796875 -3.6875 C 1.953125 -3.6875 2.203125 -3.6875 2.203125 -3.984375 C 2.203125 -4.296875 1.96875 -4.296875 1.796875 -4.296875 L 0.640625 -4.296875 C 0.484375 -4.296875 0.234375 -4.296875 0.234375 -3.984375 C 0.234375 -3.6875 0.484375 -3.6875 0.640625 -3.6875 L 0.9375 -3.6875 L 2.078125 -0.296875 C 2.203125 0.046875 2.40625 0.046875 2.609375 0.046875 C 2.796875 0.046875 3.03125 0.046875 3.140625 -0.296875 Z M 4.28125 -3.6875 " + id="path52" /> + d="M 2.75 -3.5625 L 4.265625 -5.484375 C 4.625 -5.484375 4.828125 -5.484375 4.828125 -5.796875 C 4.828125 -6.09375 4.5625 -6.09375 4.421875 -6.09375 L 3.546875 -6.09375 C 3.40625 -6.09375 3.140625 -6.09375 3.140625 -5.78125 C 3.140625 -5.484375 3.40625 -5.484375 3.546875 -5.484375 L 1.453125 -2.828125 L 1.453125 -5.484375 L 1.671875 -5.484375 C 1.8125 -5.484375 2.078125 -5.484375 2.078125 -5.78125 C 2.078125 -6.09375 1.828125 -6.09375 1.671875 -6.09375 L 0.671875 -6.09375 C 0.515625 -6.09375 0.265625 -6.09375 0.265625 -5.796875 C 0.265625 -5.484375 0.515625 -5.484375 0.671875 -5.484375 L 0.890625 -5.484375 L 0.890625 -0.609375 L 0.671875 -0.609375 C 0.515625 -0.609375 0.265625 -0.609375 0.265625 -0.3125 C 0.265625 0 0.515625 0 0.671875 0 L 1.671875 0 C 1.8125 0 2.078125 0 2.078125 -0.296875 C 2.078125 -0.609375 1.828125 -0.609375 1.671875 -0.609375 L 1.453125 -0.609375 L 1.453125 -1.9375 L 2.375 -3.09375 L 3.765625 -0.609375 C 3.625 -0.609375 3.375 -0.609375 3.375 -0.3125 C 3.375 0 3.625 0 3.78125 0 L 4.53125 0 C 4.671875 0 4.9375 0 4.9375 -0.296875 C 4.9375 -0.609375 4.703125 -0.609375 4.421875 -0.609375 C 4.390625 -0.640625 4.359375 -0.703125 4.34375 -0.734375 Z M 2.75 -3.5625 " + id="path53" /> + d="M 1.09375 -4 C 1.0625 -4.296875 0.875 -4.296875 0.6875 -4.296875 L 0.375 -4.296875 C 0.21875 -4.296875 -0.046875 -4.296875 -0.046875 -4 C -0.046875 -3.6875 0.171875 -3.6875 0.53125 -3.6875 L 0.53125 -0.609375 C 0.171875 -0.609375 -0.046875 -0.609375 -0.046875 -0.296875 C -0.046875 0 0.234375 0 0.375 0 L 1.25 0 C 1.390625 0 1.65625 0 1.65625 -0.296875 C 1.65625 -0.609375 1.453125 -0.609375 1.09375 -0.609375 L 1.09375 -2.390625 C 1.09375 -3.28125 1.5 -3.75 1.90625 -3.75 C 2.140625 -3.75 2.265625 -3.578125 2.265625 -2.9375 L 2.265625 -0.609375 C 2.078125 -0.609375 1.828125 -0.609375 1.828125 -0.296875 C 1.828125 0 2.109375 0 2.25 0 L 2.984375 0 C 3.140625 0 3.40625 0 3.40625 -0.296875 C 3.40625 -0.609375 3.1875 -0.609375 2.828125 -0.609375 L 2.828125 -2.390625 C 2.828125 -3.28125 3.234375 -3.75 3.65625 -3.75 C 3.875 -3.75 4.015625 -3.578125 4.015625 -2.9375 L 4.015625 -0.609375 C 3.828125 -0.609375 3.578125 -0.609375 3.578125 -0.296875 C 3.578125 0 3.84375 0 3.984375 0 L 4.734375 0 C 4.890625 0 5.140625 0 5.140625 -0.296875 C 5.140625 -0.609375 4.9375 -0.609375 4.578125 -0.609375 L 4.578125 -3.015625 C 4.578125 -3.21875 4.578125 -4.359375 3.6875 -4.359375 C 3.390625 -4.359375 2.984375 -4.234375 2.703125 -3.84375 C 2.546875 -4.171875 2.265625 -4.359375 1.9375 -4.359375 C 1.625 -4.359375 1.328125 -4.21875 1.09375 -4 Z M 1.09375 -4 " + id="path54" /> + d="M 1.65625 -3.875 L 1.65625 -5.6875 C 1.65625 -5.984375 1.59375 -6.09375 1.25 -6.09375 L 0.53125 -6.09375 C 0.375 -6.09375 0.125 -6.09375 0.125 -5.78125 C 0.125 -5.484375 0.375 -5.484375 0.515625 -5.484375 L 0.96875 -5.484375 L 0.96875 -0.40625 C 0.96875 -0.203125 0.96875 0 1.3125 0 C 1.65625 0 1.65625 -0.203125 1.65625 -0.453125 C 2.0625 -0.03125 2.5 0.0625 2.8125 0.0625 C 3.890625 0.0625 4.859375 -0.890625 4.859375 -2.15625 C 4.859375 -3.375 3.984375 -4.359375 2.921875 -4.359375 C 2.4375 -4.359375 2 -4.171875 1.65625 -3.875 Z M 1.65625 -1.90625 L 1.65625 -2.625 C 1.65625 -3.21875 2.234375 -3.75 2.859375 -3.75 C 3.59375 -3.75 4.171875 -3.015625 4.171875 -2.15625 C 4.171875 -1.203125 3.484375 -0.546875 2.78125 -0.546875 C 2 -0.546875 1.65625 -1.421875 1.65625 -1.90625 Z M 1.65625 -1.90625 " + id="path55" /> + d="M 4.25 -2.921875 C 4.25 -3.921875 3.75 -4.359375 2.953125 -4.359375 C 2.296875 -4.359375 1.84375 -4.015625 1.65625 -3.828125 L 1.65625 -5.6875 C 1.65625 -5.984375 1.59375 -6.09375 1.25 -6.09375 L 0.53125 -6.09375 C 0.375 -6.09375 0.125 -6.09375 0.125 -5.78125 C 0.125 -5.484375 0.375 -5.484375 0.515625 -5.484375 L 0.96875 -5.484375 L 0.96875 -0.609375 L 0.53125 -0.609375 C 0.375 -0.609375 0.125 -0.609375 0.125 -0.296875 C 0.125 0 0.375 0 0.515625 0 L 2.109375 0 C 2.25 0 2.5 0 2.5 -0.296875 C 2.5 -0.609375 2.25 -0.609375 2.09375 -0.609375 L 1.65625 -0.609375 L 1.65625 -2.375 C 1.65625 -3.375 2.390625 -3.75 2.90625 -3.75 C 3.421875 -3.75 3.5625 -3.46875 3.5625 -2.875 L 3.5625 -0.609375 L 3.1875 -0.609375 C 3.015625 -0.609375 2.765625 -0.609375 2.765625 -0.296875 C 2.765625 0 3.046875 0 3.1875 0 L 4.703125 0 C 4.84375 0 5.109375 0 5.109375 -0.296875 C 5.109375 -0.609375 4.859375 -0.609375 4.6875 -0.609375 L 4.25 -0.609375 Z M 4.25 -2.921875 " + id="path56" /> + d="M 1.59375 -5.484375 L 2.84375 -5.484375 C 3.6875 -5.484375 3.90625 -4.859375 3.90625 -4.53125 C 3.90625 -4.125 3.59375 -3.46875 2.625 -3.46875 L 1.59375 -3.46875 Z M 3.515625 -3.1875 C 4.15625 -3.40625 4.59375 -3.921875 4.59375 -4.546875 C 4.59375 -5.28125 3.984375 -6.09375 2.875 -6.09375 L 0.625 -6.09375 C 0.484375 -6.09375 0.234375 -6.09375 0.234375 -5.796875 C 0.234375 -5.484375 0.484375 -5.484375 0.640625 -5.484375 L 0.90625 -5.484375 L 0.90625 -0.609375 L 0.640625 -0.609375 C 0.484375 -0.609375 0.234375 -0.609375 0.234375 -0.296875 C 0.234375 0 0.484375 0 0.625 0 L 3.078125 0 C 4.203125 0 4.8125 -0.890625 4.8125 -1.671875 C 4.8125 -2.359375 4.328125 -3 3.515625 -3.1875 Z M 2.859375 -0.609375 L 1.59375 -0.609375 L 1.59375 -2.859375 L 2.96875 -2.859375 C 3.8125 -2.859375 4.109375 -2.140625 4.109375 -1.6875 C 4.109375 -1.203125 3.734375 -0.609375 2.859375 -0.609375 Z M 2.859375 -0.609375 " + id="path57" /> + d="M 2.859375 -2.21875 L 4 -3.6875 L 4.390625 -3.6875 C 4.53125 -3.6875 4.8125 -3.6875 4.8125 -3.984375 C 4.8125 -4.296875 4.546875 -4.296875 4.390625 -4.296875 L 3.234375 -4.296875 C 3.078125 -4.296875 2.828125 -4.296875 2.828125 -4 C 2.828125 -3.6875 3.046875 -3.6875 3.3125 -3.6875 L 2.578125 -2.6875 L 1.828125 -3.6875 C 2.078125 -3.6875 2.296875 -3.6875 2.296875 -4 C 2.296875 -4.296875 2.046875 -4.296875 1.90625 -4.296875 L 0.734375 -4.296875 C 0.59375 -4.296875 0.328125 -4.296875 0.328125 -3.984375 C 0.328125 -3.6875 0.59375 -3.6875 0.734375 -3.6875 L 1.140625 -3.6875 L 2.3125 -2.21875 L 1.078125 -0.609375 L 0.671875 -0.609375 C 0.53125 -0.609375 0.265625 -0.609375 0.265625 -0.296875 C 0.265625 0 0.53125 0 0.671875 0 L 1.84375 0 C 2 0 2.25 0 2.25 -0.296875 C 2.25 -0.609375 2.03125 -0.609375 1.71875 -0.609375 L 2.578125 -1.828125 L 3.46875 -0.609375 C 3.1875 -0.609375 2.96875 -0.609375 2.96875 -0.296875 C 2.96875 0 3.21875 0 3.375 0 L 4.53125 0 C 4.671875 0 4.9375 0 4.9375 -0.296875 C 4.9375 -0.609375 4.6875 -0.609375 4.53125 -0.609375 L 4.140625 -0.609375 Z M 2.859375 -2.21875 " + id="path58" /> + d="M 4.46875 -3.5625 C 4.6875 -3.765625 4.6875 -3.78125 4.6875 -3.953125 C 4.6875 -4.296875 4.46875 -4.296875 4.28125 -4.296875 L 0.890625 -4.296875 C 0.5625 -4.296875 0.484375 -4.21875 0.484375 -3.890625 L 0.484375 -3.421875 C 0.484375 -3.234375 0.484375 -3.015625 0.828125 -3.015625 C 1.171875 -3.015625 1.171875 -3.234375 1.171875 -3.421875 L 1.171875 -3.6875 L 3.65625 -3.6875 L 0.546875 -0.734375 C 0.34375 -0.53125 0.328125 -0.515625 0.328125 -0.34375 C 0.328125 0 0.546875 0 0.734375 0 L 4.515625 0 C 4.734375 -0.0625 4.734375 -0.265625 4.734375 -0.40625 L 4.734375 -0.984375 C 4.734375 -1.171875 4.734375 -1.390625 4.390625 -1.390625 C 4.046875 -1.390625 4.046875 -1.1875 4.046875 -0.984375 L 4.046875 -0.609375 L 1.359375 -0.609375 Z M 4.46875 -3.5625 " + id="path59" /> + id="path60" /> - - - + id="path61" /> + id="path62" /> + id="path63" /> + d="M 399 0 L 400.308594 0 L 400.308594 104 L 399 104 Z M 399 0 " + id="path64" /> + d="M 0 104 L 400.308594 104 L 400.308594 106 L 0 106 Z M 0 104 " + id="path65" /> + d="M 399 107 L 400.308594 107 L 400.308594 121 L 399 121 Z M 399 107 " + id="path66" /> + d="M 0 119 L 400.308594 119 L 400.308594 121 L 0 121 Z M 0 119 " + id="path67" /> + d="M 399 120 L 400.308594 120 L 400.308594 133 L 399 133 Z M 399 120 " + id="path68" /> + d="M 0 132 L 400.308594 132 L 400.308594 133 L 0 133 Z M 0 132 " + id="path69" /> + d="M 399 132 L 400.308594 132 L 400.308594 145 L 399 145 Z M 399 132 " + id="path70" /> + d="M 0 144 L 400.308594 144 L 400.308594 146 L 0 146 Z M 0 144 " + id="path71" /> + d="M 399 144 L 400.308594 144 L 400.308594 158 L 399 158 Z M 399 144 " + id="path72" /> + d="M 0 156 L 400.308594 156 L 400.308594 158 L 0 158 Z M 0 156 " + id="path73" /> + d="M 399 157 L 400.308594 157 L 400.308594 170 L 399 170 Z M 399 157 " + id="path74" /> + d="M 0 169 L 400.308594 169 L 400.308594 170 L 0 170 Z M 0 169 " + id="path75" /> + d="M 399 169 L 400.308594 169 L 400.308594 182 L 399 182 Z M 399 169 " + id="path76" /> + d="M 0 181 L 400.308594 181 L 400.308594 183 L 0 183 Z M 0 181 " + id="path77" /> + d="M 399 181 L 400.308594 181 L 400.308594 195 L 399 195 Z M 399 181 " + id="path78" /> + d="M 0 194 L 400.308594 194 L 400.308594 195 L 0 195 Z M 0 194 " + id="path79" /> + d="M 399 194 L 400.308594 194 L 400.308594 207 L 399 207 Z M 399 194 " + id="path80" /> + d="M 0 206 L 400.308594 206 L 400.308594 207 L 0 207 Z M 0 206 " + id="path81" /> + d="M 399 206 L 400.308594 206 L 400.308594 219 L 399 219 Z M 399 206 " + id="path82" /> + d="M 0 218 L 400.308594 218 L 400.308594 220 L 0 220 Z M 0 218 " + id="path83" /> + d="M 200 218 L 201 218 L 201 231.101562 L 200 231.101562 Z M 200 218 " + id="path84" /> + d="M 200 219 L 221 219 L 221 231.101562 L 200 231.101562 Z M 200 219 " + id="path85" /> + d="M 220 218 L 222 218 L 222 231.101562 L 220 231.101562 Z M 220 218 " + id="path86" /> + d="M 221 219 L 241 219 L 241 231.101562 L 221 231.101562 Z M 221 219 " + id="path87" /> + d="M 240 218 L 242 218 L 242 231.101562 L 240 231.101562 Z M 240 218 " + id="path88" /> + d="M 241 219 L 261 219 L 261 231.101562 L 241 231.101562 Z M 241 219 " + id="path89" /> + d="M 260 218 L 262 218 L 262 231.101562 L 260 231.101562 Z M 260 218 " + id="path90" /> + d="M 261 219 L 281 219 L 281 231.101562 L 261 231.101562 Z M 261 219 " + id="path91" /> + d="M 280 218 L 281 218 L 281 231.101562 L 280 231.101562 Z M 280 218 " + id="path92" /> + d="M 280 219 L 301 219 L 301 231.101562 L 280 231.101562 Z M 280 219 " + id="path93" /> + d="M 300 218 L 301 218 L 301 231.101562 L 300 231.101562 Z M 300 218 " + id="path94" /> + d="M 300 219 L 322 219 L 322 231.101562 L 300 231.101562 Z M 300 219 " + id="path95" /> + d="M 321 218 L 322 218 L 322 231.101562 L 321 231.101562 Z M 321 218 " + id="path96" /> + d="M 321 219 L 341 219 L 341 231.101562 L 321 231.101562 Z M 321 219 " + id="path97" /> + d="M 340 218 L 342 218 L 342 231.101562 L 340 231.101562 Z M 340 218 " + id="path98" /> + d="M 341 219 L 360 219 L 360 231.101562 L 341 231.101562 Z M 341 219 " + id="path99" /> + d="M 359 218 L 360 218 L 360 231.101562 L 359 231.101562 Z M 359 218 " + id="path100" /> + d="M 359 219 L 381 219 L 381 231.101562 L 359 231.101562 Z M 359 219 " + id="path101" /> + d="M 380 218 L 381 218 L 381 231.101562 L 380 231.101562 Z M 380 218 " + id="path102" /> + d="M 380 219 L 400 219 L 400 231.101562 L 380 231.101562 Z M 380 219 " + id="path103" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - + d="M 399 218 L 400.308594 218 L 400.308594 231.101562 L 399 231.101562 Z M 399 218 " + id="path104" /> + d="M -0.0016875 -0.00184375 L -0.0016875 102.963 " + transform="matrix(1, 0, 0, -1, 200.447, 102.963)" + id="path105" /> + id="g114"> + id="use105" /> + id="use106" /> + id="use107" /> + id="use108" /> + id="use109" /> + id="use110" /> + id="use111" /> + id="use112" /> + id="use113" /> + id="use114" /> + d="M -0.0014375 -0.00184375 L -0.0014375 102.963 " + transform="matrix(1, 0, 0, -1, 221.103, 102.963)" + id="path114" /> + id="g125"> + id="use115" /> + id="use116" /> + id="use117" /> + id="use118" /> + id="use119" /> + id="use120" /> + id="use121" /> + id="use122" /> + id="use123" /> + id="use124" /> + id="use125" /> + d="M -0.0014375 -0.00184375 L -0.0014375 102.963 " + transform="matrix(1, 0, 0, -1, 240.978, 102.963)" + id="path125" /> + id="g144"> + id="use126" /> + id="use127" /> + id="use128" /> + id="use129" /> + id="use130" /> + id="use131" /> + id="use132" /> + id="use133" /> + id="use134" /> + id="use135" /> + id="use136" /> + id="use137" /> + id="use138" /> + id="use139" /> + id="use140" /> + id="use141" /> + id="use142" /> + id="use143" /> + id="use144" /> + d="M -0.0014375 -0.00184375 L -0.0014375 102.963 " + transform="matrix(1, 0, 0, -1, 260.853, 102.963)" + id="path144" /> + id="g152"> + id="use145" /> + id="use146" /> + id="use147" /> + id="use148" /> + id="use149" /> + id="use150" /> + id="use151" /> + id="use152" /> + d="M 0.00146875 -0.00184375 L 0.00146875 102.963 " + transform="matrix(1, 0, 0, -1, 280.729, 102.963)" + id="path152" /> + id="g163"> + id="use153" /> + id="use154" /> + id="use155" /> + id="use156" /> + id="use157" /> + id="use158" /> + id="use159" /> + id="use160" /> + id="use161" /> + id="use162" /> + id="use163" /> + d="M 0.00146875 -0.00184375 L 0.00146875 102.963 " + transform="matrix(1, 0, 0, -1, 300.604, 102.963)" + id="path163" /> + id="g172"> + id="use164" /> + id="use165" /> + id="use166" /> + id="use167" /> + id="use168" /> + id="use169" /> + id="use170" /> + id="use171" /> + id="use172" /> + d="M 0.00171875 -0.00184375 L 0.00171875 102.963 " + transform="matrix(1, 0, 0, -1, 321.26, 102.963)" + id="path172" /> + id="g184"> + id="use173" /> + id="use174" /> + id="use175" /> + id="use176" /> + id="use177" /> + id="use178" /> + id="use179" /> + id="use180" /> + id="use181" /> + id="use182" /> + id="use183" /> + id="use184" /> + d="M 0.00071875 -0.00184375 L 0.00071875 102.963 " + transform="matrix(1, 0, 0, -1, 341.136, 102.963)" + id="path184" /> + id="g196"> + id="use185" /> + id="use186" /> + id="use187" /> + id="use188" /> + id="use189" /> + id="use190" /> + id="use191" /> + id="use192" /> + id="use193" /> + id="use194" /> + id="use195" /> + id="use196" /> + d="M 0.000125 -0.00184375 L 0.000125 102.963 " + transform="matrix(1, 0, 0, -1, 359.578, 102.963)" + id="path196" /> + id="g203"> + id="use197" /> + id="use198" /> + id="use199" /> + id="use200" /> + id="use201" /> + id="use202" /> + id="use203" /> + d="M 0.000375 -0.00184375 L 0.000375 102.963 " + transform="matrix(1, 0, 0, -1, 380.234, 102.963)" + id="path203" /> + id="g214"> + id="use204" /> + id="use205" /> + id="use206" /> + id="use207" /> + id="use208" /> + id="use209" /> + id="use210" /> + id="use211" /> + id="use212" /> + id="use213" /> + id="use214" /> + id="g215"> + d="M 0.000375 -0.00184375 L 0.000375 102.963 " + transform="matrix(1, 0, 0, -1, 400.109, 102.963)" + id="path214" /> + id="g216"> + d="M -0.000000000000056843 -0.0016875 L 400.308594 -0.0016875 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 104.928)" + id="path215" /> + id="g224"> + id="use216" /> + id="use217" /> + id="use218" /> + id="use219" /> + id="use220" /> + id="use221" /> + id="use222" /> + id="use223" /> + id="use224" /> + id="g241"> + id="use225" /> + id="use226" /> + id="use227" /> + id="use228" /> + id="use229" /> + id="use230" /> + id="use231" /> + id="use232" /> + id="use233" /> + id="use234" /> + id="use235" /> + id="use236" /> + id="use237" /> + id="use238" /> + id="use239" /> + id="use240" /> - + id="use241" /> + d="M -0.0016875 -0.001875 L -0.0016875 11.955156 " + transform="matrix(1, 0, 0, -1, 200.447, 119.92)" + id="path241" /> + d="M 200.644531 119.921875 L 220.902344 119.921875 L 220.902344 107.964844 L 200.644531 107.964844 Z M 200.644531 119.921875 " + id="path242" /> + id="g242"> + id="use242" /> + d="M -0.0014375 -0.001875 L -0.0014375 11.955156 " + transform="matrix(1, 0, 0, -1, 221.103, 119.92)" + id="path243" /> + d="M 221.300781 119.921875 L 240.777344 119.921875 L 240.777344 107.964844 L 221.300781 107.964844 Z M 221.300781 119.921875 " + id="path244" /> + id="g244"> + id="use244" /> + d="M -0.0014375 -0.001875 L -0.0014375 11.955156 " + transform="matrix(1, 0, 0, -1, 240.978, 119.92)" + id="path245" /> + d="M 241.175781 119.921875 L 260.652344 119.921875 L 260.652344 107.964844 L 241.175781 107.964844 Z M 241.175781 119.921875 " + id="path246" /> + id="g246"> + id="use246" /> + d="M -0.0014375 -0.001875 L -0.0014375 11.955156 " + transform="matrix(1, 0, 0, -1, 260.853, 119.92)" + id="path247" /> + d="M 261.054688 119.921875 L 280.53125 119.921875 L 280.53125 107.964844 L 261.054688 107.964844 Z M 261.054688 119.921875 " + id="path248" /> + id="g248"> + id="use248" /> + d="M 0.00146875 -0.001875 L 0.00146875 11.955156 " + transform="matrix(1, 0, 0, -1, 280.729, 119.92)" + id="path249" /> + d="M 280.929688 119.921875 L 300.40625 119.921875 L 300.40625 107.964844 L 280.929688 107.964844 Z M 280.929688 119.921875 " + id="path250" /> + id="g250"> + id="use250" /> + d="M 0.00146875 -0.001875 L 0.00146875 11.955156 " + transform="matrix(1, 0, 0, -1, 300.604, 119.92)" + id="path251" /> + d="M 300.804688 119.921875 L 321.0625 119.921875 L 321.0625 107.964844 L 300.804688 107.964844 Z M 300.804688 119.921875 " + id="path252" /> + id="g252"> + id="use252" /> + d="M 0.00171875 -0.001875 L 0.00171875 11.955156 " + transform="matrix(1, 0, 0, -1, 321.26, 119.92)" + id="path253" /> + d="M 321.460938 119.921875 L 340.9375 119.921875 L 340.9375 107.964844 L 321.460938 107.964844 Z M 321.460938 119.921875 " + id="path254" /> + id="g254"> + id="use254" /> + d="M 0.00071875 -0.001875 L 0.00071875 11.955156 " + transform="matrix(1, 0, 0, -1, 341.136, 119.92)" + id="path255" /> + d="M 341.335938 119.921875 L 359.378906 119.921875 L 359.378906 107.964844 L 341.335938 107.964844 Z M 341.335938 119.921875 " + id="path256" /> + id="g256"> + id="use256" /> + d="M 0.000125 -0.001875 L 0.000125 11.955156 " + transform="matrix(1, 0, 0, -1, 359.578, 119.92)" + id="path257" /> + d="M 359.777344 119.921875 L 380.035156 119.921875 L 380.035156 107.964844 L 359.777344 107.964844 Z M 359.777344 119.921875 " + id="path258" /> + id="g258"> + id="use258" /> - - - + d="M 0.001375 -0.001875 L 0.001375 11.955156 " + transform="matrix(1, 0, 0, -1, 380.233, 119.92)" + id="path259" /> + + id="g260"> + id="use260" /> + clip-path="url(#clip-2)" + id="g261"> + d="M 0.000375 -0.001875 L 0.000375 11.955156 " + transform="matrix(1, 0, 0, -1, 400.109, 119.92)" + id="path261" /> + clip-path="url(#clip-3)" + id="g262"> + d="M -0.000000000000056843 0.0018125 L 400.308594 0.0018125 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 120.119)" + id="path262" /> + id="g270"> + id="use262" /> + id="use263" /> + id="use264" /> + id="use265" /> + id="use266" /> + id="use267" /> + id="use268" /> + id="use269" /> + id="use270" /> + id="g288"> + id="use271" /> + id="use272" /> + id="use273" /> + id="use274" /> + id="use275" /> + id="use276" /> + id="use277" /> + id="use278" /> + id="use279" /> + id="use280" /> + id="use281" /> + id="use282" /> + id="use283" /> + id="use284" /> + id="use285" /> + id="use286" /> + id="use287" /> - + id="use288" /> + d="M -0.0016875 0.0005625 L -0.0016875 11.953688 " + transform="matrix(1, 0, 0, -1, 200.447, 132.274)" + id="path288" /> + d="M 200.644531 132.273438 L 220.902344 132.273438 L 220.902344 120.320312 L 200.644531 120.320312 Z M 200.644531 132.273438 " + id="path289" /> + id="g289"> + id="use289" /> + d="M -0.0014375 0.0005625 L -0.0014375 11.953688 " + transform="matrix(1, 0, 0, -1, 221.103, 132.274)" + id="path290" /> + d="M 221.300781 132.273438 L 240.777344 132.273438 L 240.777344 120.320312 L 221.300781 120.320312 Z M 221.300781 132.273438 " + id="path291" /> + id="g291"> + id="use291" /> + d="M -0.0014375 0.0005625 L -0.0014375 11.953688 " + transform="matrix(1, 0, 0, -1, 240.978, 132.274)" + id="path292" /> + d="M 241.175781 132.273438 L 260.652344 132.273438 L 260.652344 120.320312 L 241.175781 120.320312 Z M 241.175781 132.273438 " + id="path293" /> + id="g293"> + id="use293" /> + d="M -0.0014375 0.0005625 L -0.0014375 11.953688 " + transform="matrix(1, 0, 0, -1, 260.853, 132.274)" + id="path294" /> + d="M 261.054688 132.273438 L 280.53125 132.273438 L 280.53125 120.320312 L 261.054688 120.320312 Z M 261.054688 132.273438 " + id="path295" /> + id="g295"> + id="use295" /> + d="M 0.00146875 0.0005625 L 0.00146875 11.953688 " + transform="matrix(1, 0, 0, -1, 280.729, 132.274)" + id="path296" /> + d="M 280.929688 132.273438 L 300.40625 132.273438 L 300.40625 120.320312 L 280.929688 120.320312 Z M 280.929688 132.273438 " + id="path297" /> + id="g297"> + id="use297" /> + d="M 0.00146875 0.0005625 L 0.00146875 11.953688 " + transform="matrix(1, 0, 0, -1, 300.604, 132.274)" + id="path298" /> + d="M 300.804688 132.273438 L 321.0625 132.273438 L 321.0625 120.320312 L 300.804688 120.320312 Z M 300.804688 132.273438 " + id="path299" /> + id="g299"> + id="use299" /> + d="M 0.00171875 0.0005625 L 0.00171875 11.953688 " + transform="matrix(1, 0, 0, -1, 321.26, 132.274)" + id="path300" /> + d="M 321.460938 132.273438 L 340.9375 132.273438 L 340.9375 120.320312 L 321.460938 120.320312 Z M 321.460938 132.273438 " + id="path301" /> + id="g301"> + id="use301" /> + d="M 0.00071875 0.0005625 L 0.00071875 11.953688 " + transform="matrix(1, 0, 0, -1, 341.136, 132.274)" + id="path302" /> + d="M 341.335938 132.273438 L 359.378906 132.273438 L 359.378906 120.320312 L 341.335938 120.320312 Z M 341.335938 132.273438 " + id="path303" /> + id="g303"> + id="use303" /> + d="M 0.000125 0.0005625 L 0.000125 11.953688 " + transform="matrix(1, 0, 0, -1, 359.578, 132.274)" + id="path304" /> + d="M 359.777344 132.273438 L 380.035156 132.273438 L 380.035156 120.320312 L 359.777344 120.320312 Z M 359.777344 132.273438 " + id="path305" /> + id="g305"> + id="use305" /> - - - + d="M 0.001375 0.0005625 L 0.001375 11.953688 " + transform="matrix(1, 0, 0, -1, 380.233, 132.274)" + id="path306" /> + + id="g307"> + id="use307" /> + clip-path="url(#clip-4)" + id="g308"> + d="M 0.000375 0.0005625 L 0.000375 11.953688 " + transform="matrix(1, 0, 0, -1, 400.109, 132.274)" + id="path308" /> + clip-path="url(#clip-5)" + id="g309"> + d="M -0.000000000000056843 0.00034375 L 400.308594 0.00034375 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 132.473)" + id="path309" /> + id="g317"> + id="use309" /> + id="use310" /> + id="use311" /> + id="use312" /> + id="use313" /> + id="use314" /> + id="use315" /> + id="use316" /> + id="use317" /> + id="g343"> + id="use318" /> + id="use319" /> + id="use320" /> + id="use321" /> + id="use322" /> + id="use323" /> + id="use324" /> + id="use325" /> + id="use326" /> + id="use327" /> + id="use328" /> + id="use329" /> + id="use330" /> + id="use331" /> + id="use332" /> + id="use333" /> + id="use334" /> + id="use335" /> + id="use336" /> + id="use337" /> + id="use338" /> + id="use339" /> + id="use340" /> + id="use341" /> + id="use342" /> - + id="use343" /> + d="M -0.0016875 -0.00190625 L -0.0016875 11.955125 " + transform="matrix(1, 0, 0, -1, 200.447, 144.627)" + id="path343" /> + d="M 200.644531 144.628906 L 220.902344 144.628906 L 220.902344 132.671875 L 200.644531 132.671875 Z M 200.644531 144.628906 " + id="path344" /> + id="g344"> + id="use344" /> + d="M -0.0014375 -0.00190625 L -0.0014375 11.955125 " + transform="matrix(1, 0, 0, -1, 221.103, 144.627)" + id="path345" /> + d="M 221.300781 144.628906 L 240.777344 144.628906 L 240.777344 132.671875 L 221.300781 132.671875 Z M 221.300781 144.628906 " + id="path346" /> + id="g346"> + id="use346" /> + d="M -0.0014375 -0.00190625 L -0.0014375 11.955125 " + transform="matrix(1, 0, 0, -1, 240.978, 144.627)" + id="path347" /> + d="M 241.175781 144.628906 L 260.652344 144.628906 L 260.652344 132.671875 L 241.175781 132.671875 Z M 241.175781 144.628906 " + id="path348" /> + id="g348"> + id="use348" /> + d="M -0.0014375 -0.00190625 L -0.0014375 11.955125 " + transform="matrix(1, 0, 0, -1, 260.853, 144.627)" + id="path349" /> + d="M 261.054688 144.628906 L 280.53125 144.628906 L 280.53125 132.671875 L 261.054688 132.671875 Z M 261.054688 144.628906 " + id="path350" /> + id="g350"> + id="use350" /> + d="M 0.00146875 -0.00190625 L 0.00146875 11.955125 " + transform="matrix(1, 0, 0, -1, 280.729, 144.627)" + id="path351" /> + d="M 280.929688 144.628906 L 300.40625 144.628906 L 300.40625 132.671875 L 280.929688 132.671875 Z M 280.929688 144.628906 " + id="path352" /> + id="g352"> + id="use352" /> + d="M 0.00146875 -0.00190625 L 0.00146875 11.955125 " + transform="matrix(1, 0, 0, -1, 300.604, 144.627)" + id="path353" /> + d="M 300.804688 144.628906 L 321.0625 144.628906 L 321.0625 132.671875 L 300.804688 132.671875 Z M 300.804688 144.628906 " + id="path354" /> + id="g354"> + id="use354" /> + d="M 0.00171875 -0.00190625 L 0.00171875 11.955125 " + transform="matrix(1, 0, 0, -1, 321.26, 144.627)" + id="path355" /> + d="M 321.460938 144.628906 L 340.9375 144.628906 L 340.9375 132.671875 L 321.460938 132.671875 Z M 321.460938 144.628906 " + id="path356" /> + id="g356"> + id="use356" /> + d="M 0.00071875 -0.00190625 L 0.00071875 11.955125 " + transform="matrix(1, 0, 0, -1, 341.136, 144.627)" + id="path357" /> + d="M 341.335938 144.628906 L 359.378906 144.628906 L 359.378906 132.671875 L 341.335938 132.671875 Z M 341.335938 144.628906 " + id="path358" /> + id="g358"> + id="use358" /> + d="M 0.000125 -0.00190625 L 0.000125 11.955125 " + transform="matrix(1, 0, 0, -1, 359.578, 144.627)" + id="path359" /> + d="M 359.777344 144.628906 L 380.035156 144.628906 L 380.035156 132.671875 L 359.777344 132.671875 Z M 359.777344 144.628906 " + id="path360" /> + id="g360"> + id="use360" /> - - - + d="M 0.001375 -0.00190625 L 0.001375 11.955125 " + transform="matrix(1, 0, 0, -1, 380.233, 144.627)" + id="path361" /> + + id="g362"> + id="use362" /> + clip-path="url(#clip-6)" + id="g363"> + d="M 0.000375 -0.00190625 L 0.000375 11.955125 " + transform="matrix(1, 0, 0, -1, 400.109, 144.627)" + id="path363" /> + clip-path="url(#clip-7)" + id="g364"> + d="M -0.000000000000056843 -0.001125 L 400.308594 -0.001125 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 144.827)" + id="path364" /> + id="g372"> + id="use364" /> + id="use365" /> + id="use366" /> + id="use367" /> + id="use368" /> + id="use369" /> + id="use370" /> + id="use371" /> + id="use372" /> + id="g387"> + id="use373" /> + id="use374" /> + id="use375" /> + id="use376" /> + id="use377" /> + id="use378" /> + id="use379" /> + id="use380" /> + id="use381" /> + id="use382" /> + id="use383" /> + id="use384" /> + id="use385" /> + id="use386" /> - + id="use387" /> + d="M -0.0016875 0.00053125 L -0.0016875 11.953656 " + transform="matrix(1, 0, 0, -1, 200.447, 156.981)" + id="path387" /> + d="M 200.644531 156.980469 L 220.902344 156.980469 L 220.902344 145.027344 L 200.644531 145.027344 Z M 200.644531 156.980469 " + id="path388" /> + id="g388"> + id="use388" /> + d="M -0.0014375 0.00053125 L -0.0014375 11.953656 " + transform="matrix(1, 0, 0, -1, 221.103, 156.981)" + id="path389" /> + d="M 221.300781 156.980469 L 240.777344 156.980469 L 240.777344 145.027344 L 221.300781 145.027344 Z M 221.300781 156.980469 " + id="path390" /> + id="g390"> + id="use390" /> + d="M -0.0014375 0.00053125 L -0.0014375 11.953656 " + transform="matrix(1, 0, 0, -1, 240.978, 156.981)" + id="path391" /> + d="M 241.175781 156.980469 L 260.652344 156.980469 L 260.652344 145.027344 L 241.175781 145.027344 Z M 241.175781 156.980469 " + id="path392" /> + id="g392"> + id="use392" /> + d="M -0.0014375 0.00053125 L -0.0014375 11.953656 " + transform="matrix(1, 0, 0, -1, 260.853, 156.981)" + id="path393" /> + d="M 261.054688 156.980469 L 280.53125 156.980469 L 280.53125 145.027344 L 261.054688 145.027344 Z M 261.054688 156.980469 " + id="path394" /> + id="g394"> + id="use394" /> + d="M 0.00146875 0.00053125 L 0.00146875 11.953656 " + transform="matrix(1, 0, 0, -1, 280.729, 156.981)" + id="path395" /> + d="M 280.929688 156.980469 L 300.40625 156.980469 L 300.40625 145.027344 L 280.929688 145.027344 Z M 280.929688 156.980469 " + id="path396" /> + id="g396"> + id="use396" /> + d="M 0.00146875 0.00053125 L 0.00146875 11.953656 " + transform="matrix(1, 0, 0, -1, 300.604, 156.981)" + id="path397" /> + d="M 300.804688 156.980469 L 321.0625 156.980469 L 321.0625 145.027344 L 300.804688 145.027344 Z M 300.804688 156.980469 " + id="path398" /> + id="g398"> + id="use398" /> + d="M 0.00171875 0.00053125 L 0.00171875 11.953656 " + transform="matrix(1, 0, 0, -1, 321.26, 156.981)" + id="path399" /> + d="M 321.460938 156.980469 L 340.9375 156.980469 L 340.9375 145.027344 L 321.460938 145.027344 Z M 321.460938 156.980469 " + id="path400" /> + id="g400"> + id="use400" /> + d="M 0.00071875 0.00053125 L 0.00071875 11.953656 " + transform="matrix(1, 0, 0, -1, 341.136, 156.981)" + id="path401" /> + d="M 341.335938 156.980469 L 359.378906 156.980469 L 359.378906 145.027344 L 341.335938 145.027344 Z M 341.335938 156.980469 " + id="path402" /> + id="g402"> + id="use402" /> + d="M 0.000125 0.00053125 L 0.000125 11.953656 " + transform="matrix(1, 0, 0, -1, 359.578, 156.981)" + id="path403" /> + d="M 359.777344 156.980469 L 380.035156 156.980469 L 380.035156 145.027344 L 359.777344 145.027344 Z M 359.777344 156.980469 " + id="path404" /> + id="g404"> + id="use404" /> - - - + d="M 0.001375 0.00053125 L 0.001375 11.953656 " + transform="matrix(1, 0, 0, -1, 380.233, 156.981)" + id="path405" /> + + id="g406"> + id="use406" /> + clip-path="url(#clip-8)" + id="g407"> + d="M 0.000375 0.00053125 L 0.000375 11.953656 " + transform="matrix(1, 0, 0, -1, 400.109, 156.981)" + id="path407" /> + clip-path="url(#clip-9)" + id="g408"> + d="M -0.000000000000056843 0.0003125 L 400.308594 0.0003125 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 157.18)" + id="path408" /> + id="g416"> + id="use408" /> + id="use409" /> + id="use410" /> + id="use411" /> + id="use412" /> + id="use413" /> + id="use414" /> + id="use415" /> + id="use416" /> + id="g434"> + id="use417" /> + id="use418" /> + id="use419" /> + id="use420" /> + id="use421" /> + id="use422" /> + id="use423" /> + id="use424" /> + id="use425" /> + id="use426" /> + id="use427" /> + id="use428" /> + id="use429" /> + id="use430" /> + id="use431" /> + id="use432" /> + id="use433" /> - + id="use434" /> + d="M -0.0016875 -0.0009375 L -0.0016875 11.956094 " + transform="matrix(1, 0, 0, -1, 200.447, 169.335)" + id="path434" /> + d="M 200.644531 169.335938 L 220.902344 169.335938 L 220.902344 157.378906 L 200.644531 157.378906 Z M 200.644531 169.335938 " + id="path435" /> + id="g435"> + id="use435" /> + d="M -0.0014375 -0.0009375 L -0.0014375 11.956094 " + transform="matrix(1, 0, 0, -1, 221.103, 169.335)" + id="path436" /> + d="M 221.300781 169.335938 L 240.777344 169.335938 L 240.777344 157.378906 L 221.300781 157.378906 Z M 221.300781 169.335938 " + id="path437" /> + id="g437"> + id="use437" /> + d="M -0.0014375 -0.0009375 L -0.0014375 11.956094 " + transform="matrix(1, 0, 0, -1, 240.978, 169.335)" + id="path438" /> + d="M 241.175781 169.335938 L 260.652344 169.335938 L 260.652344 157.378906 L 241.175781 157.378906 Z M 241.175781 169.335938 " + id="path439" /> + id="g439"> + id="use439" /> + d="M -0.0014375 -0.0009375 L -0.0014375 11.956094 " + transform="matrix(1, 0, 0, -1, 260.853, 169.335)" + id="path440" /> + d="M 261.054688 169.335938 L 280.53125 169.335938 L 280.53125 157.378906 L 261.054688 157.378906 Z M 261.054688 169.335938 " + id="path441" /> + id="g441"> + id="use441" /> + d="M 0.00146875 -0.0009375 L 0.00146875 11.956094 " + transform="matrix(1, 0, 0, -1, 280.729, 169.335)" + id="path442" /> + d="M 280.929688 169.335938 L 300.40625 169.335938 L 300.40625 157.378906 L 280.929688 157.378906 Z M 280.929688 169.335938 " + id="path443" /> + id="g443"> + id="use443" /> + d="M 0.00146875 -0.0009375 L 0.00146875 11.956094 " + transform="matrix(1, 0, 0, -1, 300.604, 169.335)" + id="path444" /> + d="M 300.804688 169.335938 L 321.0625 169.335938 L 321.0625 157.378906 L 300.804688 157.378906 Z M 300.804688 169.335938 " + id="path445" /> + id="g445"> + id="use445" /> + d="M 0.00171875 -0.0009375 L 0.00171875 11.956094 " + transform="matrix(1, 0, 0, -1, 321.26, 169.335)" + id="path446" /> + d="M 321.460938 169.335938 L 340.9375 169.335938 L 340.9375 157.378906 L 321.460938 157.378906 Z M 321.460938 169.335938 " + id="path447" /> + id="g447"> + id="use447" /> + d="M 0.00071875 -0.0009375 L 0.00071875 11.956094 " + transform="matrix(1, 0, 0, -1, 341.136, 169.335)" + id="path448" /> + d="M 341.335938 169.335938 L 359.378906 169.335938 L 359.378906 157.378906 L 341.335938 157.378906 Z M 341.335938 169.335938 " + id="path449" /> + id="g449"> + id="use449" /> + d="M 0.000125 -0.0009375 L 0.000125 11.956094 " + transform="matrix(1, 0, 0, -1, 359.578, 169.335)" + id="path450" /> + d="M 359.777344 169.335938 L 380.035156 169.335938 L 380.035156 157.378906 L 359.777344 157.378906 Z M 359.777344 169.335938 " + id="path451" /> + id="g451"> + id="use451" /> - - - + d="M 0.001375 -0.0009375 L 0.001375 11.956094 " + transform="matrix(1, 0, 0, -1, 380.233, 169.335)" + id="path452" /> + + id="g453"> + id="use453" /> + clip-path="url(#clip-10)" + id="g454"> + d="M 0.000375 -0.0009375 L 0.000375 11.956094 " + transform="matrix(1, 0, 0, -1, 400.109, 169.335)" + id="path454" /> + clip-path="url(#clip-11)" + id="g455"> + d="M -0.000000000000056843 -0.00115625 L 400.308594 -0.00115625 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 169.534)" + id="path455" /> + id="g463"> + id="use455" /> + id="use456" /> + id="use457" /> + id="use458" /> + id="use459" /> + id="use460" /> + id="use461" /> + id="use462" /> + id="use463" /> + id="g479"> + id="use464" /> + id="use465" /> + id="use466" /> + id="use467" /> + id="use468" /> + id="use469" /> + id="use470" /> + id="use471" /> + id="use472" /> + id="use473" /> + id="use474" /> + id="use475" /> + id="use476" /> + id="use477" /> + id="use478" /> - + id="use479" /> + d="M -0.0016875 0.0005 L -0.0016875 11.953625 " + transform="matrix(1, 0, 0, -1, 200.447, 181.688)" + id="path479" /> + d="M 200.644531 181.6875 L 220.902344 181.6875 L 220.902344 169.734375 L 200.644531 169.734375 Z M 200.644531 181.6875 " + id="path480" /> + id="g480"> + id="use480" /> + d="M -0.0014375 0.0005 L -0.0014375 11.953625 " + transform="matrix(1, 0, 0, -1, 221.103, 181.688)" + id="path481" /> + d="M 221.300781 181.6875 L 240.777344 181.6875 L 240.777344 169.734375 L 221.300781 169.734375 Z M 221.300781 181.6875 " + id="path482" /> + id="g482"> + id="use482" /> + d="M -0.0014375 0.0005 L -0.0014375 11.953625 " + transform="matrix(1, 0, 0, -1, 240.978, 181.688)" + id="path483" /> + d="M 241.175781 181.6875 L 260.652344 181.6875 L 260.652344 169.734375 L 241.175781 169.734375 Z M 241.175781 181.6875 " + id="path484" /> + id="g484"> + id="use484" /> + d="M -0.0014375 0.0005 L -0.0014375 11.953625 " + transform="matrix(1, 0, 0, -1, 260.853, 181.688)" + id="path485" /> + d="M 261.054688 181.6875 L 280.53125 181.6875 L 280.53125 169.734375 L 261.054688 169.734375 Z M 261.054688 181.6875 " + id="path486" /> + id="g486"> + id="use486" /> + d="M 0.00146875 0.0005 L 0.00146875 11.953625 " + transform="matrix(1, 0, 0, -1, 280.729, 181.688)" + id="path487" /> + d="M 280.929688 181.6875 L 300.40625 181.6875 L 300.40625 169.734375 L 280.929688 169.734375 Z M 280.929688 181.6875 " + id="path488" /> + id="g488"> + id="use488" /> + d="M 0.00146875 0.0005 L 0.00146875 11.953625 " + transform="matrix(1, 0, 0, -1, 300.604, 181.688)" + id="path489" /> + d="M 300.804688 181.6875 L 321.0625 181.6875 L 321.0625 169.734375 L 300.804688 169.734375 Z M 300.804688 181.6875 " + id="path490" /> + id="g490"> + id="use490" /> + d="M 0.00171875 0.0005 L 0.00171875 11.953625 " + transform="matrix(1, 0, 0, -1, 321.26, 181.688)" + id="path491" /> + d="M 321.460938 181.6875 L 340.9375 181.6875 L 340.9375 169.734375 L 321.460938 169.734375 Z M 321.460938 181.6875 " + id="path492" /> + id="g492"> + id="use492" /> + d="M 0.00071875 0.0005 L 0.00071875 11.953625 " + transform="matrix(1, 0, 0, -1, 341.136, 181.688)" + id="path493" /> + d="M 341.335938 181.6875 L 359.378906 181.6875 L 359.378906 169.734375 L 341.335938 169.734375 Z M 341.335938 181.6875 " + id="path494" /> + id="g494"> + id="use494" /> + d="M 0.000125 0.0005 L 0.000125 11.953625 " + transform="matrix(1, 0, 0, -1, 359.578, 181.688)" + id="path495" /> + d="M 359.777344 181.6875 L 380.035156 181.6875 L 380.035156 169.734375 L 359.777344 169.734375 Z M 359.777344 181.6875 " + id="path496" /> + id="g496"> + id="use496" /> - - - + d="M 0.001375 0.0005 L 0.001375 11.953625 " + transform="matrix(1, 0, 0, -1, 380.233, 181.688)" + id="path497" /> + + id="g498"> + id="use498" /> + clip-path="url(#clip-12)" + id="g499"> + d="M 0.000375 0.0005 L 0.000375 11.953625 " + transform="matrix(1, 0, 0, -1, 400.109, 181.688)" + id="path499" /> + clip-path="url(#clip-13)" + id="g500"> + d="M -0.000000000000056843 0.00128125 L 400.308594 0.00128125 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 181.888)" + id="path500" /> + id="g508"> + id="use500" /> + id="use501" /> + id="use502" /> + id="use503" /> + id="use504" /> + id="use505" /> + id="use506" /> + id="use507" /> + id="use508" /> + id="g527"> + id="use509" /> + id="use510" /> + id="use511" /> + id="use512" /> + id="use513" /> + id="use514" /> + id="use515" /> + id="use516" /> + id="use517" /> + id="use518" /> + id="use519" /> + id="use520" /> + id="use521" /> + id="use522" /> + id="use523" /> + id="use524" /> + id="use525" /> - + id="use526" /> + id="use527" /> + d="M -0.0016875 -0.00096875 L -0.0016875 11.956062 " + transform="matrix(1, 0, 0, -1, 200.447, 194.042)" + id="path527" /> + d="M 200.644531 194.042969 L 220.902344 194.042969 L 220.902344 182.085938 L 200.644531 182.085938 Z M 200.644531 194.042969 " + id="path528" /> + id="g528"> + id="use528" /> + d="M -0.0014375 -0.00096875 L -0.0014375 11.956062 " + transform="matrix(1, 0, 0, -1, 221.103, 194.042)" + id="path529" /> + d="M 221.300781 194.042969 L 240.777344 194.042969 L 240.777344 182.085938 L 221.300781 182.085938 Z M 221.300781 194.042969 " + id="path530" /> + id="g530"> + id="use530" /> + d="M -0.0014375 -0.00096875 L -0.0014375 11.956062 " + transform="matrix(1, 0, 0, -1, 240.978, 194.042)" + id="path531" /> + d="M 241.175781 194.042969 L 260.652344 194.042969 L 260.652344 182.085938 L 241.175781 182.085938 Z M 241.175781 194.042969 " + id="path532" /> + id="g532"> + id="use532" /> + d="M -0.0014375 -0.00096875 L -0.0014375 11.956062 " + transform="matrix(1, 0, 0, -1, 260.853, 194.042)" + id="path533" /> + d="M 261.054688 194.042969 L 280.53125 194.042969 L 280.53125 182.085938 L 261.054688 182.085938 Z M 261.054688 194.042969 " + id="path534" /> + id="g534"> + id="use534" /> + d="M 0.00146875 -0.00096875 L 0.00146875 11.956062 " + transform="matrix(1, 0, 0, -1, 280.729, 194.042)" + id="path535" /> + d="M 280.929688 194.042969 L 300.40625 194.042969 L 300.40625 182.085938 L 280.929688 182.085938 Z M 280.929688 194.042969 " + id="path536" /> + id="g536"> + id="use536" /> + d="M 0.00146875 -0.00096875 L 0.00146875 11.956062 " + transform="matrix(1, 0, 0, -1, 300.604, 194.042)" + id="path537" /> + d="M 300.804688 194.042969 L 321.0625 194.042969 L 321.0625 182.085938 L 300.804688 182.085938 Z M 300.804688 194.042969 " + id="path538" /> + id="g538"> + id="use538" /> + d="M 0.00171875 -0.00096875 L 0.00171875 11.956062 " + transform="matrix(1, 0, 0, -1, 321.26, 194.042)" + id="path539" /> + d="M 321.460938 194.042969 L 340.9375 194.042969 L 340.9375 182.085938 L 321.460938 182.085938 Z M 321.460938 194.042969 " + id="path540" /> + id="g540"> + id="use540" /> + d="M 0.00071875 -0.00096875 L 0.00071875 11.956062 " + transform="matrix(1, 0, 0, -1, 341.136, 194.042)" + id="path541" /> + d="M 341.335938 194.042969 L 359.378906 194.042969 L 359.378906 182.085938 L 341.335938 182.085938 Z M 341.335938 194.042969 " + id="path542" /> + id="g542"> + id="use542" /> + d="M 0.000125 -0.00096875 L 0.000125 11.956062 " + transform="matrix(1, 0, 0, -1, 359.578, 194.042)" + id="path543" /> + d="M 359.777344 194.042969 L 380.035156 194.042969 L 380.035156 182.085938 L 359.777344 182.085938 Z M 359.777344 194.042969 " + id="path544" /> + id="g544"> + id="use544" /> - - - + d="M 0.001375 -0.00096875 L 0.001375 11.956062 " + transform="matrix(1, 0, 0, -1, 380.233, 194.042)" + id="path545" /> + + id="g546"> + id="use546" /> + clip-path="url(#clip-14)" + id="g547"> + d="M 0.000375 -0.00096875 L 0.000375 11.956062 " + transform="matrix(1, 0, 0, -1, 400.109, 194.042)" + id="path547" /> + clip-path="url(#clip-15)" + id="g548"> + d="M -0.000000000000056843 -0.0011875 L 400.308594 -0.0011875 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 194.241)" + id="path548" /> + id="g556"> + id="use548" /> + id="use549" /> + id="use550" /> + id="use551" /> + id="use552" /> + id="use553" /> + id="use554" /> + id="use555" /> + id="use556" /> + id="g575"> + id="use557" /> + id="use558" /> + id="use559" /> + id="use560" /> + id="use561" /> + id="use562" /> + id="use563" /> + id="use564" /> + id="use565" /> + id="use566" /> + id="use567" /> + id="use568" /> + id="use569" /> + id="use570" /> + id="use571" /> + id="use572" /> + id="use573" /> + id="use574" /> - + id="use575" /> + d="M -0.0016875 0.00146875 L -0.0016875 11.954594 " + transform="matrix(1, 0, 0, -1, 200.447, 206.396)" + id="path575" /> + d="M 200.644531 206.394531 L 220.902344 206.394531 L 220.902344 194.441406 L 200.644531 194.441406 Z M 200.644531 206.394531 " + id="path576" /> + id="g576"> + id="use576" /> + d="M -0.0014375 0.00146875 L -0.0014375 11.954594 " + transform="matrix(1, 0, 0, -1, 221.103, 206.396)" + id="path577" /> + d="M 221.300781 206.394531 L 240.777344 206.394531 L 240.777344 194.441406 L 221.300781 194.441406 Z M 221.300781 206.394531 " + id="path578" /> + id="g578"> + id="use578" /> + d="M -0.0014375 0.00146875 L -0.0014375 11.954594 " + transform="matrix(1, 0, 0, -1, 240.978, 206.396)" + id="path579" /> + d="M 241.175781 206.394531 L 260.652344 206.394531 L 260.652344 194.441406 L 241.175781 194.441406 Z M 241.175781 206.394531 " + id="path580" /> + id="g580"> + id="use580" /> + d="M -0.0014375 0.00146875 L -0.0014375 11.954594 " + transform="matrix(1, 0, 0, -1, 260.853, 206.396)" + id="path581" /> + d="M 261.054688 206.394531 L 280.53125 206.394531 L 280.53125 194.441406 L 261.054688 194.441406 Z M 261.054688 206.394531 " + id="path582" /> + id="g582"> + id="use582" /> + d="M 0.00146875 0.00146875 L 0.00146875 11.954594 " + transform="matrix(1, 0, 0, -1, 280.729, 206.396)" + id="path583" /> + d="M 280.929688 206.394531 L 300.40625 206.394531 L 300.40625 194.441406 L 280.929688 194.441406 Z M 280.929688 206.394531 " + id="path584" /> + id="g584"> + id="use584" /> + d="M 0.00146875 0.00146875 L 0.00146875 11.954594 " + transform="matrix(1, 0, 0, -1, 300.604, 206.396)" + id="path585" /> + d="M 300.804688 206.394531 L 321.0625 206.394531 L 321.0625 194.441406 L 300.804688 194.441406 Z M 300.804688 206.394531 " + id="path586" /> + id="g586"> + id="use586" /> + d="M 0.00171875 0.00146875 L 0.00171875 11.954594 " + transform="matrix(1, 0, 0, -1, 321.26, 206.396)" + id="path587" /> + d="M 321.460938 206.394531 L 340.9375 206.394531 L 340.9375 194.441406 L 321.460938 194.441406 Z M 321.460938 206.394531 " + id="path588" /> + id="g588"> + id="use588" /> + d="M 0.00071875 0.00146875 L 0.00071875 11.954594 " + transform="matrix(1, 0, 0, -1, 341.136, 206.396)" + id="path589" /> + d="M 341.335938 206.394531 L 359.378906 206.394531 L 359.378906 194.441406 L 341.335938 194.441406 Z M 341.335938 206.394531 " + id="path590" /> + id="g590"> + id="use590" /> + d="M 0.000125 0.00146875 L 0.000125 11.954594 " + transform="matrix(1, 0, 0, -1, 359.578, 206.396)" + id="path591" /> + d="M 359.777344 206.394531 L 380.035156 206.394531 L 380.035156 194.441406 L 359.777344 194.441406 Z M 359.777344 206.394531 " + id="path592" /> + id="g592"> + id="use592" /> - - - + d="M 0.001375 0.00146875 L 0.001375 11.954594 " + transform="matrix(1, 0, 0, -1, 380.233, 206.396)" + id="path593" /> + + id="g594"> + id="use594" /> + clip-path="url(#clip-16)" + id="g595"> + d="M 0.000375 0.00146875 L 0.000375 11.954594 " + transform="matrix(1, 0, 0, -1, 400.109, 206.396)" + id="path595" /> + clip-path="url(#clip-17)" + id="g596"> + d="M -0.000000000000056843 0.00125 L 400.308594 0.00125 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 206.595)" + id="path596" /> + id="g604"> + id="use596" /> + id="use597" /> + id="use598" /> + id="use599" /> + id="use600" /> + id="use601" /> + id="use602" /> + id="use603" /> + id="use604" /> + id="g618"> + id="use605" /> + id="use606" /> + id="use607" /> + id="use608" /> + id="use609" /> + id="use610" /> + id="use611" /> + id="use612" /> + id="use613" /> + id="use614" /> + id="use615" /> + id="use616" /> + id="use617" /> - + id="use618" /> + d="M -0.0016875 -0.001 L -0.0016875 11.956031 " + transform="matrix(1, 0, 0, -1, 200.447, 218.749)" + id="path618" /> + d="M 200.644531 218.75 L 220.902344 218.75 L 220.902344 206.792969 L 200.644531 206.792969 Z M 200.644531 218.75 " + id="path619" /> + id="g619"> + id="use619" /> + d="M -0.0014375 -0.001 L -0.0014375 11.956031 " + transform="matrix(1, 0, 0, -1, 221.103, 218.749)" + id="path620" /> + d="M 221.300781 218.75 L 240.777344 218.75 L 240.777344 206.792969 L 221.300781 206.792969 Z M 221.300781 218.75 " + id="path621" /> + id="g621"> + id="use621" /> + d="M -0.0014375 -0.001 L -0.0014375 11.956031 " + transform="matrix(1, 0, 0, -1, 240.978, 218.749)" + id="path622" /> + d="M 241.175781 218.75 L 260.652344 218.75 L 260.652344 206.792969 L 241.175781 206.792969 Z M 241.175781 218.75 " + id="path623" /> + id="g623"> + id="use623" /> + d="M -0.0014375 -0.001 L -0.0014375 11.956031 " + transform="matrix(1, 0, 0, -1, 260.853, 218.749)" + id="path624" /> + d="M 261.054688 218.75 L 280.53125 218.75 L 280.53125 206.792969 L 261.054688 206.792969 Z M 261.054688 218.75 " + id="path625" /> + id="g625"> + id="use625" /> + d="M 0.00146875 -0.001 L 0.00146875 11.956031 " + transform="matrix(1, 0, 0, -1, 280.729, 218.749)" + id="path626" /> + d="M 280.929688 218.75 L 300.40625 218.75 L 300.40625 206.792969 L 280.929688 206.792969 Z M 280.929688 218.75 " + id="path627" /> + id="g627"> + id="use627" /> + d="M 0.00146875 -0.001 L 0.00146875 11.956031 " + transform="matrix(1, 0, 0, -1, 300.604, 218.749)" + id="path628" /> + d="M 300.804688 218.75 L 321.0625 218.75 L 321.0625 206.792969 L 300.804688 206.792969 Z M 300.804688 218.75 " + id="path629" /> + id="g629"> + id="use629" /> + d="M 0.00171875 -0.001 L 0.00171875 11.956031 " + transform="matrix(1, 0, 0, -1, 321.26, 218.749)" + id="path630" /> + d="M 321.460938 218.75 L 340.9375 218.75 L 340.9375 206.792969 L 321.460938 206.792969 Z M 321.460938 218.75 " + id="path631" /> + id="g631"> + id="use631" /> + d="M 0.00071875 -0.001 L 0.00071875 11.956031 " + transform="matrix(1, 0, 0, -1, 341.136, 218.749)" + id="path632" /> + d="M 341.335938 218.75 L 359.378906 218.75 L 359.378906 206.792969 L 341.335938 206.792969 Z M 341.335938 218.75 " + id="path633" /> + id="g633"> + id="use633" /> + d="M 0.000125 -0.001 L 0.000125 11.956031 " + transform="matrix(1, 0, 0, -1, 359.578, 218.749)" + id="path634" /> + d="M 359.777344 218.75 L 380.035156 218.75 L 380.035156 206.792969 L 359.777344 206.792969 Z M 359.777344 218.75 " + id="path635" /> + id="g635"> + id="use635" /> - - - + d="M 0.001375 -0.001 L 0.001375 11.956031 " + transform="matrix(1, 0, 0, -1, 380.233, 218.749)" + id="path636" /> + + id="g637"> + id="use637" /> + clip-path="url(#clip-18)" + id="g638"> + d="M 0.000375 -0.001 L 0.000375 11.956031 " + transform="matrix(1, 0, 0, -1, 400.109, 218.749)" + id="path638" /> + clip-path="url(#clip-19)" + id="g639"> + d="M -0.000000000000056843 -0.00021875 L 400.308594 -0.00021875 " + transform="matrix(1, 0, 0, -1, 0.000000000000056843, 218.949)" + id="path639" /> + id="g647"> + id="use639" /> + id="use640" /> + id="use641" /> + id="use642" /> + id="use643" /> + id="use644" /> + id="use645" /> + id="use646" /> + id="use647" /> + id="g665"> + id="use648" /> + id="use649" /> + id="use650" /> + id="use651" /> + id="use652" /> + id="use653" /> + id="use654" /> + id="use655" /> + id="use656" /> + id="use657" /> + id="use658" /> + id="use659" /> + id="use660" /> + id="use661" /> + id="use662" /> + id="use663" /> + id="use664" /> - + id="use665" /> + clip-path="url(#clip-20)" + id="g666"> + d="M -0.0016875 0.0014375 L -0.0016875 11.954562 " + transform="matrix(1, 0, 0, -1, 200.447, 231.103)" + id="path665" /> + clip-path="url(#clip-21)" + id="g667"> + d="M 200.644531 231.101562 L 220.902344 231.101562 L 220.902344 219.148438 L 200.644531 219.148438 Z M 200.644531 231.101562 " + id="path666" /> + id="g668"> + id="use667" /> + clip-path="url(#clip-22)" + id="g669"> + d="M -0.0014375 0.0014375 L -0.0014375 11.954562 " + transform="matrix(1, 0, 0, -1, 221.103, 231.103)" + id="path668" /> + clip-path="url(#clip-23)" + id="g670"> + d="M 221.300781 231.101562 L 240.777344 231.101562 L 240.777344 219.148438 L 221.300781 219.148438 Z M 221.300781 231.101562 " + id="path669" /> + id="g671"> + id="use670" /> + clip-path="url(#clip-24)" + id="g672"> + d="M -0.0014375 0.0014375 L -0.0014375 11.954562 " + transform="matrix(1, 0, 0, -1, 240.978, 231.103)" + id="path671" /> + clip-path="url(#clip-25)" + id="g673"> + d="M 241.175781 231.101562 L 260.652344 231.101562 L 260.652344 219.148438 L 241.175781 219.148438 Z M 241.175781 231.101562 " + id="path672" /> + id="g674"> + id="use673" /> + clip-path="url(#clip-26)" + id="g675"> + d="M -0.0014375 0.0014375 L -0.0014375 11.954562 " + transform="matrix(1, 0, 0, -1, 260.853, 231.103)" + id="path674" /> + clip-path="url(#clip-27)" + id="g676"> + d="M 261.054688 231.101562 L 280.53125 231.101562 L 280.53125 219.148438 L 261.054688 219.148438 Z M 261.054688 231.101562 " + id="path675" /> + id="g677"> + id="use676" /> + clip-path="url(#clip-28)" + id="g678"> + d="M 0.00146875 0.0014375 L 0.00146875 11.954562 " + transform="matrix(1, 0, 0, -1, 280.729, 231.103)" + id="path677" /> + clip-path="url(#clip-29)" + id="g679"> + d="M 280.929688 231.101562 L 300.40625 231.101562 L 300.40625 219.148438 L 280.929688 219.148438 Z M 280.929688 231.101562 " + id="path678" /> + id="g680"> + id="use679" /> + clip-path="url(#clip-30)" + id="g681"> + d="M 0.00146875 0.0014375 L 0.00146875 11.954562 " + transform="matrix(1, 0, 0, -1, 300.604, 231.103)" + id="path680" /> + clip-path="url(#clip-31)" + id="g682"> + d="M 300.804688 231.101562 L 321.0625 231.101562 L 321.0625 219.148438 L 300.804688 219.148438 Z M 300.804688 231.101562 " + id="path681" /> + id="g683"> + id="use682" /> + clip-path="url(#clip-32)" + id="g684"> + d="M 0.00171875 0.0014375 L 0.00171875 11.954562 " + transform="matrix(1, 0, 0, -1, 321.26, 231.103)" + id="path683" /> + clip-path="url(#clip-33)" + id="g685"> + d="M 321.460938 231.101562 L 340.9375 231.101562 L 340.9375 219.148438 L 321.460938 219.148438 Z M 321.460938 231.101562 " + id="path684" /> + id="g686"> + id="use685" /> + clip-path="url(#clip-34)" + id="g687"> + d="M 0.00071875 0.0014375 L 0.00071875 11.954562 " + transform="matrix(1, 0, 0, -1, 341.136, 231.103)" + id="path686" /> + clip-path="url(#clip-35)" + id="g688"> + d="M 341.335938 231.101562 L 359.378906 231.101562 L 359.378906 219.148438 L 341.335938 219.148438 Z M 341.335938 231.101562 " + id="path687" /> + id="g689"> + id="use688" /> + clip-path="url(#clip-36)" + id="g690"> + d="M 0.000125 0.0014375 L 0.000125 11.954562 " + transform="matrix(1, 0, 0, -1, 359.578, 231.103)" + id="path689" /> + clip-path="url(#clip-37)" + id="g691"> + d="M 359.777344 231.101562 L 380.035156 231.101562 L 380.035156 219.148438 L 359.777344 219.148438 Z M 359.777344 231.101562 " + id="path690" /> + id="g692"> + id="use691" /> + clip-path="url(#clip-38)" + id="g693"> + d="M 0.001375 0.0014375 L 0.001375 11.954562 " + transform="matrix(1, 0, 0, -1, 380.233, 231.103)" + id="path692" /> + clip-path="url(#clip-39)" + id="g694"> + d="M 380.433594 231.101562 L 399.910156 231.101562 L 399.910156 219.148438 L 380.433594 219.148438 Z M 380.433594 231.101562 " + id="path693" /> + id="g695"> + id="use694" /> + clip-path="url(#clip-40)" + id="g696"> + d="M 0.000375 0.0014375 L 0.000375 11.954562 " + transform="matrix(1, 0, 0, -1, 400.109, 231.103)" + id="path695" /> diff --git a/docs/pictures/to-table.tex b/docs/pictures/to-table.tex index b4e2aa03..2df37a67 100644 --- a/docs/pictures/to-table.tex +++ b/docs/pictures/to-table.tex @@ -35,8 +35,8 @@ \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \cmark \\\hline \texttt{to(*args, rtype=Konieczny)} & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark \\\hline - \texttt{to(*args, rtype=Presentation)} & \xmark & \cmark & - \xmark & \xmark & \cmark & \xmark & \cmark & \xmark & \xmark & \xmark \\\hline + \texttt{to(*args, rtype=Presentation)} & \cmark & \cmark & + \xmark & \cmark & \cmark & \xmark & \cmark & \xmark & \cmark & \cmark \\\hline \texttt{to(*args, rtype=SchreierSims)} & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark & \xmark \\\hline \texttt{to(*args, rtype=Stephen)} & \xmark & \xmark & diff --git a/docs/source/data-structures/presentations/to-present.rst b/docs/source/data-structures/presentations/to-present.rst index f47f1c00..f9b93ed8 100644 --- a/docs/source/data-structures/presentations/to-present.rst +++ b/docs/source/data-structures/presentations/to-present.rst @@ -29,8 +29,12 @@ possible: - :ref:`presentation-to-presentation`; - :ref:`presentation-and-function-to-presentation`; - - :ref:`knuth-bendix-to-presentation`; and - - :ref:`froidure-pin-to-presentation`. + - :ref:`knuth-bendix-to-presentation`; + - :ref:`froidure-pin-to-presentation`; + - :ref:`kambites-to-presentation`; + - :ref:`todd-coxeter-to-presentation`; + - :ref:`congruence-to-presentation`; and + - :ref:`stephen-to-presentation`. .. _presentation-to-presentation: @@ -266,3 +270,245 @@ to calling this function. >>> p = to(S, rtype=(Presentation, str)) >>> len(p.alphabet()) == 4 True + +.. _kambites-to-presentation: + +Converting a :any:`Kambites` to a :any:`Presentation` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To construct a :any:`Presentation` from a :any:`Kambites`, specify the +following values for *args*: + + - **k** (:any:`Kambites`) -- the :any:`Kambites` from which to obtain + the presentation. + +Additionally, specify one of the following for *Return*: + + - ``(Presentation,)`` for constructing a :any:`Presentation` over words of + the same type as that in *k*. + - ``(Presentation, str)`` for constructing a :any:`Presentation` over words + of type ``str``. + - ``(Presentation, list[int])`` for constructing a :any:`Presentation` over + words of type ``list[int]``. + +This function constructs and returns a :any:`Presentation` object that is +equivalent to the presentation used to construct the :any:`Kambites` object. +When the word type matches, this function returns a reference to ``k.presentation()``. +When the word types differ, a converted copy is returned. + +No computation is performed by this function; it simply retrieves the +presentation that was used to define the :any:`Kambites` object. + +.. seealso:: + + - :any:`Kambites.presentation`. + +.. doctest:: Python + + >>> from libsemigroups_pybind11 import ( + ... congruence_kind, + ... Kambites, + ... Presentation, + ... presentation, + ... to, + ... ) + + >>> p = Presentation([5, 6, 7, 8, 9]) + >>> presentation.add_rule(p, [5, 6], [7]) + >>> presentation.add_rule(p, [6, 7], [8]) + >>> presentation.add_rule(p, [7, 8], [9]) + >>> presentation.add_rule(p, [8, 9], [5]) + >>> presentation.add_rule(p, [9, 5], [6]) + + >>> k = Kambites(congruence_kind.twosided, p) + >>> result = to(k, rtype=(Presentation, list[int])) + >>> result == p + True + + >>> result_str = to(k, rtype=(Presentation, str)) + >>> result_str.alphabet() + 'abcde' + >>> result_str.rules + ['ab', 'c', 'bc', 'd', 'cd', 'e', 'de', 'a', 'ea', 'b'] + +.. _todd-coxeter-to-presentation: + +Converting a :any:`ToddCoxeter` to a :any:`Presentation` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To construct a :any:`Presentation` from a :any:`ToddCoxeter`, specify the +following values for *args*: + + - **tc** (:any:`ToddCoxeter`) -- the :any:`ToddCoxeter` from which to obtain + the presentation. + +Additionally, specify one of the following for *Return*: + + - ``(Presentation,)`` for constructing a :any:`Presentation` over words of + the same type as that in *tc*. + - ``(Presentation, str)`` for constructing a :any:`Presentation` over words + of type ``str``. + - ``(Presentation, list[int])`` for constructing a :any:`Presentation` over + words of type ``list[int]``. + +This function constructs and returns a :any:`Presentation` object that is +equivalent to the presentation used to construct the :any:`ToddCoxeter` object. +When the word type matches, this function returns a reference to ``tc.presentation()``. +When the word types differ, a converted copy is returned. + +No computation is performed by this function; it simply retrieves the +presentation that was used to define the :any:`ToddCoxeter` object. + +.. seealso:: + + - :any:`ToddCoxeter.presentation`. + +.. doctest:: Python + + >>> from libsemigroups_pybind11 import ( + ... congruence_kind, + ... ToddCoxeter, + ... Presentation, + ... presentation, + ... to, + ... ) + + >>> p = Presentation([5, 6, 7, 8, 9]) + >>> presentation.add_rule(p, [5, 6], [7]) + >>> presentation.add_rule(p, [6, 7], [8]) + >>> presentation.add_rule(p, [7, 8], [9]) + >>> presentation.add_rule(p, [8, 9], [5]) + >>> presentation.add_rule(p, [9, 5], [6]) + + >>> tc = ToddCoxeter(congruence_kind.twosided, p) + >>> result = to(tc, rtype=(Presentation, list[int])) + >>> result == p + True + + >>> result_str = to(tc, rtype=(Presentation, str)) + >>> result_str.alphabet() + 'abcde' + >>> result_str.rules + ['ab', 'c', 'bc', 'd', 'cd', 'e', 'de', 'a', 'ea', 'b'] + +.. _congruence-to-presentation: + +Converting a :any:`Congruence` to a :any:`Presentation` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To construct a :any:`Presentation` from a :any:`Congruence`, specify the +following values for *args*: + + - **c** (:any:`Congruence`) -- the :any:`Congruence` from which to obtain + the presentation. + +Additionally, specify one of the following for *Return*: + + - ``(Presentation,)`` for constructing a :any:`Presentation` over words of + the same type as that in *c*. + - ``(Presentation, str)`` for constructing a :any:`Presentation` over words + of type ``str``. + - ``(Presentation, list[int])`` for constructing a :any:`Presentation` over + words of type ``list[int]``. + +This function constructs and returns a :any:`Presentation` object that is +equivalent to the presentation used to construct the :any:`Congruence` object. +When the word type matches, this function returns a reference to ``c.presentation()``. +When the word types differ, a converted copy is returned. + +No computation is performed by this function; it simply retrieves the +presentation that was used to define the :any:`Congruence` object. Note that +any generating pairs added via :any:`Congruence.add_generating_pair` +are not included in the returned presentation. + +.. seealso:: + + - :any:`Congruence.presentation`; and + - :any:`Congruence.add_generating_pair`. + +.. doctest:: Python + + >>> from libsemigroups_pybind11 import ( + ... congruence_kind, + ... Congruence, + ... Presentation, + ... presentation, + ... to, + ... ) + + >>> p = Presentation("abc") + >>> presentation.add_rule(p, "aa", "b") + >>> presentation.add_rule(p, "bb", "c") + >>> presentation.add_rule(p, "cc", "a") + + >>> c = Congruence(congruence_kind.twosided, p) + >>> result = to(c, rtype=(Presentation, str)) + >>> result == p + True + + >>> result_word = to(c, rtype=(Presentation, list[int])) + >>> result_word.alphabet() + [0, 1, 2] + >>> result_word.rules + [[0, 0], [1], [1, 1], [2], [2, 2], [0]] + +.. _stephen-to-presentation: + +Converting a :any:`Stephen` to a :any:`Presentation` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To construct a :any:`Presentation` from a :any:`Stephen`, specify the +following values for *args*: + + - **s** (:any:`Stephen`) -- the :any:`Stephen` from which to obtain + the presentation. + +Additionally, specify one of the following for *Return*: + + - ``(Presentation,)`` for constructing a :any:`Presentation` over words of + the same type as that in *s*. + - ``(Presentation, str)`` for constructing a :any:`Presentation` over words + of type ``str``. + - ``(Presentation, list[int])`` for constructing a :any:`Presentation` over + words of type ``list[int]``. + +This function constructs and returns a :any:`Presentation` object that is +equivalent to the presentation used to construct the :any:`Stephen` object. +A converted copy is always returned (even when word types match). + +No computation is performed by this function; it simply retrieves the +presentation that was used to define the :any:`Stephen` object. Note that +:any:`Stephen` can be constructed from either a :any:`Presentation` or an +:any:`InversePresentation`; in both cases, this function returns a +:any:`Presentation`. + +.. seealso:: + + - :any:`Stephen.presentation`. + +.. doctest:: Python + + >>> from libsemigroups_pybind11 import ( + ... Stephen, + ... Presentation, + ... presentation, + ... to, + ... ) + + >>> p = Presentation([5, 6, 7, 8, 9]) + >>> presentation.add_rule(p, [5, 6], [7]) + >>> presentation.add_rule(p, [6, 7], [8]) + >>> presentation.add_rule(p, [7, 8], [9]) + >>> presentation.add_rule(p, [8, 9], [5]) + >>> presentation.add_rule(p, [9, 5], [6]) + + >>> s = Stephen(p) + >>> result = to(s, rtype=(Presentation, list[int])) + >>> result == p + True + + >>> result_str = to(s, rtype=(Presentation, str)) + >>> result_str.alphabet() + 'abcde' + >>> result_str.rules + ['ab', 'c', 'bc', 'd', 'cd', 'e', 'de', 'a', 'ea', 'b'] diff --git a/src/to-presentation.cpp b/src/to-presentation.cpp index e4c6aa05..894ce75c 100644 --- a/src/to-presentation.cpp +++ b/src/to-presentation.cpp @@ -18,18 +18,25 @@ // C++ std headers #include // for function -#include // for string, basic_string, oper... +#include +#include // for string, basic_string, oper... +#include // for Congruence +#include // for MultiView #include // for FroidurePinBase +#include // for Kambites #include // for KnuthBendix #include // for Presentation +#include // for Stephen #include // for to +#include // for ToddCoxeter #include // for word_type #include #include // for class_, init, module #include "main.hpp" // for init_present +#include "todd-coxeter-class.hpp" namespace libsemigroups { namespace py = pybind11; @@ -75,6 +82,84 @@ namespace libsemigroups { [](FroidurePinBase& fp) { return to>(fp); }); } + template + void bind_stephen_to_pres(py::module& m, std::string const& name) { + std::string fn_name = std::string("to_presentation_") + name; + m.def(fn_name.c_str(), + [](Stephen& s) { return to>(s); }); + } + + //////////////////////////////////////////////////////////////////////////// + // For when WordIn == WordOut (return reference) + //////////////////////////////////////////////////////////////////////////// + + template + void bind_kambites_to_pres_same_word(py::module& m, + std::string const& name) { + std::string fn_name = std::string("to_presentation_") + name; + m.def( + fn_name.c_str(), + [](Kambites& k) -> Presentation const& { + return to>(k); + }, + py::return_value_policy::reference_internal); + } + + template + void bind_congruence_to_pres_same_word(py::module& m, + std::string const& name) { + std::string fn_name = std::string("to_presentation_") + name; + m.def( + fn_name.c_str(), + [](Congruence& c) -> Presentation const& { + return to>(c); + }, + py::return_value_policy::reference_internal); + } + + template + void bind_todd_coxeter_to_pres_same_word(py::module& m, + std::string const& name) { + std::string fn_name = std::string("to_presentation_") + name; + m.def(fn_name.c_str(), + [](ToddCoxeter& tc) -> Presentation const& { + return to>(tc); + }); + } + + //////////////////////////////////////////////////////////////////////////// + // For when WordIn != WordOut (return value) + //////////////////////////////////////////////////////////////////////////// + + template + void bind_kambites_to_pres_diff_word(py::module& m, + std::string const& name) { + std::string fn_name = std::string("to_presentation_") + name; + m.def(fn_name.c_str(), + [](Kambites& k) { return to>(k); }); + } + + template + void bind_congruence_to_pres_diff_word(py::module& m, + std::string const& name) { + std::string fn_name = std::string("to_presentation_") + name; + m.def(fn_name.c_str(), + [](Congruence& c) { return to>(c); }); + } + + template + void bind_todd_coxeter_to_pres_diff_word(py::module& m, + std::string const& name) { + std::string fn_name = std::string("to_presentation_") + name; + m.def(fn_name.c_str(), [](ToddCoxeter& tc) { + return to>(tc); + }); + } + + //////////////////////////////////////////////////////////////////////////// + // For InversePresentation + //////////////////////////////////////////////////////////////////////////// + template void bind_pres_to_inv_pres(py::module& m) { m.def("to_inverse_presentation", [](Presentation const& p) { @@ -101,6 +186,7 @@ namespace libsemigroups { typename InversePresentation::letter_type)>&& f) { return to>(ip, f); }); } + } // namespace void init_to_present(py::module& m) { @@ -148,6 +234,35 @@ namespace libsemigroups { bind_fp_to_pres(m, "string"); bind_fp_to_pres(m, "word"); + // From Kambites + bind_kambites_to_pres_same_word(m, "string"); + bind_kambites_to_pres_same_word(m, "word"); + bind_kambites_to_pres_diff_word(m, "word"); + bind_kambites_to_pres_diff_word(m, "string"); + bind_kambites_to_pres_diff_word, word_type>( + m, "word"); + bind_kambites_to_pres_diff_word, + std::string>(m, "string"); + + // From Congruence + bind_congruence_to_pres_same_word(m, "string"); + bind_congruence_to_pres_same_word(m, "word"); + bind_congruence_to_pres_diff_word(m, "string"); + bind_congruence_to_pres_diff_word(m, "word"); + + // From Stephen + bind_stephen_to_pres, word_type>(m, "word"); + bind_stephen_to_pres, std::string>(m, "string"); + bind_stephen_to_pres, word_type>(m, "word"); + bind_stephen_to_pres, std::string>(m, + "string"); + + // From ToddCoxeter + bind_todd_coxeter_to_pres_same_word(m, "string"); + bind_todd_coxeter_to_pres_same_word(m, "word"); + bind_todd_coxeter_to_pres_diff_word(m, "string"); + bind_todd_coxeter_to_pres_diff_word(m, "word"); + //////////////////////////////////////////////////////////////////////////// // to //////////////////////////////////////////////////////////////////////////// diff --git a/tests/test_to.py b/tests/test_to.py index ddf3ecc2..b2dc3c0d 100644 --- a/tests/test_to.py +++ b/tests/test_to.py @@ -33,6 +33,7 @@ KnuthBendix, Presentation, ReportGuard, + Stephen, ToddCoxeter, Transf, WordGraph, @@ -81,11 +82,33 @@ def sample_froidure_pin(): return S +def sample_kambites_from_pres(Word): + p = sample_pres(Word) + S = Kambites(congruence_kind.twosided, p) + return S + + def cong_from_sample_pres(ReturnType, Word, **kwargs): p = sample_pres(Word) return ReturnType(congruence_kind.twosided, p, **kwargs) +def stephen_from_sample_pres(PresType, Word): + p = sample_pres(Word) + if PresType is InversePresentation: + p = InversePresentation(p) + if Word is str: + p.inverses("ba") + else: + p.inverses([1, 0]) + s = Stephen(p) + if Word is str: + s.set_word("ab").run() + else: + s.set_word([0, 1]).run() + return s + + def check_cong_to_froidure_pin(Type, Word, **kwargs): thing = cong_from_sample_pres(Type, Word, **kwargs) fp = to(thing, rtype=(FroidurePin,)) @@ -137,6 +160,39 @@ def check_froidure_pin_to_pres(Word): assert isinstance(p, Presentation) +def check_kambites_to_pres(WordIn, WordOut): + S = sample_kambites_from_pres(WordIn) + + p = to(S, rtype=(Presentation, WordOut)) + assert len(p.alphabet()) == len(S.presentation().alphabet()) + assert len(p.rules) == len(S.presentation().rules) + + # Kambites uses MultiViewString which returns value + if WordIn is not str and WordIn == WordOut: + assert id(to_cxx(p)) == id(to_cxx(S.presentation())) + + +def check_cong_to_pres(Type, WordIn, WordOut): + S = cong_from_sample_pres(Type, WordIn) + s_pres = S.presentation() + + p = to(S, rtype=(Presentation, WordOut)) + assert len(p.alphabet()) == len(s_pres.alphabet()) + assert len(p.rules) == len(s_pres.rules) + + if WordIn == WordOut: + assert id(to_cxx(p)) == id(to_cxx(s_pres)) + + +def check_stephen_to_pres(PresType, WordIn, WordOut): + s = stephen_from_sample_pres(PresType, WordIn) + s_pres = s.presentation() + + p = to(s, rtype=(Presentation, WordOut)) + assert len(p.alphabet()) == len(s_pres.alphabet()) + assert len(p.rules) == len(s_pres.rules) + + def check_froidure_pin_to_knuth_bendix(Word, Rewriter): S = sample_froidure_pin() kb = to(congruence_kind.twosided, S, rtype=(KnuthBendix, Word, Rewriter)) @@ -615,6 +671,82 @@ def test_to_Presentation_029(): check_froidure_pin_to_pres(list[int]) +# From Kambites + + +def test_to_Presentation_030(): + check_kambites_to_pres(str, str) + + +def test_to_Presentation_031(): + check_kambites_to_pres(list[int], list[int]) + + +def test_to_Presentation_032(): + check_kambites_to_pres(str, list[int]) + + +def test_to_Presentation_033(): + check_kambites_to_pres(list[int], str) + + +# From Congruence + + +def test_to_Presentation_034(): + check_cong_to_pres(Congruence, str, str) + + +def test_to_Presentation_035(): + check_cong_to_pres(Congruence, list[int], list[int]) + + +def test_to_Presentation_036(): + check_cong_to_pres(Congruence, str, list[int]) + + +def test_to_Presentation_037(): + check_cong_to_pres(Congruence, list[int], str) + + +# From ToddCoxeter + + +def test_to_Presentation_038(): + check_cong_to_pres(ToddCoxeter, str, str) + + +def test_to_Presentation_039(): + check_cong_to_pres(ToddCoxeter, list[int], list[int]) + + +def test_to_Presentation_040(): + check_cong_to_pres(ToddCoxeter, str, list[int]) + + +def test_to_Presentation_041(): + check_cong_to_pres(ToddCoxeter, list[int], str) + + +# From Stephen + + +def test_to_Presentation_042(): + check_stephen_to_pres(Presentation, list[int], list[int]) + + +def test_to_Presentation_043(): + check_stephen_to_pres(Presentation, list[int], str) + + +def test_to_Presentation_044(): + check_stephen_to_pres(InversePresentation, list[int], list[int]) + + +def test_to_Presentation_045(): + check_stephen_to_pres(InversePresentation, list[int], str) + + ############################################################################### # InversePresentation ############################################################################### @@ -622,7 +754,7 @@ def test_to_Presentation_029(): # From InversePresentation -def test_to_InversePresentation_030(): +def test_to_InversePresentation_046(): ip = InversePresentation("abc") ip.inverses("cba") presentation.add_rule(ip, "aaa", "b") @@ -644,7 +776,7 @@ def test_to_InversePresentation_030(): # From function + InversePresentation -def test_to_InversePresentation_031(): +def test_to_InversePresentation_047(): ip = InversePresentation("abc") ip.inverses("cba") presentation.add_rule(ip, "aaa", "b") @@ -674,7 +806,7 @@ def test_to_InversePresentation_031(): # From Presentation -def test_to_InversePresentation_032(): +def test_to_InversePresentation_048(): p = Presentation("abc") presentation.add_rule(p, "aaa", "b") presentation.add_rule(p, "bac", "cab") @@ -705,23 +837,23 @@ def test_to_InversePresentation_032(): # From FroidurePin -def test_to_KnuthBendix_033(): +def test_to_KnuthBendix_049(): kb = check_froidure_pin_to_knuth_bendix(str, "RewriteFromLeft") assert isinstance(kb, KnuthBendix) assert kb.py_template_params == (str, "RewriteFromLeft") -def test_to_KnuthBendix_034(): +def test_to_KnuthBendix_050(): kb = check_froidure_pin_to_knuth_bendix(str, "RewriteTrie") assert isinstance(kb, KnuthBendix) -def test_to_KnuthBendix_035(): +def test_to_KnuthBendix_051(): kb = check_froidure_pin_to_knuth_bendix(list[int], "RewriteFromLeft") assert isinstance(kb, KnuthBendix) -def test_to_KnuthBendix_036(): +def test_to_KnuthBendix_052(): kb = check_froidure_pin_to_knuth_bendix(list[int], "RewriteTrie") assert isinstance(kb, KnuthBendix) @@ -729,22 +861,22 @@ def test_to_KnuthBendix_036(): # From ToddCoxeter + Rewriter -def test_to_KnuthBendix_037(): +def test_to_KnuthBendix_053(): kb = check_todd_coxeter_to_knuth_bendix(str, "RewriteFromLeft") assert isinstance(kb, KnuthBendix) -def test_to_KnuthBendix_038(): +def test_to_KnuthBendix_054(): kb = check_todd_coxeter_to_knuth_bendix(str, "RewriteTrie") assert isinstance(kb, KnuthBendix) -def test_to_KnuthBendix_039(): +def test_to_KnuthBendix_055(): kb = check_todd_coxeter_to_knuth_bendix(list[int], "RewriteFromLeft") assert isinstance(kb, KnuthBendix) -def test_to_KnuthBendix_040(): +def test_to_KnuthBendix_056(): kb = check_todd_coxeter_to_knuth_bendix(list[int], "RewriteTrie") assert isinstance(kb, KnuthBendix) @@ -752,13 +884,13 @@ def test_to_KnuthBendix_040(): # From ToddCoxeter -def test_to_KnuthBendix_041(): +def test_to_KnuthBendix_057(): kb = check_todd_coxeter_to_knuth_bendix_default(str) # RewriteTrie is the default rewriter assert isinstance(kb, KnuthBendix) -def test_to_KnuthBendix_042(): +def test_to_KnuthBendix_058(): kb = check_todd_coxeter_to_knuth_bendix_default(list[int]) # RewriteTrie is the default rewriter assert isinstance(kb, KnuthBendix) @@ -771,13 +903,13 @@ def test_to_KnuthBendix_042(): # From FroidurePin -def test_to_Congruence_043(): +def test_to_Congruence_059(): c = check_froidure_pin_to_congruence(str) assert isinstance(c, Congruence) assert c.py_template_params == (str,) -def test_to_Congruence_044(): +def test_to_Congruence_060(): c = check_froidure_pin_to_congruence(list[int]) assert isinstance(c, Congruence) assert c.py_template_params == (list[int],)