-
Notifications
You must be signed in to change notification settings - Fork 4
/
ChangeLog
759 lines (410 loc) · 20.1 KB
/
ChangeLog
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
=====================
intervalxt Change Log
=====================
.. current developments
v3.13.1
====================
**Fixed:**
* Fixed compilation on macOS.
v3.13.0
====================
**Added:**
* Added `Equivalence` and `EquivalenceClass` to quickly compare whether two surfaces are equal with respect to a certain notion of equality, e.g., modulo a relabeling of edges, modulo a linear transformation, …
* Added `FlatTriangulation::relabel()` to create a copy of the surface with permutated half edge labels.
**Deprecated:**
* Deprecated `FlatTriangulation::isomorphism()`. For most purposes, `Equivalence::isomorphisms()` and `EquivalenceClass` are much faster and easier to use. The `isomorphism` can still be useful when considering non-triangulated surfaces. This functionality will be added to equivalences at a later point.
* Deprecated `Vertex::source(HalfEdge, FlatTriangulationCombinatorial&)` and `Vertex::target(HalfEdge, FlatTriangulationCombinatorial&)`. The parameter order everywhere else in flatsurf is such that the surface is passed first so prefer to use `Vertex::suorce(FlatTriangulationCombinatorial&, HalfEdge)` and `Vertex::target(FlatTriangulationCombinatorial&, HalfEdge)` instead.
**Removed:**
* Removed the static library from the conda package that we upload with every commit to the master branch to the flatsurf channel. To our knowledge nobody is using these builds. They can sometimes be useful for debugging because they are built with debug symbols (which is why they are very big.) Providing a static library that nobody should use anyway is using the limited storage on anaconda.org twice as fast so we disable this.
**Fixed:**
* Fixed compilation on some versions of clang.
* Fixed serialization with cereal 1.3.1+ in the same way we did for e-antic in https://github.com/flatsurf/e-antic/pull/242.
* Fixed some compiler warnings with recent versions of GCC/Clang.
v3.12.0
====================
**Added:**
* Added scalar multiplication of exact vectors with elements of underlying ring.
* Added `Vector::applyMatrix(a, b, c, d)` and `FlatTriangulation::applyMatrix(a, b, c, d)`.
* Added predicates `FlatTriangulation::inHalfPlane()` and `FlatTriangulation::inPlane()`.
* Added various flavours of `FlatTriangulation::sector()` to generalize saddle
connections factory functions that have been deprecated.
* Added `Point` for points on a flat triangulation.
* Added mapping of `Point` under a `Deformation`.
* Added `FlatTriangulation::angle` for `Point`.
* Added `FlatTriangulationCombinatorics::face(HalfEdge)` to get the other half edges of a face without having to manually call `previousInFace`/`nextInFace`.
**Deprecated:**
* Deprecated factory functions `SaddleConnection::inHalfPlane()`,
`SaddleConnection::inPlane()`, `SaddleConnection::alongVertical()`,
`SaddleConnection::clockwise()`, `SaddleConnection::counterclockwise()`. The
functionality is now essentially in `FlatTriangulation::sector()`.
**Fixed:**
* Fixed incorrect channels for binder setup.
* Fixed formatting of the flatsurf zenodo page in case somebody wants to cite flatsurf directly.
**Performance:**
* Improved performance of tests.
v3.11.3
====================
**Fixed:**
* Added support for fmt library version 9.
v3.11.2
====================
**Fixed:**
* Made operators `<=`, `>`, `>=`, `!=` of `Bound` visible to Python code.
* Prominently link to sage-flatsurf in the README, so people do not try to install libflatsurf to get "flatsurf".
v3.11.1
====================
**Performance:**
* Remove redundant expensive assertions when Delaunay triangulating.
v3.11.0
====================
**Added:**
* Added `IntervalExchangeTransformation::forget()` to drop the information about the underlying surface from an IET.
v3.10.1
====================
**Fixed:**
* Fixed creation of ASV benchmark pages with every push to the master branch. See https://flatsurf.github.io/flatsurf/asv/.
**Performance:**
* Improved performance of `ContourDecompsoition` constructor by removing
redundant assertion. In flow decompositions that are trivial to compute, this
assertion often dominated the overall runtime.
v3.10.0
====================
**Added:**
* Implemented `FlowDecomposition::vertical()` which had been declared in
`flow_decomposition.hpp` but was not implemented. (The return value of this
is now a `Vertical<Surface>`; same as `FlowComponent::vertical()`.)
* Added comparison of vectors in pyflatsurf and implementation of the zero() method
v3.9.4
====================
**Fixed:**
* Fixed elimination of marked points when marked points are collinear.
v3.9.3
====================
**Fixed:**
* Fixed compilation on 64-bit macOS systems.
v3.9.2
====================
**Added:**
* Implemented `Deformation::operator()(const SaddleConnection&)` when the underlying deformation comes from a shift.
v3.9.1
====================
**Fixed:**
* Updated dependency of conda package in flatsurf channel to depend on libeantic instead of e-antic (libeantic + pyeantic)
* Updated conda pins for packages in flatsurf channel.
**Performance:**
* Implemented shortcut equality check of surfaces when they are identical.
v3.9.0
====================
**Added:**
* Added `FlowDecomposition::operator==` to check whether two flow
decompositions are internally coming from identical objects.
**Fixed:**
* Made missing `FlowComponent::decomposition()` and
`FlowComponent::decomposition() const` implementations available in the
shared library.
v3.8.0
====================
**Added:**
* Added a copy constructor, a copy assignment operator, a move constructor, and
a move assignment operator for a `Deformation`.
* Implemented special handling of a `Tracked<Deformation>` so that it can track
flips in the tracked triangulation.
* Added glue to `flatsurf::Tracked` to pyflatsurf.
v3.7.0
====================
**Added:**
* Added `SaddleConnection::ccw()`.
* Added `SaddleConnectionsIterator::skip()` to explicitly backtrack in saddle connection search.
* Added `Path::tighten()`.
**Fixed:**
* Allow build with fmt library version 6, 7, or 8.
* Changed ordering produced by `flatsurf::detail::VectorExact<>::CompareSlope`
so it identifies infinite slopes, i.e., `(0, 1)` and `(0, -1)`.
* A `Path` can now contain arbitrary turns. Before it was limited to the turn angles that show up in the perimeters of components.
v3.6.4
====================
**Fixed:**
* Fix tracking of collapsed half edges in `FlatTriangulation::operator+()`.
v3.6.3
====================
**Fixed:**
* Work around a problem in cppyy when copying vectors in Python.
v3.6.2
====================
**Fixed:**
* Fixed stack overflow when eliminating marked points, #263.
* Adapt to changes in latest e-antic (changed includes in header files.)
* Adapt includes for latest version of boost.
v3.6.1
====================
v3.6.0
====================
**Added:**
* Added actual functionality to `Deformation` class. Before it was just a
placeholder except for completely trivial cases.
* More overloads of `SaddleConnection::inPlane` and `SaddleConnection::counterclockwise`.
* More convenience methods to `Path` such as `pop_front`, `pop_back`, and an
implicit constructor from `SaddleConnection`.
* A conversion operator `Tracked<T>::operator T&&()` to move out of a `Tracked<T>`.
* An operator ~ on combinatorial triangulations that "inverts" a triangulation,
i.e., it returns its mirror image. This is used, e.g., when applying a linear
transformation of negative determinant to a triangulation.
**Changed:**
* `SaddleConnection::counterclockwise` now does what the documentation claimed.
Before it actually implemented `SaddleConnection::inPlane`.
* Shortened printing of saddle connections when they coincide with a half edge,
i.e., "2" instead of "(x, y) from 2 to -2".
**Deprecated:**
* Copy constructor and copy assignment for `Tracked<T>`. Many `T` do not
support this and the registered callbacks might not support such copying so
it is better not to support this use case.
**Fixed:**
* Added missing implementation of `FlowConnection::boundary()`.
* Make `HalfEdgeMap` work for types that are not printable.
* Implemented `SaddleConnection::angle`. Technically, this is a breaking API
change since the return type changed. However, before this method was not
implemented at all so nobody could have relied on that.
* Added missing include in `flatsurf.hpp` to make `HalfEdgeIntersection` work in pyflatsurf interface.
v3.5.0
====================
**Added:**
* Added `SaddleConnection::path()` that returns a more detailed path of a
saddle connection than did `SaddleConnection::crossings()`. This can be used
to properly shade components of a flow decomposition when drawing them.
**Deprecated:**
* The method `SaddleConnection::crossings()` has been superseded by
`SaddleConnection::path()`.
v3.4.2
====================
**Fixed:**
* Fixed `SaddleConnection::crossings()` which had a bug that would skip some crossings sometimes.
v3.4.1
====================
**Fixed:**
* Treat search bound in saddle connection search correctly. Before the search was aborted as soon as two endpoints of an edge were outside the search radius.
v3.4.0
====================
**Added:**
* Add `FlowComponent::height()` and `FlowComponent::holonomy()`.
v3.3.0
====================
**Added:**
* `FlowComponent::bottom`, `FlowComponent::right`, `FlowComponent::top`, `FlowComponent::left` wrapping the corresponding methods of `intervalxt::Component`.
v3.2.0
====================
**Added:**
* `FlowComponent::dynamicalComponent()` to access the underlying Interval Exchange Transformation of a `FlowComponent`.
* `SaddleConnections.slopes()` and `SaddleConnectionsByLength.slopes()` to
ignore saddle connections with repeated slopes.
* `FlowDecomposition::decompose` and `FlowComponent::decompose` can now have a target set explicitly as a Python callback.
**Deprecated:**
* `FlowComponent::intervalExchangeTransformation()` as it does not do anything useful in most situations and rather exposes some implementation detail.
**Fixed:**
* Do not prune decomposition as soon as a component reached the induction limit
in a `FlowDecomposition::decompose()`. Such a pruning would only affect the
local subtree and not the entire decomposition. There is (and was) no way to
stop the entire decomposition once a limit has been reached.
v3.1.0
====================
**Added:**
* Checks and assertions can now be disabled at runtime by setting `LIBFLATSURF_NOCHECK` and `LIBFLATSURF_NOASSERT`.
**Performance:**
* Speed up assertions during flow decomposition.
v3.0.2
====================
**Fixed:**
* Added pyflatsurf dependency on cppyythonizations
v3.0.1
====================
**Fixed:**
* code coverage reports
* conda packages now use `gmpxxyy` which works with cppyy 1.9.0
* make `Surface(S)` work again for surfaces coming from sage-flatsurf (#207)
v3.0.0
====================
**Added:**
* build and deploy for Python 3.8 and Python 3.9 in CI
* `FlatTriangulation::delaunay(Edge)` which returns a classification to distinguish ambiguous from non-ambiguous edges.
**Changed:**
* use cppasv package to run C++ benchmarks in asv
* `FlatTriangulation::isomorphism` takes an extra parameter
`ISOMORPHISM::FACES` or `ISOMORPHISM::DELAUNAY_CELLS` to only ask for
isomorphisms of Delaunay cells, i.e., ignoring ambiguous edges that can be
flipped without changing the Delaunay condition.
* `Vertical::self` is now "managed movable". This is a breaking ABI change but not an API change.
* Printing of `EdgeMap`, `HalfEdgeMap`, and `OddHalfEdgeMap` is now consistent.
* Use GitHub Actions for CI which is easier to maintain than our conda-smithy approach.
* Replace slimsig with sigslot. The former is not maintained anymore and
valgrind was unhappy with it, though it might be us using it incorrectly, it
did not really seem like it.
**Deprecated:**
* `FlatTriangulation::delaunay(HalfEdge)` as the Delaunay condition is not
decided on the level of half edges but on the level of edges.
* `FlatTriangulation::isomorphism()` without the `ISOMORPHISM` parameter
because one should be specific about the kind of isomorphism.
**Removed:**
* Removed deprecated method `FlatTriangulation::delaunay(HalfEdge)`, use
`FlatTriangulation::delaunay(Edge)` instead.
* Removed deprecated method `FlatTriangulation::isomorphism(surface, predicate,
predicate)`, use `FlatTriangulation::isomorphism(surface, ISOMORPHISM::FACES,
predicate, predicate)` instead.
* Removed deprecated method
`IntervalExchangeTransformation::makeUniqueLargeEdge()`, use
`IntervalExchangeTransformation::makeUniqueLargeEdges` instead.
* Removed deprecated method `Vertical::horizontal()`, use
`-Vertical::vertical().perpendicular()` instead.
* Removed deprecated method `Vertical::perpendicular(vector)`, use
`Vertical::projectPerpendicular(vector)` instead.
* Removed deprecated method `Vertical::parallel(vector)`, use
`Vertical::project(vector)` instead.
* Removed deprecated method `Vertical::parallel(HalfEdge)`, use
`Vertical::ccw(HalfEdge) == CCW::COLLINEAR` instead.
* Removed depraceted method `Vertical::perpendicular(HalfEdge)`, use
`Vertical::orientation(HalfEdge) == ORIENTATION::ORTHOGONAL` instead.
**Fixed:**
* made benchmark CI more robust by not trying to push for pull requests (which might not produce a consistent history.)
* simplify conda builds by not including the license three times and require make which might not be present on the build system.
* add pins to environment.yml files to pull correct dependencies from conda
* suffix test binaries so that autotoools `include vector` does not try to include the `vector` bash runner
**Performance:**
* Most methods of `Vertical` that take an `Edge` or a `HalfEdge` are now
cached. This should speed up creating `ContourDecomposition` in many cases.
v2.3.0
====================
**Added:**
* several methods in `Vertical`, mostly replicating existing functionality but with more intuitive naming.
**Deprecated:**
* several methods in `Vertical`, namely some flavours of `parallel`, `perpendicular`, and `horizontal`.
**Performance:**
* speed up saddle connection assertions when collapsing half edges and during length computations
* perform assertions less frequently in `FlowDecomposition::decompose()`; these assertions made up one third of the runtime in many triangle instances.
* Perfom CCW and Orientation of e-antic vectors with inexact approximations first so we do not have to perform exact multiplications.
* with exact-real vectors, not actually performing that many exact scalar
multiplication in `Vertical` might make a difference in some instances.
v2.2.3
====================
**Changed:**
* add assertions that Arb approximations of finite numbers are always finite; there should not be any issues regarding this but we had some infinities show up in the sampling connections code and this is an extremely cheap check it seems.
**Fixed:**
* completely override iteration logic in sampling iterator starting from length 0 connections (improves memory consumption when sampling.)
v2.2.2
====================
**Fixed:**
* made sector selection in SaddleConnectionsSample more stable in very thin sectors
v2.2.1
====================
**Fixed:**
* speed up many vector operations in particular those involving exact-real elements.
* enabled codecov reporting on pull requests
**Performance:**
* sampling saddle connections should be much faster now since we are giving
preference to large search sectors when selecting the random sector to
continue the search in.
v2.2.0
====================
**Added:**
* implemented `FlatTriangulation::isomorphism` to detect isomorphisms of
triangulated translation surfaces.
v2.1.1
====================
**Fixed:**
* category collection in changelog
* added sample headers to `flatsurf.hpp` so they can be used without explicit `cppyy.include` from pyflatsurf
* do not report trivial connection coming from a half edge in `SaddleConnectionsSample`
v2.1.0
====================
**Added:**
* operator bool for Bound to check whether a Bound is non-zero
**Performance:**
* improved vector operations with trivial bounds
* `SaddleConnectionsSample` to iterate through saddle connections randomly
**Changed:**
* `SaddleConnections` can now be iterated indefinitely without giving a bound.
* `SaddleConnections` and `SaddleConnectionsByLength` now support a `lowerBound`.
**Fixed:**
* fixed operator bool of `Vector<Arb>`
v2.0.1
====================
**Fixed:**
* Require a `libintervalxt` without known memory leaks
* Explicitly clean up FLINT during test runs so we can find memory leaks with gperftools strict/draconian settings.
v2.0.0
====================
**Changed:**
* Removed `std::unique_ptr` and `std::shared_ptr` from the public API. This is
a breaking change that has changed large parts of the interface, see #214.
* `FlatTriangulation::fromEdge` is now called `fromHalfEdge`.
* `FlatTriangulation::slot` is now called `slit`.
* `FlatTriangulationCombinatorial::slot` is now called `slit`.
* `FlatTriangulation::fromEdgeApproximation` is now called `fromHalfEdgeApproximate`.
* `FlatTriangulationCollapsed::fromEdge` is now called `fromHalfEdge`.
* The serialization format (which we do not consider part of the stable API.)
* Moved Delaunay triangulation code into `FlatTriangulation` as a pair of
`delaunay()` method.
* methods that modify a `FlatTriangulation` now return a `Deformation`.
Currently that `Deformation` only wraps a `FlatTriangulation` but eventually
we'd like to add information on how say vertices in the deformed surface
relate to vertices in the original surface and such.
**Removed:**
* Some workarounds for bugs in cppyy. These are not necessary with the latest
cppyy 1.8.3 anymore.
**Fixed:**
* Fixed printing of some objects from Python.
* Implemented missing methods in `SaddleConnectionsByLength`.
* Removed some internal hacks such as the `Lengths::register` hack that was
used to get weak pointers right.
* Simplified `noexcept` qualifications on all methods in the public API
v1.2.0
====================
**Added:**
* `FlatTriangulation::removeMarkedPoints` which will hopefully speed up GL2R Orbit Closure computations
**Fixed:**
* several `FlowConnection` methods are much faster now. This speeds up `FlowComponent::triangulation` substantially.
v1.1.3
====================
**Fixed:**
* worked around a segfault during iteration of saddle connections by length from the Python interface due to https://bitbucket.org/wlav/cppyy/issues/271/next-implementation-does-not-respect
* segfault when iterating saddle connections by length from Python (a header was missing in cppyy.hpp)
* colinearity check in FlowDecomposition::parabolic
v1.1.2
====================
**Added:**
* convenience methods `decompose`, `cylinders`, `minimalComponents`, `undeterminedComponents` to `FlowDecomposition` Python object
**Changed:**
* printing of `FlowDecomposition` which now shows how the decomposition decomposes into cylinders, minimal, and undetermined components
* [gmpxxll](https://github.com/flatsurf/gmpxxll) is now required at build time for the integer interface of intervalxt
**Fixed:**
* `algebraic_ring` consistently returns a SageMath ring
* Adapted to changes in cppyythonizations 1.0.0
* `Lengths` for `mpz` and `mpq` which were broken because we returned a reference to a temporary in one place
v1.1.1
====================
**Fixed:**
* compilation with some versions of gcc (missing include)
* a performance problem in `makeUniqueLargeEdges` which showed up at times in unfoldings of polygons with exact-real coefficients
v1.1.0
====================
**Added:**
* Serialization for most basic types, i.e., everything but the FlowDecomposition types
**Fixed:**
* Chain::operator==
v1.0.3
====================
**Added:**
* a DOI badge to the README for citations
**Fixed:**
* some compiler warnings with very recent GCCs
v1.0.2
====================
**Added:**
* DOIs are now generated by [zenodo](https://zenodo.org)
v1.0.1
====================
**Added:**
* safety checks for rever deploy script
**Fixed:**
* configure now allows version 6 and 7 of fmt since we do not use any version specific features
v1.0.0
====================
**Changed:**
* release with rever