Class: GitFit::ElevationCLI
- Inherits:
-
Thor
- Object
- Thor
- GitFit::ElevationCLI
- Defined in:
- lib/git_fit/cli/elevation.rb
Instance Method Summary collapse
- #backfill(source = nil) ⇒ Object
- #correct(source = nil) ⇒ Object
- #infer(gain_per_km, range_per_km, seg_density) ⇒ Object
- #model_info ⇒ Object
- #train ⇒ Object
Instance Method Details
#backfill(source = nil) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/git_fit/cli/elevation.rb', line 16 def backfill(source = nil) config = git_fit_config conn = GitFit::DB::Connection.new(config.db_path) conn.migrate! db = conn.db result = GitFit::Elevation::Backfill.new(db, force: [:force]).call(source) msg = "Elevation backfill: #{result[:updated]} updated, " \ "#{result[:skipped]} skipped, #{result[:failed]} failed" say_status :done, msg, :green rescue StandardError => e say_status :error, "Elevation backfill failed: #{e.}", :red end |
#correct(source = nil) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/git_fit/cli/elevation.rb', line 36 def correct(source = nil) config = git_fit_config conn = GitFit::DB::Connection.new(config.db_path) conn.migrate! db = conn.db result = GitFit::Elevation::Correct.new( db, force: [:force], dry_run: [:'dry-run'], dem: [:dem], ).call(source) msg = "Elevation correct: #{result[:updated]} updated, " \ "#{result[:skipped]} skipped, #{result[:failed]} failed, " \ "#{result[:no_model]} no_model" say_status :done, msg, :green rescue StandardError => e say_status :error, "Elevation correct failed: #{e.}", :red end |
#infer(gain_per_km, range_per_km, seg_density) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/git_fit/cli/elevation.rb', line 81 def infer(gain_per_km, range_per_km, seg_density) g = gain_per_km.to_f r = range_per_km.to_f s = seg_density.to_f m = GitFit::Elevation::TerrainCoeff.terrain_m( gain_per_km: g, range_per_km: r, seg_density: s, ) h = GitFit::Elevation::TerrainCoeff.hysteresis_threshold(m) spacing = GitFit::Elevation::TerrainCoeff.dem_spacing( gain_per_km: g, range_per_km: r, seg_density: s, ) say "terrain_M: #{format('%.3f', m)}" say "h_threshold: #{format('%.1f', h)}" say "dem_spacing: #{spacing}m" rescue StandardError => e say_status :error, "Inference failed: #{e.}", :red exit 1 end |
#model_info ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/git_fit/cli/elevation.rb', line 107 def model_info model = GitFit::Elevation::TerrainCoeff.model path = GitFit::Elevation::TerrainCoeff.model_path say "Model path: #{path}" say "n_samples: #{model['meta']['n_samples']}" say "trained_at: #{model['meta']['trained_at']}" say "sources: #{model['meta']['sources'].join(', ')}" say "ridge_h: #{model['ridge_h'].map { |w| format('%.4f', w) }.join(', ')}" say "norms: #{model['norms'].map { |n| format('%.4f', n) }.join(', ')}" say "pav_h entries: #{model['pav_h'].size}" say "lookup entries: #{model['lookup'].size}" rescue StandardError => e say_status :error, "Failed to load model: #{e.}", :red exit 1 end |
#train ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/git_fit/cli/elevation.rb', line 60 def train sources = [:sources]&.split(',')&.map(&:strip) output = [:output] say_status :info, 'Starting model training...', :green runner = GitFit::Elevation::Train::Runner.new(sources: sources, output: output) success = runner.run if success say_status :done, 'Training complete', :green else say_status :error, 'Training failed', :red exit 1 end rescue StandardError => e say_status :error, "Training failed: #{e.}", :red say_status :error, e.backtrace.first(5).join("\n"), :red exit 1 end |