-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathCHANGES.txt
7956 lines (7883 loc) · 460 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Regina - A Normal Surface Theory Calculator
This file gives a detailed list of changes between releases,
including all changes to the C++/Python API.
For just the key highlights, see the (far more readable) file
HIGHLIGHTS.txt.
Version 7.4 [ (to be announced) ]
GENERAL:
- Now requires C++20 (not C++17), and Python 3.7 or newer.
- Added support for simplex and facet locks throughout the API. See
Simplex<dim>::lock() and Simplex<dim>::lockFacet() for an overview
of how locks work. Many routines throughout the API could now
potentially throw a LockViolation (and this is now explicitly noted
in their respective docs); other routines now examine locks as part
of their validity checks (e.g., local moves on triangulations).
- All enumerations are now C++11 scoped enumerations, with the old
names kept as deprecated constants in the regina:: namespace (for
global enumerations) or the relevant class namespace (for class
enumerations).
- Explicit inequality tests (!=) have been removed, and are now
automatically generated from equality tests (==) instead.
- Explicit comparisons (<, <=, >, >=) have been removed, and are now
automatically generated from the new spaceship operator (<=>).
- For several iterator classes, the associated type aliases
(value_type, etc.) are no longer provided as class members, since
these were confusing pybind11. Instead you can (and should) access
these through the C++ standard iterator library (e.g.,
std::iterator_traits<T>::value_type, or std::iter_value_t<T>).
- Several build dependencies are gone: Jansson, Popt, CppUnit.
See the individual sections below for details.
- Updated the SnapPea kernel to the one shipped with SnapPy 3.0.3.
- Updated the bundled copy of Normaliz to version 3.10.3 (30 May 2024).
ENGINE:
Class AbelianGroup:
- New routine hash(), which uses the tight encoding.
- Added a spaceship operator (<=>) for comparisons.
Enum Algorithm:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., ALG_BACKTRACK) have been
renamed as scoped enum values (e.g., Algorithm::Backtrack).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Enum AngleAlg, AngleAlgFlags:
- The individual flags now live inside AngleAlg, which is now a
scoped enumeration for better type safety. In paticular, the
enum constants (e.g., AS_ALG_TREE) have been renamed as scoped
enum values (e.g., AngleAlg::Tree). The old constants have
been kept as deprecated compile-time constants in the regina
namespace.
- Flags can still be combined bitwise; the resulting type is now
just Flags<AngleAlg>, and this should all be happening
automatically behind the scenes. AngleAlgFlags is now
just a deprecated alias for AngleAlg.
Class AngleStructure:
- The vector constructors are now templated, so that you can pass a
vector of some type other than regina::Integer.
- Added a spaceship operator (<=>) for comparisons. This has the
effect of implementing all comparison operators, not just
less-than (<) as before.
Class AngleStructures:
- New routine sort().
Enum Attachment::OwnershipPolicy:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., OWN_MALLOC) have been
renamed as scoped enum values (e.g., OwnershipPolicy::OwnMalloc).
The old names have been kept as deprecated compile-time constants
in the Attachment class.
Enum BagComparison:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., BAG_EQUAL) have been
renamed as scoped enum values (e.g., BagComparison::Equal).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Class Base64SigDecoder, Base64SigEncoder:
- New classes to support base64-encoded signatures, such as
isomorphism signatures and knot/link signatures.
Class Base64SigEncoding:
- Deprecated in favour of the new classes Base64SigEncoder and
Base64SigDecoder.
Class BitManipulator<T>:
- New routine swapBits().
- New routine subsetComparison().
Class Bitmask, Bitmask1<T>, Bitmask2<T, U>:
- Added a spaceship operator (<=>) for subset comparisons. This
has the effect of implementing all comparison operators, not just
less-than-or-equal (<=) as before.
Class BoolSet:
- New routine full().
- Renamed empty() to clear(), without a deprecated alias, to avoid
confusion with the more common pattern where empty() queries
whether or not a container is empty.
- Added a spaceship operator (<=>) for subset comparisons.
Enum CensusPurge, CensusPurgeFlags:
- The individual flags now live inside CensusPurge, which is now
a scoped enumeration for better type safety. In paticular, the
enum constants (e.g., PURGE_NON_MINIMAL) have been renamed
as scoped enum values (e.g., CensusPurge::NonMinimal). The old
constants have been kept as deprecated compile-time constants
in the regina namespace.
- Flags can still be combined bitwise; the resulting type is now
just Flags<CensusPurge>, and this should all be happening
automatically behind the scenes. CensusPurgeFlags is now
just a deprecated alias for CensusPurge.
Enum ChangeType:
- New enum for internal use with triangulation/link change spans.
Class DiscSpecIterator:
- This class no longer provides its iterator-related type aliases
(value_type, etc.) as members, since these confused pybind11.
Instead you should access them through the C++ standard
iterator library (e.g., via std::iterator_traits). The old
member type aliases have been removed completely.
Struct DiscType:
- Added a spaceship operator (<=>) for comparisons. This has the
effect of implementing all comparison operators, not just
less-than (<) as before.
Class Example<dim>:
- Routine doubleCone() now preserves orientedness.
Class Example<2>:
- Routine sphereOctahedron() now returns an oriented triangulation.
Class Example<3>:
- New routine b5().
- New routine threeTorus(), thanks to Rhuaidi Burke.
- Routines lst(), lens(), augTriSolidTorus() and sfsOverSphere()
now check their preconditions and throw an exception if they fail.
- Renamed cuspedGenusTwoTorus() to idealGenusTwoHandlebody().
The old name has been kept as a deprecated alias.
Class Example<4>:
- New routine fourTorus(), thanks to Rhuaidi Burke.
Class ExampleLink:
- New routine chen().
- Added several new routines that return 3-dimensional embeddings
of links (i.e., SpatialLink objects).
Class Face<dim, 1>, FaceNumbering<dim, 1>:
- New static routine faceNumber(u, v) to return the edge number in
a simplex spanned by vertices u and v. This is implemented in
FaceNumbering<dim, 1> and is also accessible to Face<dim, 1>.
- New routine Face<dim, 1>::isLoop().
Class Face<dim, 2>:
- Triangle<3>::Type is deprecated, and is now an alias for the new
global type TriangleType. Moreover, this is now a scoped
enumeration for better type safety. The old enum constants
(e.g., Triangle<3>::CONE) are likewise now deprecated aliases for
the new scoped enum values (e.g., TriangleType::Cone).
- The 3-D routines Triangle<3>::type(), Triangle<3>::subtype(),
isMobiusBand() and isCone() have been renamed to triangleType(),
triangleSubtype(), formsMobiusBand() and formsCone(), and
are now available for triangles within triangulations of any
dimension ≥ 3. The old 3-D routines are now deprecated.
Class Face<dim, dim-1>:
- New routine join().
- New routines lock(), unlock(), and isLocked().
Class FacePair:
- Added a spaceship operator (<=>) for comparisons.
Class FacetPairing<dim>:
- New generic routine hasMultiEdge(), which generalises the
3-D routine hasTripleEdge().
- New routine hash(), which uses the tight encoding.
Class FacetSpec<dim>:
- New routine hash(), which uses the tight encoding.
- Added a spaceship operator (<=>) for comparisons. This has the
effect of implementing all comparison operators, not just
less-than (<) and less-than-or-equal (<=) as before.
Enum FileFormat:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., REGINA_XML_GEN_3) have been
renamed as scoped enum values (e.g., FileFormat::XmlGen3).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Class FixedArray:
- New class for stack-based fixed-size arrays whose sizes are not
known until runtime.
Class Flags<T>:
- Updated to support both scoped and unscoped enumerations.
- New operator bool(), which tests for a non-empty flag set.
- Fixed an error in the 3- and 4-argument variants of ensureOne(),
which would clear out all unrelated flags if none of the 3 or 4
given flags were set. This error was harmless in practice:
the only effect was that, when enumerating fundamental normal
surfaces with a non-trivial algorithm flag that did _not_ include
an explicit Hilbert basis algorithm, the algorithm flag could
have been ignored (thereby using the default vertex enumeration
algorithm as the first phase of the primal Hilbert basis method).
Enum Framing:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., FRAMING_SEIFERT) have been
renamed as scoped enum values (e.g., Framing::Seifert).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Class GraphLoop, GraphPair, GraphTriple:
- Added a spaceship operator (<=>) for aesthetic comparisons.
This has the effect of implementing all comparison operators,
not just less-than (<) as before.
Struct GroupExpressionTerm:
- Added a spaceship operator (<=>) for comparisons. This has the
effect of implementing all comparison operators, not just
less-than (<) as before.
Class GroupPresentation:
- Renamed intelligentSimplify() to simplify(). The old name is
kept as a deprecated alias.
Class HomGroupPresentation:
- Renamed intelligentSimplify() and intelligentNielsen() to
simplify() and nielsen() respectively. The old names are kept
as deprecated aliases.
Class HomologicalData:
- New routine triangulation().
Enum HyperAlg, HyperAlgFlags:
- The individual flags now live inside HyperAlg, which is now a
scoped enumeration for better type safety. In paticular, the
enum constants (e.g., HS_VERTEX_DD) have been renamed as scoped
enum values (e.g., HyperAlg::VertexDD). The old constants have
been kept as deprecated compile-time constants in the regina
namespace.
- Flags can still be combined bitwise; the resulting type is now
just Flags<HyperAlg>, and this should all be happening
automatically behind the scenes. HyperAlgFlags is now
just a deprecated alias for HyperAlg.
Enum HyperCoords:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., HS_STANDARD) have been
renamed as scoped enum values (e.g., HyperCoords::Standard).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Enum HyperList, HyperListFlags:
- The individual flags now live inside HyperList, which is now a
scoped enumeration for better type safety. In paticular, the
enum constants (e.g., HS_VERTEX) have been renamed as scoped enum
values (e.g., HyperList::Vertex). The old constants have been
kept as deprecated compile-time constants in the regina namespace.
- Flags can still be combined bitwise; the resulting type is now
just Flags<HyperList>, and this should all be happening
automatically behind the scenes. HyperListFlags is now
just a deprecated alias for HyperList.
Class Integer:
- New routine hash(), which hashes the integer down to a size_t.
- New routine str(), which is an alias for stringValue().
- New class constant supportsInfinity, which is set to false.
- Added a spaceship operator (<=>) for comparisons.
Class IntOfBits<k>:
- New type alias to simplify arithmetic when using IntOfSize<...>.
Class Isomorphism<dim>:
- New routine hash(), which uses the tight encoding.
Class IsoSigPrintable<dim>:
- No longer derives from Base64SigEncoding (which is now
deprecated).
Enum Language:
- New enumeration that describes supported programming languages.
Class LargeInteger:
- New routine hash(), which hashes the integer down to a size_t.
- New routine str(), which is an alias for stringValue().
- New class constant supportsInfinity, which is set to true.
Class Laurent<T>, Laurent2<T>:
- New routine hash(), which uses the tight encoding.
- Added a spaceship operator (<=>) for comparisons.
Class LensSpace:
- Added a spaceship operator (<=>) for aesthetic comparisons, which
also adds comparison operators (<, <=, >, >=) to this class.
Class LightweightSequence<T>:
- Added a spaceship operator (<=>) for comparisons. This has the
effect of implementing all comparison operators, not just
less-than (<) as before.
Class Link:
- New routine makeAlternating().
- New routine seifertCircles().
- New routines isConnected() and diagramComponents().
- New routines insertLink() and moveContentsTo().
- New routines countTrivialComponents() and pdAmbiguous(), to help
understand the limitations of planar diagram codes.
- New routine hash(), which uses the tight encoding.
- New routines overForComponent() and underForComponent().
- New variant of reverse() to reverse just one component of a
multiple-component link.
- New routine componentsByStrand().
- Regarding Reidemeister moves:
+ The (check, perform) variants of r1(), r2() and r3() are
deprecated. You should now use these routines _without_ extra
check/perform arguments: they will always check for and (if
possible) perform the relevant moves.
+ New routines hasR1(), hasR2() and hasR3() for checking only.
+ New read-only routines withR1(), withR2() and withR3() that (if
possible) return a new link with the relevant moves performed.
- Extended knotSig(), rewrite() and simplifyExhaustive() to work
with all link diagrams with fewer than 64 link components.
It is now recommended to use sig() and fromSig() instead of
knotSig() and fromKnotSig() since these names better reflect the
scope of these routines. The original names knotSig() and
fromKnotSig() have been kept (and are _not_ deprecated).
- Routine hasReducingPass() can now handle multiple-component links.
- Added a variant of translate() that takes crossings instead of
strand references.
- Added an alias sig() for knotSig().
- Renamed intelligentSimplify() to simplify(). The old name is
kept as a deprecated alias.
- Fixed a bug where calling resolve() would not clear out any
cached link polynomials that had already been computed.
- Overhaul of the internal change span classes, including a new
inner class ChangeAndClearSpan.
- Optimised so that computed topological properties (e.g., Jones
and HOMFLY-PT polynomials) are preserved through operations that
do not change the topology (e.g., Reidemeister moves).
- Renamed dumpConstruction() to source(), and extended it to produce
either C++ and Python code via an optional language argument.
The old C++-only dumpConstruction() is kept but deprecated.
Also fixed a problem where the C++ initialiser lists were empty
(instead of containing a single 0) for zero-crossing components.
- Routine selfFrame() now returns a boolean indicating whether
anything changed.
- Routine simplifyExhaustive() now ensures that any change to the
link diagram happens on the calling thread.
Class LockViolation:
- New exception class used when the user attempts to change a
locked simplex or facet.
Class Manifold:
- Added a spaceship operator (<=>) for aesthetic comparisons.
This has the effect of implementing all comparison operators,
not just less-than (<) as before.
Class Matrix<T>:
- Added a copy constructor that takes a matrix whose elements are
of a different type.
- Added destructive and non-destructive rank() functions.
- New routines negateRow() and negateCol().
- New routine initialised().
- Renamed initialise() to fill(), to make it clear that this has
nothing to do with initialised vs uninitialised matrices.
The old name is kept but deprecated.
- The ring template argument now defaults to true for matrices over
native C++ floating-point types, and Python now has a new binding
MatrixReal to represent the C++ type Matrix<double>.
Class ModelLinkGraph:
- New routines isSimple() and isConnected().
- New routine generateAnyLink().
- Routine generateMinimalLinks() now supports multiple-component
links.
Class ModelLinkGraphNode:
- New routines loops(), bigons() and triangles().
Enum NamedPermGroup:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., PERM_GROUP_TRIVIAL) have been
renamed as scoped enum values (e.g., NamedPermGroup::Trivial).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Class NativeInteger<bytes>:
- New routine str().
- Added a spaceship operator (<=>) for comparisons.
Enum NiceType:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., NICE_INTRODUCE) have been
renamed as scoped enum values (e.g., NiceType::INTRODUCE).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Enum NormalAlg, NormalAlgFlags:
- The individual flags now live inside NormalAlg, which is now a
scoped enumeration for better type safety. In paticular, the
enum constants (e.g., NS_VERTEX_DD) have been renamed as scoped
enum values (e.g., NormalAlg::VertexDD). The old constants have
been kept as deprecated compile-time constants in the regina
namespace.
- Flags can still be combined bitwise; the resulting type is now
just Flags<NormalAlg>, and this should all be happening
automatically behind the scenes. NormalAlgFlags is now
just a deprecated alias for NormalAlg.
Enum NormalCoords:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., NS_STANDARD) have been
renamed as scoped enum values (e.g., NormalCoords::Standard).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Enum NormalList, NormalListFlags:
- The individual flags now live inside NormalList, which is now a
scoped enumeration for better type safety. In paticular, the
enum constants (e.g., NS_VERTEX) have been renamed as scoped enum
values (e.g., NormalList::Vertex). The old constants have been
kept as deprecated compile-time constants in the regina namespace.
- Flags can still be combined bitwise; the resulting type is now
just Flags<NormalList>, and this should all be happening
automatically behind the scenes. NormalListFlags is now
just a deprecated alias for NormalList.
Class NormalSurface, NormalHypersurface:
- Fixed a bug where, if a surface was a normalised triangle link
but not a thin triangle link, then calling isThinTriangleLink()
_before_ isNormalTriangleLink() would make the latter return
an empty list of results. Likewise with tetrahedron links in
4-dimensional triangulations.
- Fix a bug in components() when used on disconnected surfaces,
where if it were called _after_ connectedness has already been
established (i.e., after isOrientable(), isTwoSided(),
isConnected(), or an earlier call to components()), then it would
return the entire surface as a single component.
- The vector constructors are now templated, so that you can pass a
vector of some type other than regina::LargeInteger.
- Added a spaceship operator (<=>) for comparisons. This has the
effect of implementing all comparison operators, not just
less-than (<) as before.
Class NormalSurfaces, NormalHypersurfaces:
- The inner class VectorIterator no longer provides its
iterator-related type aliases (value_type, etc.) as members,
since these confused pybind11. Instead you should access them
through the C++ standard iterator library (e.g., via
std::iterator_traits). The old member type aliases have been
removed completely.
Enum NormalTransform:
- This is now a scoped enumeration, for better type safety. The
old enum constants (e.g., NS_FILTER_DISJOINT) are now scoped
enum values (e.g., NormalTransform::FilterDisjoint).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Class Packet:
- Renamed ChangeEventSpan to PacketChangeSpan, to make it clear
that this only matters for objects held by packets. The old
name is kept as a deprecated alias.
- New inner type alias PacketChangeGroup, to assist with readability
when using a ChangeEventSpan for optimisation purposes only.
- For Python users, added an alias makePacket() for make_packet().
- The inner classes ChildIterator and SubtreeIterator no longer
provides their iterator-related type aliases (value_type, etc.)
as members, since these confused pybind11. Instead you should
access them through the C++ standard iterator library (e.g., via
std::iterator_traits). The old member type aliases have been
removed completely.
Class PacketData<Held>:
- Renamed ChangeEventSpan to PacketChangeSpan, to make it clear
that this only matters for objects held by packets. The old
name is kept as a deprecated alias.
- New inner type alias PacketChangeGroup, to assist with readability
when using a ChangeEventSpan for optimisation purposes only.
- The inner ChangeEventSpan class has a new member function held().
Enum PacketHeldBy:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., HELD_BY_PACKET) have been
renamed as scoped enum values (e.g., PacketHeldBy::Packet).
As this enumeration was for internal use, the old names have
been removed completely.
Enum PacketType:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., PACKET_TRIANGULATION3) have been
renamed as scoped enum values (e.g., PacketType::Triangulation3).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Class Perm<n>:
- New routine hash().
- New class constant degree.
- Added an alias Perm<6>::cachedOrder(), for consistency with the
other permutation classes Perm<2..15>.
- Added a spaceship operator (<=>) for comparisons under the Sn
ordering. This has the effect of implementing all comparison
operators, not just less-than (<) as before.
- Sn and orderedSn now use the new public type PermSn<...> (see
below), which now supports both iteration and array-like access.
- For n > m, Perm<n>::Sm and Perm<n>::orderedSm are now deprecated,
and they now use the new internal type PermSubSn<...> (see below).
Likewise, the constants Sn_1 and nPerms_1 are now deprecated.
- Classes Perm<2,3> now have a type alias Code2 (which is identical
to Code), to help with generic programming.
Enum PermCodeType:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., PERM_CODE_IMAGES) have been
renamed as scoped enum values (e.g., PermCodeType::Images).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Enum PermOrder:
- New enumeration to represent different ways of ordering
permutations.
Class PermSn<n, order>:
- New type to support Perm<n>::Sn and Perm<n>::orderedSn. This is
now a public type, and it now supports both iteration and
array-like access.
Class PermSubSn<n, m>:
- New internal type to support Perm<n>::Sm where n > m. This
supports array-like access only, not iteration.
Struct Unprotected:
- New C++-only type that allows in-built safety checks to be
disabled in some specific circumstances.
Class Rational:
- New function str().
- Added a spaceship operator (<=>) for comparisons.
Class Rotation3D:
- New class to support floating-point 3-D geometry.
Class SatAnnulus:
- Routine attachLST() now checks its preconditions, and throws
an exception if they fail.
Class SatBlock:
- Added a spaceship operator (<=>) for ordering.
This has the effect of implementing all comparison operators,
not just less-than (<) as before.
Class Segment3D:
- New class to support floating-point 3-D geometry.
Struct SFSFibre:
- Added a spaceship operator (<=>) for comparisons. This has the
effect of implementing all comparison operators, not just
less-than (<) as before.
Class SFSpace:
- Added a spaceship operator (<=>) for aesthetic comparisons.
This has the effect of implementing all comparison operators,
not just less-than (<) as before.
- SFSpace::ClassType has been renamed to SFSpace::Class, and is now
a scoped enumeration for better type safety. The old enum
constants (e.g., SFSpace::o1) have been renamed as scoped enum
values (e.g., SFSpace::Class::o1). The old names have been kept
as deprecated compile-time class constants of SFSpace.
Class Simplex<dim>:
- New routines lock(), lockFacet(), unlock(), unlockFacet(),
unlockAll(), isLocked(), isFacetLocked(), and lockMask().
Class SnapPeaTriangulation:
- Construction from a SnapPea data file no longer crashes when the
triangulation in the file has finite vertices (which may be seen
if the file was created by some tool other than SnapPy). The
manifold will however be retriangulated (drilled and filled) upon
creation since the SnapPea kernel requires an ideal triangulation.
- The class enumerations SolutionType, CoverEnumerationType and
CoverType have been renamed to Solution, CoverEnumeration and
Cover, and are now scoped enumerations for better type safety.
The old constants (e.g., SnapPeaTriangulation::geometric_solution)
have been renamed as scoped enum values (e.g.,
SnapPeaTriangulation::Solution::Geometric). The old names have
been kept as deprecated compile-time class constants of
SnapPeaTriangulation.
Class SpatialLink:
- New packet class for specific embeddings of knots and links in
the 3-sphere. Currently this offers very limited features, but
these should be expanded to become more useful over time.
Enum SurfaceExport, SurfaceExportFields:
- The individual flags now live inside SurfaceExport, which is now
a scoped enumeration for better type safety. In paticular, the
enum constants (e.g., surfaceExportName) have been renamed
as scoped enum values (e.g., SurfaceExport::Name). The old
constants have been kept as deprecated compile-time constants
in the regina namespace.
- Flags can still be combined bitwise; the resulting type is now
just Flags<SurfaceExport>, and this should all be happening
automatically behind the scenes. SurfaceExportFields is now
just a deprecated alias for SurfaceExport.
Enum SurfaceFilterType:
- This is now a scoped enumeration, for better type safety. The
old enum constants (e.g., NS_FILTER_PROPERTIES) have been renamed
as scoped enum values (e.g., SurfaceFilterType::Properties).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Class Tangle:
- Regarding Reidemeister moves:
+ The (check, perform) variants of r1(), r2() are deprecated.
You should now use these routines _without_ extra check/perform
arguments: they will always check for and (if possible) perform
the relevant moves.
+ New routines hasR1(), hasR2() for checking only.
+ New read-only routines withR1() and withR2() that (if possible)
return a new link with the relevant moves performed.
- Added a variant of translate() that takes crossings instead of
strand references.
Class TightEncodable<T>:
- Now provides a hash() function also, based on the tight encoding.
Class TopologyLockable, TopologyLock:
- Split out the old Triangulation::TopologyLock machinery into
new standalone classes, which are now used with Link as well.
Class TreeBag:
- Renamed type() and subtype() to niceType() and niceIndex()
respectively. Moreover, niceType() now returns a NiceType, not
an int. The old functions are kept but deprecated.
Class TreeDecomposition:
- Functions dot() and writeDot() now take an optional parameter to
support dark mode.
Enum TreeDecompositionAlg:
- This is now a scoped enumeration, for better type safety.
The old enum constants (e.g., TD_UPPER) have been
renamed as scoped enum values (e.g., TreeDecompositionAlg::Upper).
The old names have been kept as deprecated compile-time constants
in the regina:: namespace.
Enum TriangleType:
- New scoped enumeration to replace the old non-scoped enumeration
Triangle<3>::Type. The new TriangleType enumeration is used for
triangles within triangulations of all dimensions ≥ 3.
Class Triangulation<dim>:
- New routines hasLocks(), lockBoundary(), and unlockAll(), to
work with locked top-dimensional simplices and their facets.
- New routine reorderBFS(), which essentially makes the old
Triangulation<3>::reorderTetrahedraBFS() available in all
dimensions.
- Regarding Pachner moves:
+ The (check, perform) variant of pachner() is deprecated.
You should now call pachner() _without_ extra check/perform
arguments: the function will always check for and (if possible)
perform the relevant move.
+ New routine hasPachner() for checking only.
+ New read-only routine withPachner() that (if possible) returns
a new triangulation with the relevant move performed.
- Regarding 2-0 moves:
+ These moves are now available for triangulations of all
dimensions, but only for facial dimensions ≤ max(2, dim-2).
+ The (check, perform) function twoZeroMove() is deprecated.
You should now call move20() instead, which does _not_ take
extra check/perform arguments: move20() will always check for
and (if possible) perform the relevant move.
+ New routine has20() for checking only.
+ New read-only routine with20() that (if possible) returns
a new triangulation with the relevant move performed.
- Regarding boundary shelling moves:
+ These moves are now available for triangulations of all
_standard_ dimensions (2, 3 and 4).
+ The (check, perform) variant of shellBoundary() is deprecated.
You should now call shellBoundary() _without_ extra
check/perform arguments: the function will always check for
and (if possible) perform the relevant move.
+ New routine hasShellBoundary() for checking only.
+ New read-only routine withShellBoundary() that (if possible)
returns a new triangulation with the relevant move performed.
- New routine randomiseLabelling().
- New routine hash(), which uses the tight encoding.
- New routines dot() and writeDot().
- New alias sig(), which is is identical to isoSig().
- Extended translate() to support top-dimensional simplices (not
just lower-dimensional faces), and added a variant of translate()
that takes face embeddings instead of faces.
- Renamed dumpConstruction() to source(), and extended it to produce
either C++ and Python code via an optional language argument.
The old C++-only dumpConstruction() is kept but deprecated.
- Added a variant of insertTriangulation() that takes an rvalue
reference (alongside the original which takes a const reference).
- The two-argument copy constructor is now a three-argument
copy constructor, giving an additional boolean option for
whether to clone simplex/facet locks.
- Replaced makeDoubleCover() with doubleCover(), which returns the
result as a new triangulation. The old routine is kept but
deprecated.
- Renamed simplifiedFundamentalGroup to setGroupPresentation().
The old name is deprecated but kept for backwards compatibility.
- Overhaul of the internal change span classes, including a new
inner class ChangeAndClearSpan.
Class Triangulation<3>:
- New routines has44(), has21(), has02(), hasOpenBook(),
hasCloseBook(), hasCollapseEdge().
- New routines with44(), with21(), with02(), withOpenBook(),
withCloseBook(), withCollapseEdge().
- New routines isOneEfficient() and knowsOneEfficient(). For now,
1-efficiency testing is only available for ideal triangulations.
- Renamed intelligentSimplify() to simplify(). The old name is
kept as a deprecated alias.
- Routine puncture() now takes an optional triangle, not an
optional tetrahedron. The old version is kept but deprecated.
- Routine insertLayeredSolidTorus() is now non-recursive, and
throws an exception if its preconditions fail.
- Routines layerOn(), pinchEdge(), puncture(), turaevViro() and
turaevViroApprox() now throw an exception if their preconditions
fail.
- Routine reorderTetrahedraBFS() is now a deprecated alias for
reorderBFS() (which is available in all dimensions).
- Routine idealToFinite() no longer subdivides the triangulation
if there are invalid edges but no vertices to truncate.
- Routines hasStrictAngleStructure(), hasGeneralAngleStructure(),
strictAngleStructure() and generalAngleStructure() have changed
their behaviour for the empty triangulation: they now return the
empty angle structure as a solution (since, strictly speaking,
the empty structure is both strict and taut).
- Fixed an issue with zeroTwoMove(edge, t0, t1) where: if the given
edge was valid and boundary, and if t0 and/or t1 was exactly the
edge degree, and if the routine was asked to check legality, then
the move would be incorrectly reported as illegal. (This was
essentially harmless, since it effectively made the routine
over-cautious by not performing moves that it could have, and
since if the routine was _not_ asked to check legality then the
move was still being performed correctly.)
- Routine from SnapPea() can now take either a filename or file
contents. It can also now handle empty lines before the manifold
name (SnapPy does not write these, but some other tools do).
- Routines retriangulate() and simplifyExhaustive() no longer
throw an exception when called on an empty triangulation.
- Routine simplifyExhaustive() now ensures that any change to the
triangulation happens on the calling thread.
Class Triangulation<4>:
- New routine simplifyUpDown(); thanks to Rhuaidi Burke.
- New routines has44(), hasOpenBook(), hasCollapseEdge(),
hasSnapEdge().
- New routines with44(), withOpenBook(), withCollapseEdge(),
withSnapEdge().
- Renamed intelligentSimplify() to simplify(). The old name is
kept as a deprecated alias.
- Routines retriangulate() and simplifyExhaustive() no longer
throw an exception when called on an empty triangulation.
- Routine simplifyExhaustive() now ensures that any change to the
triangulation happens on the calling thread.
Class Vector<T>:
- Added a copy constructor that takes a vector whose elements are
of a different type.
- Added support for tight encodings and decodings.
- New routine hash(), which uses the tight encoding.
Class Vector3D:
- New class to support floating-point 3-D geometry.
Class Vertex<3>:
- Vertex<3>::LinkType has been renamed to Vertex<3>::Link, and is
now a scoped enumeration for better type safety. The old enum
constants (e.g., Vertex<3>::SPHERE) have been renamed as scoped
enum values (e.g., Vertex<3>::Link::Sphere). The old names have
been kept as deprecated compile-time class constants of Vertex<3>.
Function binomMedium():
- Now supports arguments n ≤ 61 (not n ≤ 29), and uses a return
type large enough to support this (i.e., at least 64 bits).
- Now supports k < 0 or k > n (returning 0 as expected).
- Now throws an exception if n is outside the allowed range.
Function binomSmall():
- This is now consteval, which means it cannot be called at
runtime. As a result, Python users can no longer use this
function at all: if you are in Python you should call
binomMedium() instead.
Function columnEchelonForm():
- Cleaned up and relaxed the preconditions.
- Now checks its preconditions and throws an exception if they fail.
Function foreach_constexpr():
- New pair of functions to provide compile-time loops over an
arbitrary set of integers.
Function gcdWithCoeffs():
- Fixed an overflow error that occurred in the case b == LONG_MAX
(and nowhere else), and highlighted in the docs that LONG_MIN
may not be handled correctly (due to the inability to negate).
Function modularInverse():
- Now checks its preconditions and throws an exception if they fail.
- Now explicitly allows (n,k) = (1,0); in the past this was
supported but technically a violation of the preconditions.
- Now takes arguments of type long (not unsigned long).
Function preImageOfLattice():
- Now checks some of its preconditions and throws an exception
if they fail.
Function reducedMod():
- Now checks its preconditions and throws an exception if they fail.
Function rowBasisAndOrthComp():
- Now checks its preconditions and throws an exception if they fail.
Functions simpler(), simplerThreeWay():
- The old simpler() functions that compare 2x2 matrices are now
deprecated (both the 2-argument and the 4-argument variants).
- To replace them, there are new simplerThreeWay() functions that
return a std::strong_ordering instead of a bool (likewise with
both 2-argument and 4-argument variants).
Function torsionAutInverse():
- Now checks some of its preconditions and throws an exception
if they fail.
Macro ENABLE_MEMBER_FOR_REGINA_INTEGER:
- This is deprecated, and is no longer used within Regina. The
suggested alternative is to use a static_assert to ensure that a
member function is only instantiated with appropriate types.
Constants is_cpp_integer_v<T>, is_unsigned_cpp_integer_v<T>:
- New alternatives to using std::is_integeral_v<T> and
std::is_unsigned_v<T> that allow for 128-bit integers also.
Global array quadString:
- These are now C++-style strings (std::string), not C-style
strings (array of char). For newer compilers, they are still
inline constexpr, but for older compilers that do not support
constexpr strings they are instead declared as inline const.
PYTHON:
- Updated the included pybind11 library from 2.10.0 to 2.13.6.
This drops support for Python 3.6.
- Improved the speed of iteration (specifically, throwing/catching
StopIteration exceptions).
- Rich flag types based on regina::Flags<...> (such as NormalAlg,
CensusPurge, etc.) now support a bool() operator that tests for
a non-empty flag set.
- The underlying enum types for rich flags (e.g., NormalAlgFlags,
CensusPurgeFlags, etc.) likewise now have a bool() operator that
tests for a zero flag. This is because zero flags play a special
role here (they have no effect when ORed or XORed into a flag set).
- All other enum types (i.e., those that are _not_ intended to be
combined bitwise into flag sets) do not have a bool() operator,
since their underying integer values are irrelevant. All of their
enum values will be treated as True by python.
USER INTERFACE:
- Now uses multithreading for those long computations that support it.
- No longer reads the syntax highlighting theme from file; instead
the theme is hard-coded into the executable. This removes the
build dependency on the Jansson JSON library.
- The summary tabs for normal surfaces and hypersurfaces now split out
separate counts for non-embedded (immersed and/or singular)
surfaces and hypersurfaces.
UTILITIES:
regina-engine-config:
- Made more robust, and removed obsolete options (--exec-prefix,
and the option to set --prefix to a custom directory).
regina-helper:
- New command-line tool for performing miscellaneous tasks.
tricensus:
- Renamed option --tetrahedra to --top, with aliases --triangles,
--tetrahedra and --pentachora.
- New option --regina to output Regina data files (the default).
- New option --dim3 for dimension 3 (the default).
- Fixed a race condition with --threads where the number of
triangulations reported on the console could be wrong (although
the actual list of triangulations in the output file was correct).
tricensus, retriangulate:
- Ported the handling of command-line options from Popt to
GNU getopt_long(). This removes the build dependency on Popt.
TEST SUITE:
- Ported the C++ test suite to use the GoogleTest framework (which is
included with Regina's sources). This removes the build dependency
on CppUnit.
Version 7.3 [ 18 March, 2023 ]
ENGINE:
Class BitManipulator<T>:
- Routines bits(), firstBit() and lastBit() are now constexpr.
Class Component<4>:
- Fix a bug where single-vertex boundary components were included
in Triangulation<4>::boundaryComponents(), but were omitted from
Component<4>::boundaryComponents().
Class GroupExpression:
- The string constructor now contracts terms like "aaaaBB" to become
g0^4 g1^-2 (i.e., exponents will be used even if the input does
not supply them).
- The string constructor now takes the number of generators as an
optional argument, and throws an exception if some generator in
the string is out of range.
Class GroupPresentation:
- Routine enumerateCovers() now accepts indices ≤ 11, not ≤ 7.
- The string constructor now contracts terms like "aaaaBB" to become
g0^4 g1^-2 (i.e., exponents will be used even if the input does
not supply them).
- The string constructor now throws an exception if some relation
contains a generator that is out of range.
- Renamed simplifyWord() to simplifyAndConjugate(), to make it
clear to the user that conjugation might take place. The old
name simplifyWord() has been removed completely.
- Fixed a bug in the text-based recogniseGroup(), which could have
reported the wrong monodromy for a group that was (correctly)
recognised as an extension over Z. This was a side-effect of
the simplification bug in HomGroupPresentation (see below).
Class HomGroupPresentation:
- Fixed a bug in intelligentSimplify(), intelligentNielsen() and
smallCancellation() where images/preimages of generators were
potentially being conjugated. See
https://regina-normal.github.io/bugs.html for further discussion.
Class Integer:
- New python-only routine pythonValue().
Class Perm<n>:
- Extended the generic Perm<n> class to make its API as rich as the
specialised classes for smaller n. This means the generic class
now supports ++ and < operators, pow(), order(), and
isConjugacyMinimal().
- Optimised several algorithms for the generic Perm<n> class
that were originally quadratic in n.
- The generic Perm<n> now offers the precomptuation-assisted
operations cachedInverse().
- New routines conjugate() and cachedConjugate(), to replace the
three-way cachedComp() (which was designed for conjugation).
The three-way cachedComp() is now deprecated; instead call
cachedConjugate() if you are conjugating, or else call the
two-way cachedComp() twice.
- All Perm<n> classes now have precompute(), cachedInverse(),
cachedComp(), cachedPow() and cachedOrder(), even for smaller n
where these are unnecessary, to assist with writing generic code.
Class PermClass<n>:
- New class to describe a conjugacy class of permutations.
Class PermGroup<n>:
- New class to describe groups of permutations.
Class SnapPeaTriangulation:
- Fixed a buffer overflow in the SnapPea kernel, which was
accessible via SnapPeaTriangulation::snapPea().
Class Triangulation<dim>, TriangulationBase<dim>:
- The copy constructor and copy assignment operator now clones
skeletal objects as well, with the guarantee that they will use
the same numbering and labelling as in the source triangulation.
Class Triangulation<2>:
- New routines isSphere() and isBall().
Version 7.2 [ 28 October, 2022 ]
GENERAL:
- Regina now has docstrings throughout its Python module. These are
extracted automatically from the hand-written C++ documentation, so
you will still find C++ terminology. Nevertheless, these are now
available in Python for all of Regina's classes and functions.
- Began moving to a more readable markdown format for documentation
in the C++ headers. A lot of work is already done here, but this is
an ongoing project. See also the new style guide for API docs in
the Regina Handbook (in the new chapter on Contributing to Regina).
ENGINE:
Class DegreeLessThan, DegreeGreaterThan:
- Deprecated, since these are one-liners that can be done using a
lambda instead. These classes will eventually be removed.
Class Example<3>:
- Renamed whiteheadLink() to whitehead(). The old name is kept
as a deprecated alias.
Class Example<4>:
- Shrunk k3() to 54 pentachora (thanks again to Rhuaidi Burke).
Class Face<dim, subdim>
- Routines face<lowerdim> and faceMapping<lowerdim> now explicitly
require 0 <= lowerdim < subdim (though this was always enforced
in Python, and the only meaningful scenario in C++ that this
could possibly rule out is the trivial case lowerdim == subdim).
Class HyperEncoding:
- New static function empty().
Class ListView<...>:
- Added equality operators (== and !=).
- Added a specialisation for fixed-size C-style arrays:
ListView<Element[n]>.
Class ModelLinkGraph:
- Routine flype() now throws an exception if the given arcs
are not laid out on the plane in the expected manner.
- Routine generateMinimalLinks() now throws an exception if its
precondition is not met.
- Routines plantri(), canonicalPlantri() and fromPlantri() can
now work with graphs with up to 52 nodes (instead of 26).
Beyond 26 nodes, Regina's format differs from plantri's own.
- Routines plantri() and canonicalPlantri() now throw an
exception if the graph has more than 52 nodes.
- Routine fromPlantri() has dropped the precondition on the size
of the graph, since this is explicitly checked.
Class NormalEncoding:
- New static function empty().
Class NormalHypersurface:
- New constructor to build the empty surface.
Class NormalSurface:
- New constructor to build the empty surface.
Class Simplex<dim>:
- Routines face<subdim> and faceMapping<subdim> now explicitly
require 0 <= subdim < dim (though this was always enforced in
Python, and other values of \a subdim would have always failed
to compile in C++).
Class Snapshottable<T>:
- Routine isReadOnlySnapshot() is now public, not protected.
Class TableView:
- New class to help wrap read-only multi-dimensional arrays.
Class TorusBundle:
- The class constructors now throw an exception if the given
monodromy does not have determinant ±1 (note that this has
always a precondition).
Class Triangulation<2>:
- The trivial isValid() routine is now provided by the common
base class TriangulationBase<2>, and is not reimplemented here.
Class Triangulation<3>:
- Renamed isHandlebody() to recogniseHandlebody(). There is no
deprecated alias, since the issue here was users potentially
misinterpreting the return type because of the function name.
- The synonyms minimizeBoundary() and minimizeVertices() (which
were convenience routines that called minimiseBoundary() and
minimiseVertices() respectively) are now deprecated. Going
forward we will stick to just one style of spelling (British
English, which Regina has always offered).
Class Triangulation<dim>:
- Renamed barycentricSubdivision() to subdivide(). The old
name is kept as a deprecated alias.
- Renamed fundamentalGroup() to group(). The old, more expressive
name will be kept as a long-term alias (it is *not* deprecated).
Function buildInfo():
- New function that allows packagers to embed additional
version/build-related information in the calculation engine.
Function maxDim():
- New constexpr function that indicates whether Regina was built
with support for higher dimensions 9..15.
PYTHON:
- Updated the included pybind11 library from 2.8.1 to 2.10.0.
This means we can now support Python 3.11, but no longer support
Python 3.4 or 3.5.
- Several classes that provide array-like access (__getitem__) now
implement the special __len__() function also. Note that this
affects how objects are evaluated in a boolean context. Affected
classes: AngleStructures, Cyclotomic, FacetPairing<dim>,
Isomorphism<dim>, ListView, Matrix2, NormalHypersurfaces,
NormalSurfaces, Vector<T>.
- A few omissions in the Python bindings were fixed. Other than
giving Python users access to more functions, two of these fixes
mean a change in behaviour for Python users: these are the
newly-added bindings for SnapPeaTriangulation::snapPea() and
SnapPeaTriangulation::saveSnapPea(). Previously if Python users
called these functions they would fall back to the inherited
versions from Triangulation<3>, which behave differently.
- A couple of errors in the Python bindings were also fixed:
+ Cyclotomic.negate() in Python was incorrectly bound to
Cyclotomic::invert in C++;
+ regina.swap(BitmaskN, BitmaskN) in Python (for fixed-width
bitmask types Bitmask8, Bitmask16, etc.) was incorrectly bound to
regina::swap(Bitmask&, Bitmask&) in C++ (i.e., the swap function
for the main Bitmask class). Any attempt to call this function
in Python would have resulted in undefined behaviour.
See https://regina-normal.github.io/bugs.html for further discussion
of how these issues might have affected you.
USER INTERFACE:
- Fixed a deadlock that occurs in the Windows GUI when opening two
Python consoles in quick succession (e.g., by a double-click).
UTILITIES:
- Most command-line utilities now support -? / --help, as well as
a new -v / --version option to show the current verson of Regina.
- For regina-engine-config, the --version option now outputs more
detailed version/build information, not just "X.Y".
Version 7.1 [ 30 September, 2022 ]
GENERAL:
- Regina now supports Python 3 only (not Python 2 or 3).
- The GUI can now build against either Qt5 or Qt6.
- Updated the bundled copy of Normaliz to version 3.9.3 (20 Apr 2022).
- Removed all code that was deprecated in or before version 7.0.
- Many native integer types (e.g., int, unsigned, long) have been
changed, reflecting more natural and/or consistent choices.
In particular, the types used for indices, sizes and/or lengths
now more consistently use size_t (or ssize_t when needed), and
the types used for "small" integers now more consistently use int
instead of unsigned. Note in particular that some types have
changed from signed to unsigned, and vice versa.
ENGINE:
Class AbelianGroup:
- New tightDecoding() routines.
Class AngleStructures: