contrek 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -1
  3. data/Gemfile.lock +1 -1
  4. data/PERFORMANCE.md +177 -0
  5. data/README.md +22 -3
  6. data/Rakefile +1 -1
  7. data/contrek.gemspec +5 -1
  8. data/ext/cpp_polygon_finder/PolygonFinder/CMakeLists.txt +10 -12
  9. data/ext/cpp_polygon_finder/PolygonFinder/src/Tests.cpp +1 -1
  10. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/Node.cpp +2 -0
  11. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/Node.h +36 -2
  12. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/NodeCluster.cpp +4 -4
  13. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Cluster.cpp +33 -42
  14. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Cluster.h +2 -1
  15. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Cursor.cpp +33 -5
  16. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Cursor.h +3 -2
  17. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Hub.cpp +2 -2
  18. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Hub.h +1 -5
  19. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/InnerPolyline.cpp +1 -2
  20. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/InnerPolyline.h +1 -3
  21. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Polyline.cpp +16 -20
  22. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Polyline.h +8 -3
  23. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Shape.cpp +5 -0
  24. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Shape.h +3 -1
  25. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/ShapePool.cpp +2 -2
  26. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/ShapePool.h +1 -1
  27. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Tile.cpp +5 -3
  28. data/ext/cpp_polygon_finder/PolygonFinder/src/polygon/finder/concurrent/Tile.h +4 -4
  29. data/ext/cpp_polygon_finder/cpp_polygon_finder.cpp +9 -0
  30. data/lib/contrek/finder/concurrent/cluster.rb +30 -29
  31. data/lib/contrek/finder/concurrent/cursor.rb +35 -12
  32. data/lib/contrek/finder/concurrent/hub.rb +1 -1
  33. data/lib/contrek/finder/concurrent/inner_polyline.rb +2 -3
  34. data/lib/contrek/finder/concurrent/polyline.rb +5 -7
  35. data/lib/contrek/finder/concurrent/shape.rb +7 -3
  36. data/lib/contrek/finder/concurrent/tile.rb +5 -4
  37. data/lib/contrek/version.rb +1 -1
  38. metadata +3 -6
  39. data/ext/cpp_polygon_finder/PolygonFinder/examples/example.cpp +0 -50
  40. data/ext/cpp_polygon_finder/PolygonFinder/images/graphs_1024x1024.png +0 -0
  41. data/ext/cpp_polygon_finder/PolygonFinder/images/labyrinth.png +0 -0
  42. data/ext/cpp_polygon_finder/PolygonFinder/images/sample_10240x10240.png +0 -0
@@ -1,12 +1,11 @@
1
1
  module Contrek
2
2
  module Concurrent
3
3
  class InnerPolyline
4
- attr_reader :sequence, :recombined
4
+ attr_reader :sequence
5
5
 
6
- def initialize(shape: nil, raw_coordinates: [], sequence: nil, recombined: false)
6
+ def initialize(shape: nil, raw_coordinates: [], sequence: nil)
7
7
  @raw = raw_coordinates if raw_coordinates
8
8
  @sequence = sequence if sequence
9
- @recombined = recombined
10
9
  @shape = shape
11
10
  end
12
11
 
@@ -6,15 +6,17 @@ module Contrek
6
6
  TRACKED_OUTER = 1 << 0
7
7
 
8
8
  attr_reader :raw, :name, :min_y, :max_y
9
- attr_accessor :shape, :tile, :any_ancients
9
+ attr_accessor :shape, :tile, :any_ancients, :inside_inner_polyline
10
10
 
11
- def initialize(tile:, polygon:, shape: nil, bounds: nil)
11
+ def initialize(tile:, polygon:, shape: nil, bounds: nil, force_named: nil)
12
12
  @tile = tile
13
13
  @name = tile.shapes.count
14
+ @named = force_named
14
15
  @raw = polygon
15
16
  @shape = shape
16
17
  @flags = 0
17
18
  @any_ancients = false
19
+ @inside_inner_polyline = nil
18
20
 
19
21
  if bounds.nil?
20
22
  find_boundary
@@ -31,17 +33,13 @@ module Contrek
31
33
  end
32
34
 
33
35
  def named
34
- "[b#{@tile.name} S#{@name} #{"B" if boundary?}]"
36
+ @named || "t#{@tile.name}s#{@name}#{"B" if boundary?}"
35
37
  end
36
38
 
37
39
  def numpy_raw
38
40
  raw.flat_map { |p| [p[:x], p[:y]] }
39
41
  end
40
42
 
41
- def info
42
- "w#{@tile.name} S#{@name}"
43
- end
44
-
45
43
  def turn_on(flag)
46
44
  @flags |= flag
47
45
  end
@@ -1,8 +1,8 @@
1
1
  module Contrek
2
2
  module Concurrent
3
3
  class Shape
4
- attr_accessor :outer_polyline, :inner_polylines, :merged_to_shape, :parent_inner_polyline,
5
- :reassociation_skip
4
+ attr_accessor :outer_polyline, :inner_polylines, :merged_to_shape,
5
+ :parent_inner_polyline, :fixed
6
6
  attr_reader :parent_shape, :children_shapes
7
7
 
8
8
  def initialize
@@ -10,7 +10,7 @@ module Contrek
10
10
  @merged_to_shape = nil
11
11
  @parent_inner_polyline = nil
12
12
  @children_shapes = []
13
- @reassociation_skip = false
13
+ @fixed = false
14
14
  end
15
15
 
16
16
  def self.init_by(set_outer_polyline, set_inner_polylines)
@@ -24,6 +24,10 @@ module Contrek
24
24
  @inner_polylines.clear
25
25
  end
26
26
 
27
+ def name
28
+ outer_polyline.named
29
+ end
30
+
27
31
  def set_parent_shape(shape)
28
32
  @parent_shape&.children_shapes&.delete(self)
29
33
  @parent_shape = shape
@@ -61,15 +61,15 @@ module Contrek
61
61
  end
62
62
 
63
63
  def compute_treemap
64
- @shapes_map = {}
64
+ shapes_map = {}
65
65
  shape_index = 0
66
66
 
67
- @shapes.map do |shape|
67
+ shapes.map do |shape|
68
68
  next if shape.outer_polyline.empty?
69
- @shapes_map[shape] = shape_index
69
+ shapes_map[shape] = shape_index
70
70
  shape_index += 1
71
71
  if shape.parent_shape
72
- [@shapes_map[shape.parent_shape], shape.parent_shape.inner_polylines.index(shape.parent_inner_polyline)]
72
+ [shapes_map[shape.parent_shape], shape.parent_shape.inner_polylines.index(shape.parent_inner_polyline)]
73
73
  else
74
74
  [-1, -1]
75
75
  end
@@ -104,6 +104,7 @@ module Contrek
104
104
  if treemap_entry != [-1, -1]
105
105
  parent = shapes_map[treemap_entry.first]
106
106
  shape.set_parent_shape(parent)
107
+ shape.fixed = true
107
108
  shape.parent_inner_polyline = parent.inner_polylines[treemap_entry.last]
108
109
  end
109
110
  end
@@ -1,3 +1,3 @@
1
1
  module Contrek
2
- VERSION = "1.2.0"
2
+ VERSION = "1.2.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contrek
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emanuele Cesaroni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-05-02 00:00:00.000000000 Z
11
+ date: 2026-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -136,6 +136,7 @@ files:
136
136
  - Gemfile
137
137
  - Gemfile.lock
138
138
  - LICENSE.md
139
+ - PERFORMANCE.md
139
140
  - README.md
140
141
  - Rakefile
141
142
  - contrek.gemspec
@@ -143,10 +144,6 @@ files:
143
144
  - ext/cpp_polygon_finder/PolygonFinder/CMakeLists.txt
144
145
  - ext/cpp_polygon_finder/PolygonFinder/LICENSE_AGPL.txt
145
146
  - ext/cpp_polygon_finder/PolygonFinder/clean.sh
146
- - ext/cpp_polygon_finder/PolygonFinder/examples/example.cpp
147
- - ext/cpp_polygon_finder/PolygonFinder/images/graphs_1024x1024.png
148
- - ext/cpp_polygon_finder/PolygonFinder/images/labyrinth.png
149
- - ext/cpp_polygon_finder/PolygonFinder/images/sample_10240x10240.png
150
147
  - ext/cpp_polygon_finder/PolygonFinder/src/ContrekApi.h
151
148
  - ext/cpp_polygon_finder/PolygonFinder/src/Tests.cpp
152
149
  - ext/cpp_polygon_finder/PolygonFinder/src/Tests.h
@@ -1,50 +0,0 @@
1
- /*
2
- * example.cpp
3
- *
4
- * Copyright (c) 2025-2026 Emanuele Cesaroni
5
- *
6
- * Licensed under the GNU Affero General Public License v3 (AGPLv3).
7
- * See the LICENSE file in this directory for the full license text.
8
- */
9
-
10
- #include <iostream>
11
- #include "ContrekApi.h"
12
- #include "Tests.h"
13
-
14
- void run_test() {
15
- CpuTimer cpu_timer;
16
- Tests test_suite;
17
- cpu_timer.start();
18
-
19
- // test_suite.test_a();
20
- // test_suite.test_b();
21
- // test_suite.test_c();
22
- // test_suite.test_d();
23
- // test_suite.test_e();
24
- // test_suite.test_f();
25
- // test_suite.test_g();
26
- // test_suite.test_h();
27
- // test_suite.test_i();
28
- std::cout << "compute time =" << cpu_timer.stop() << std::endl;
29
- }
30
-
31
- int main() {
32
- Contrek::Config cfg;
33
- cfg.threads = 4;
34
- cfg.tiles = 4;
35
- cfg.compress_unique = true;
36
- // cfg.treemap = true;
37
- // cfg.connectivity_mode = Contrek::Connectivity::OMNIDIRECTIONAL;
38
-
39
- CpuTimer cpu_timer;
40
- cpu_timer.start();
41
- std::cout << "--- Start Native Benchmark ---" << std::endl;
42
- // auto result = Contrek::trace("../images/graphs_1024x1024.png", cfg);
43
- auto result = Contrek::trace("../images/sample_10240x10240.png", cfg);
44
- result->print_info();
45
- std::cout << "Found polygons: " << result->groups << std::endl;
46
- std::cout << "Time: " << cpu_timer.stop() << " ms" << std::endl;
47
-
48
- // run_test();
49
- return 0;
50
- }