terraingenpy 0.2.0.dev90__tar.gz → 0.2.0.dev111__tar.gz

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 (1925) hide show
  1. terraingenpy-0.2.0.dev111/.pre-commit-config.yaml +66 -0
  2. terraingenpy-0.2.0.dev111/CHANGELOG.md +356 -0
  3. terraingenpy-0.2.0.dev111/CMakeLists.txt +144 -0
  4. terraingenpy-0.2.0.dev111/CONTRIBUTING.md +47 -0
  5. terraingenpy-0.2.0.dev111/PKG-INFO +226 -0
  6. terraingenpy-0.2.0.dev111/README.md +170 -0
  7. terraingenpy-0.2.0.dev111/app/CMakeLists.txt +22 -0
  8. terraingenpy-0.2.0.dev111/app/cli.cpp +340 -0
  9. terraingenpy-0.2.0.dev111/app/cli.h +52 -0
  10. terraingenpy-0.2.0.dev111/app/main.cpp +12 -0
  11. terraingenpy-0.2.0.dev111/cmake/TerrainGenSlang.cmake +132 -0
  12. terraingenpy-0.2.0.dev111/cmake/TerrainGenTesting.cmake +21 -0
  13. terraingenpy-0.2.0.dev111/docs/_src/citing.md +7 -0
  14. terraingenpy-0.2.0.dev111/docs/_src/concepts/customization.md +1 -0
  15. terraingenpy-0.2.0.dev111/docs/_src/getting-started/installation.md +71 -0
  16. terraingenpy-0.2.0.dev111/docs/_src/getting-started/quickstart.md +161 -0
  17. terraingenpy-0.2.0.dev111/docs/_src/guides/index.md +12 -0
  18. terraingenpy-0.2.0.dev111/docs/_src/guides/tools/command-line.md +30 -0
  19. terraingenpy-0.2.0.dev111/docs/_src/guides/tools/index.md +6 -0
  20. terraingenpy-0.2.0.dev111/docs/_src/guides/workflows/customize-terraingen.md +332 -0
  21. terraingenpy-0.2.0.dev111/docs/_src/guides/workflows/index.md +5 -0
  22. terraingenpy-0.2.0.dev111/docs/_src/images/gallery/craters/centimeter_population.jpg +0 -0
  23. terraingenpy-0.2.0.dev111/docs/_src/images/gallery/craters/replacement_on_dem.jpg +0 -0
  24. terraingenpy-0.2.0.dev111/docs/_src/images/gallery/craters/replacement_profiles.jpg +0 -0
  25. terraingenpy-0.2.0.dev111/docs/_src/images/gallery/planets/itokawa.jpg +0 -0
  26. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/_quickstart/add-albedo.jpg +0 -0
  27. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/_quickstart/add-boulders.jpg +0 -0
  28. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/_quickstart/add-craters.jpg +0 -0
  29. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/_quickstart/add-noise.jpg +0 -0
  30. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/_quickstart/run-a-config.jpg +0 -0
  31. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/add-noise-to-a-synthetic-albedo.jpg +0 -0
  32. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/add-reflectance-zones-around-a-new-crater.jpg +0 -0
  33. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/brighten-a-lander-blast-zone.jpg +0 -0
  34. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/brighten-steep-slopes.jpg +0 -0
  35. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/brighten-the-albedo-with-rocks.jpg +0 -0
  36. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/evaluate-a-configured-albedo.jpg +0 -0
  37. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/fade-crater-rays-with-age.jpg +0 -0
  38. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/mix-hapke-photometry-from-materials.jpg +0 -0
  39. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/scatter-dark-and-bright-splotches.jpg +0 -0
  40. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/albedo/upscale-an-albedo-map.jpg +0 -0
  41. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/bodies/add-terrain-over-a-whole-body.jpg +0 -0
  42. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/bodies/upsample-a-shape-model.jpg +0 -0
  43. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/break-boulders-as-they-wear.jpg +0 -0
  44. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/choose-boulder-sizes.jpg +0 -0
  45. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/design-a-boulder-style.jpg +0 -0
  46. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/draw-boulders-as-relief-or-models.jpg +0 -0
  47. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/gather-boulders-in-patches-and-clusters.jpg +0 -0
  48. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/generate-a-boulder-shape.jpg +0 -0
  49. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/list-boulders-from-a-config.jpg +0 -0
  50. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/list-boulders-of-a-layer.jpg +0 -0
  51. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/place-boulders-by-hand.jpg +0 -0
  52. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/pose-boulders.jpg +0 -0
  53. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/split-a-boulder-shape-into-pieces.jpg +0 -0
  54. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/throw-blocks-around-craters.jpg +0 -0
  55. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/weather-boulders-with-fillets-and-ventifacts.jpg +0 -0
  56. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/boulders/write-boulder-models.jpg +0 -0
  57. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/add-craters-to-a-terrain.jpg +0 -0
  58. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/choose-a-crater-profile.jpg +0 -0
  59. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/degrade-craters-with-age.jpg +0 -0
  60. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/list-craters-from-a-config.jpg +0 -0
  61. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/list-craters-of-a-layer.jpg +0 -0
  62. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/place-craters-by-hand.jpg +0 -0
  63. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/raise-central-peaks.jpg +0 -0
  64. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/replace-a-blurred-crater.jpg +0 -0
  65. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/restamp-craters-from-a-coarser-run.jpg +0 -0
  66. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/roughen-and-stretch-crater-rims.jpg +0 -0
  67. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/skip-craters-a-dem-resolves.jpg +0 -0
  68. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/space-craters-apart.jpg +0 -0
  69. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/terrace-crater-walls.jpg +0 -0
  70. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/throw-secondary-craters-in-rays.jpg +0 -0
  71. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/use-published-crater-models.jpg +0 -0
  72. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/craters/vary-crater-density-with-a-map.jpg +0 -0
  73. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/stack-noise-fractals.jpg +0 -0
  74. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/use-rock-meshes-for-boulders.jpg +0 -0
  75. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-a-crater-age-model.jpg +0 -0
  76. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-a-crater-profile.jpg +0 -0
  77. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-a-degradation-model.jpg +0 -0
  78. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-a-layer.jpg +0 -0
  79. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-a-size-distribution.jpg +0 -0
  80. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-a-source.jpg +0 -0
  81. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-a-surface-field.jpg +0 -0
  82. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-an-albedo-layer.jpg +0 -0
  83. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-an-albedo-source.jpg +0 -0
  84. terraingenpy-0.2.0.dev111/docs/_src/images/snippets/customization/write-an-upsampler.jpg +0 -0
  85. terraingenpy-0.2.0.dev111/docs/_src/index.md +47 -0
  86. terraingenpy-0.2.0.dev111/docs/gallery/albedo/blast_zones.py +46 -0
  87. terraingenpy-0.2.0.dev111/docs/gallery/albedo/crater_rays.py +61 -0
  88. terraingenpy-0.2.0.dev111/docs/gallery/albedo/oblique_impacts.py +50 -0
  89. terraingenpy-0.2.0.dev111/docs/gallery/albedo/reflectance_zones.py +50 -0
  90. terraingenpy-0.2.0.dev111/docs/gallery/albedo/rocks.py +49 -0
  91. terraingenpy-0.2.0.dev111/docs/gallery/albedo/slopes.py +41 -0
  92. terraingenpy-0.2.0.dev111/docs/gallery/albedo/splotches.py +38 -0
  93. terraingenpy-0.2.0.dev111/docs/gallery/albedo/synthetic_base.py +57 -0
  94. terraingenpy-0.2.0.dev111/docs/gallery/assets.py +117 -0
  95. terraingenpy-0.2.0.dev111/docs/gallery/boulders/clustering.py +43 -0
  96. terraingenpy-0.2.0.dev111/docs/gallery/boulders/crater_ejecta_aging.py +71 -0
  97. terraingenpy-0.2.0.dev111/docs/gallery/boulders/crater_ejecta_coverage.py +63 -0
  98. terraingenpy-0.2.0.dev111/docs/gallery/boulders/crater_ejecta_decay.py +66 -0
  99. terraingenpy-0.2.0.dev111/docs/gallery/boulders/crater_ejecta_floor.py +65 -0
  100. terraingenpy-0.2.0.dev111/docs/gallery/boulders/crater_ejecta_profiles.py +59 -0
  101. terraingenpy-0.2.0.dev111/docs/gallery/boulders/crater_ejecta_reach.py +64 -0
  102. terraingenpy-0.2.0.dev111/docs/gallery/boulders/crater_ejecta_regolith.py +52 -0
  103. terraingenpy-0.2.0.dev111/docs/gallery/boulders/density_map.py +73 -0
  104. terraingenpy-0.2.0.dev111/docs/gallery/boulders/fillets.py +79 -0
  105. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_axes.py +32 -0
  106. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_fractures.py +37 -0
  107. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_fragments.py +57 -0
  108. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_noise.py +38 -0
  109. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_rounding.py +30 -0
  110. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_settle.py +63 -0
  111. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_solids.py +38 -0
  112. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_styles.py +31 -0
  113. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_variety.py +28 -0
  114. terraingenpy-0.2.0.dev111/docs/gallery/boulders/models_weathering.py +44 -0
  115. terraingenpy-0.2.0.dev111/docs/gallery/boulders/patches.py +38 -0
  116. terraingenpy-0.2.0.dev111/docs/gallery/boulders/pose_burial.py +57 -0
  117. terraingenpy-0.2.0.dev111/docs/gallery/boulders/pose_burial_by_wear.py +52 -0
  118. terraingenpy-0.2.0.dev111/docs/gallery/boulders/pose_height_ratio.py +57 -0
  119. terraingenpy-0.2.0.dev111/docs/gallery/boulders/size_distributions.py +69 -0
  120. terraingenpy-0.2.0.dev111/docs/gallery/boulders/slope_map.py +70 -0
  121. terraingenpy-0.2.0.dev111/docs/gallery/boulders/slopes.py +71 -0
  122. terraingenpy-0.2.0.dev111/docs/gallery/craters/ages.py +75 -0
  123. terraingenpy-0.2.0.dev111/docs/gallery/craters/aristarchus.py +80 -0
  124. terraingenpy-0.2.0.dev111/docs/gallery/craters/blend_shapes.py +60 -0
  125. terraingenpy-0.2.0.dev111/docs/gallery/craters/catalog_completeness.py +73 -0
  126. terraingenpy-0.2.0.dev111/docs/gallery/craters/centimeter_population.py +99 -0
  127. terraingenpy-0.2.0.dev111/docs/gallery/craters/complex_craters.py +56 -0
  128. terraingenpy-0.2.0.dev111/docs/gallery/craters/complex_profiles.py +78 -0
  129. terraingenpy-0.2.0.dev111/docs/gallery/craters/copernicus.py +80 -0
  130. terraingenpy-0.2.0.dev111/docs/gallery/craters/datum.py +57 -0
  131. terraingenpy-0.2.0.dev111/docs/gallery/craters/datum_profiles.py +61 -0
  132. terraingenpy-0.2.0.dev111/docs/gallery/craters/default_field.py +28 -0
  133. terraingenpy-0.2.0.dev111/docs/gallery/craters/degradation_by_age.py +44 -0
  134. terraingenpy-0.2.0.dev111/docs/gallery/craters/degradation_by_diffusion.py +54 -0
  135. terraingenpy-0.2.0.dev111/docs/gallery/craters/degradation_by_freshness.py +52 -0
  136. terraingenpy-0.2.0.dev111/docs/gallery/craters/density_map.py +77 -0
  137. terraingenpy-0.2.0.dev111/docs/gallery/craters/density_map_areal_fraction.py +87 -0
  138. terraingenpy-0.2.0.dev111/docs/gallery/craters/density_map_count.py +84 -0
  139. terraingenpy-0.2.0.dev111/docs/gallery/craters/density_map_scale.py +75 -0
  140. terraingenpy-0.2.0.dev111/docs/gallery/craters/depth_ratio.py +72 -0
  141. terraingenpy-0.2.0.dev111/docs/gallery/craters/elongation.py +52 -0
  142. terraingenpy-0.2.0.dev111/docs/gallery/craters/elongation_and_roughness.py +57 -0
  143. terraingenpy-0.2.0.dev111/docs/gallery/craters/freshness_vs_diffusion.py +46 -0
  144. terraingenpy-0.2.0.dev111/docs/gallery/craters/freshness_vs_diffusion_maps.py +65 -0
  145. terraingenpy-0.2.0.dev111/docs/gallery/craters/interior_replacement.py +45 -0
  146. terraingenpy-0.2.0.dev111/docs/gallery/craters/irregularity.py +48 -0
  147. terraingenpy-0.2.0.dev111/docs/gallery/craters/irregularity_harmonics.py +80 -0
  148. terraingenpy-0.2.0.dev111/docs/gallery/craters/irregularity_models.py +81 -0
  149. terraingenpy-0.2.0.dev111/docs/gallery/craters/irregularity_spectral_slope.py +76 -0
  150. terraingenpy-0.2.0.dev111/docs/gallery/craters/manual_depth.py +64 -0
  151. terraingenpy-0.2.0.dev111/docs/gallery/craters/max_craters.py +50 -0
  152. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks.py +80 -0
  153. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks_elongation.py +85 -0
  154. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks_massifs.py +85 -0
  155. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks_roughness.py +86 -0
  156. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks_seeds.py +81 -0
  157. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks_sharpness.py +85 -0
  158. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks_size.py +86 -0
  159. terraingenpy-0.2.0.dev111/docs/gallery/craters/peaks_spread.py +86 -0
  160. terraingenpy-0.2.0.dev111/docs/gallery/craters/populations.py +105 -0
  161. terraingenpy-0.2.0.dev111/docs/gallery/craters/profiles.py +73 -0
  162. terraingenpy-0.2.0.dev111/docs/gallery/craters/radial_marks.py +54 -0
  163. terraingenpy-0.2.0.dev111/docs/gallery/craters/replacement_on_dem.py +75 -0
  164. terraingenpy-0.2.0.dev111/docs/gallery/craters/replacement_profiles.py +59 -0
  165. terraingenpy-0.2.0.dev111/docs/gallery/craters/resolution_fade.py +43 -0
  166. terraingenpy-0.2.0.dev111/docs/gallery/craters/rim_models.py +58 -0
  167. terraingenpy-0.2.0.dev111/docs/gallery/craters/rim_smoothing.py +63 -0
  168. terraingenpy-0.2.0.dev111/docs/gallery/craters/secondaries.py +83 -0
  169. terraingenpy-0.2.0.dev111/docs/gallery/craters/secondary_shapes.py +44 -0
  170. terraingenpy-0.2.0.dev111/docs/gallery/craters/slope_floor_offset.py +62 -0
  171. terraingenpy-0.2.0.dev111/docs/gallery/craters/slope_hillside.py +57 -0
  172. terraingenpy-0.2.0.dev111/docs/gallery/craters/slope_response.py +61 -0
  173. terraingenpy-0.2.0.dev111/docs/gallery/craters/slope_upslope_rim.py +62 -0
  174. terraingenpy-0.2.0.dev111/docs/gallery/craters/slope_wear.py +72 -0
  175. terraingenpy-0.2.0.dev111/docs/gallery/craters/source_resolved.py +63 -0
  176. terraingenpy-0.2.0.dev111/docs/gallery/craters/spacing_both.py +45 -0
  177. terraingenpy-0.2.0.dev111/docs/gallery/craters/spacing_ratio.py +45 -0
  178. terraingenpy-0.2.0.dev111/docs/gallery/craters/spacing_separation.py +39 -0
  179. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces.py +81 -0
  180. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_arcs.py +85 -0
  181. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_bench_slope.py +84 -0
  182. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_benches.py +84 -0
  183. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_blocks.py +85 -0
  184. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_freshness.py +83 -0
  185. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_gaps.py +84 -0
  186. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_onset.py +91 -0
  187. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_rim_variation.py +84 -0
  188. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_scarps.py +84 -0
  189. terraingenpy-0.2.0.dev111/docs/gallery/craters/terraces_seeds.py +83 -0
  190. terraingenpy-0.2.0.dev111/docs/gallery/craters/texture_ejecta.py +48 -0
  191. terraingenpy-0.2.0.dev111/docs/gallery/craters/texture_gullies.py +47 -0
  192. terraingenpy-0.2.0.dev111/docs/gallery/craters/texture_mantling.py +50 -0
  193. terraingenpy-0.2.0.dev111/docs/gallery/craters/texture_noise.py +47 -0
  194. terraingenpy-0.2.0.dev111/docs/gallery/craters/texture_rim_noise.py +47 -0
  195. terraingenpy-0.2.0.dev111/docs/gallery/craters/theophilus.py +89 -0
  196. terraingenpy-0.2.0.dev111/docs/gallery/craters/tycho.py +84 -0
  197. terraingenpy-0.2.0.dev111/docs/gallery/dem/craters_added.py +83 -0
  198. terraingenpy-0.2.0.dev111/docs/gallery/dem/globe.py +70 -0
  199. terraingenpy-0.2.0.dev111/docs/gallery/dem/noise_added.py +114 -0
  200. terraingenpy-0.2.0.dev111/docs/gallery/dem/upsampling.py +97 -0
  201. terraingenpy-0.2.0.dev111/docs/gallery/distributions/chronology.py +52 -0
  202. terraingenpy-0.2.0.dev111/docs/gallery/distributions/combining.py +70 -0
  203. terraingenpy-0.2.0.dev111/docs/gallery/distributions/crater_densities.py +75 -0
  204. terraingenpy-0.2.0.dev111/docs/gallery/distributions/literature_boulders.py +84 -0
  205. terraingenpy-0.2.0.dev111/docs/gallery/distributions/literature_craters.py +99 -0
  206. terraingenpy-0.2.0.dev111/docs/gallery/distributions/piecewise.py +57 -0
  207. terraingenpy-0.2.0.dev111/docs/gallery/distributions/power_laws.py +68 -0
  208. terraingenpy-0.2.0.dev111/docs/gallery/distributions/sampling.py +74 -0
  209. terraingenpy-0.2.0.dev111/docs/gallery/distributions/value_distributions.py +49 -0
  210. terraingenpy-0.2.0.dev111/docs/gallery/gallery.py +406 -0
  211. terraingenpy-0.2.0.dev111/docs/gallery/geology/bedforms_ripples.py +34 -0
  212. terraingenpy-0.2.0.dev111/docs/gallery/geology/bedforms_tars.py +33 -0
  213. terraingenpy-0.2.0.dev111/docs/gallery/geology/dune_shapes.py +35 -0
  214. terraingenpy-0.2.0.dev111/docs/gallery/geology/dunes_barchan_winds.py +36 -0
  215. terraingenpy-0.2.0.dev111/docs/gallery/geology/dunes_crest_lines.py +39 -0
  216. terraingenpy-0.2.0.dev111/docs/gallery/geology/dunes_grainflows.py +59 -0
  217. terraingenpy-0.2.0.dev111/docs/gallery/geology/dunes_ripples.py +89 -0
  218. terraingenpy-0.2.0.dev111/docs/gallery/geology/exposure.py +74 -0
  219. terraingenpy-0.2.0.dev111/docs/gallery/geology/pavement.py +33 -0
  220. terraingenpy-0.2.0.dev111/docs/gallery/geology/sand_fill.py +45 -0
  221. terraingenpy-0.2.0.dev111/docs/gallery/geology/sand_shadows.py +53 -0
  222. terraingenpy-0.2.0.dev111/docs/gallery/geology/strata.py +40 -0
  223. terraingenpy-0.2.0.dev111/docs/gallery/layers/masked.py +47 -0
  224. terraingenpy-0.2.0.dev111/docs/gallery/layers/masked_craters_boulders.py +91 -0
  225. terraingenpy-0.2.0.dev111/docs/gallery/layers/masked_polygon.py +54 -0
  226. terraingenpy-0.2.0.dev111/docs/gallery/layers/masked_polygon_craters_boulders.py +87 -0
  227. terraingenpy-0.2.0.dev111/docs/gallery/layers/scale_and_clamp.py +56 -0
  228. terraingenpy-0.2.0.dev111/docs/gallery/outputs/materials.py +67 -0
  229. terraingenpy-0.2.0.dev111/docs/gallery/planets/ellipsoid_craters.py +123 -0
  230. terraingenpy-0.2.0.dev111/docs/gallery/planets/ellipsoid_projection.py +87 -0
  231. terraingenpy-0.2.0.dev111/docs/gallery/planets/itokawa.py +129 -0
  232. terraingenpy-0.2.0.dev111/docs/gallery/planets/mars_scene.py +143 -0
  233. terraingenpy-0.2.0.dev111/docs/gallery/planets/moon_scene.py +107 -0
  234. terraingenpy-0.2.0.dev111/docs/gallery/queries/rover_traverse.py +78 -0
  235. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_blending.py +40 -0
  236. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_gain.py +30 -0
  237. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_lacunarity.py +30 -0
  238. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_octaves.py +30 -0
  239. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_perlin.py +42 -0
  240. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_simplex.py +42 -0
  241. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_value.py +42 -0
  242. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_warp.py +38 -0
  243. terraingenpy-0.2.0.dev111/docs/gallery/relief/noise_worley.py +43 -0
  244. terraingenpy-0.2.0.dev111/docs/gallery/relief/roughness_lunar.py +82 -0
  245. terraingenpy-0.2.0.dev111/docs/gallery/relief/spectral_continuation.py +78 -0
  246. terraingenpy-0.2.0.dev111/docs/gallery/relief/upsampling.py +66 -0
  247. terraingenpy-0.2.0.dev111/docs/gallery/relief/upsampling_diamond_square.py +41 -0
  248. terraingenpy-0.2.0.dev111/docs/gallery/relief/upsampling_synthetic.py +52 -0
  249. terraingenpy-0.2.0.dev111/docs/gallery/sources/chain.py +90 -0
  250. terraingenpy-0.2.0.dev111/docs/overrides/css/extra.css +521 -0
  251. terraingenpy-0.2.0.dev111/docs/overrides/main.html +8 -0
  252. terraingenpy-0.2.0.dev111/docs/scripts/cli_help.py +48 -0
  253. terraingenpy-0.2.0.dev111/docs/scripts/cmake_options.py +49 -0
  254. terraingenpy-0.2.0.dev111/docs/scripts/gallery_page.py +194 -0
  255. terraingenpy-0.2.0.dev111/docs/scripts/generate_schema.py +381 -0
  256. terraingenpy-0.2.0.dev111/docs/scripts/guides.py +264 -0
  257. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-albedo.cpp +28 -0
  258. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-albedo.py +32 -0
  259. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-boulders.cpp +29 -0
  260. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-boulders.py +29 -0
  261. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-craters.cpp +24 -0
  262. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-craters.py +28 -0
  263. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-noise.cpp +27 -0
  264. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/add-noise.py +28 -0
  265. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/config.json +22 -0
  266. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/run-a-config.py +37 -0
  267. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/write-outputs.cpp +35 -0
  268. terraingenpy-0.2.0.dev111/docs/snippets/_quickstart/write-outputs.py +26 -0
  269. terraingenpy-0.2.0.dev111/docs/snippets/albedo/add-noise-to-a-synthetic-albedo.cpp +43 -0
  270. terraingenpy-0.2.0.dev111/docs/snippets/albedo/add-noise-to-a-synthetic-albedo.py +48 -0
  271. terraingenpy-0.2.0.dev111/docs/snippets/albedo/add-reflectance-zones-around-a-new-crater.cpp +41 -0
  272. terraingenpy-0.2.0.dev111/docs/snippets/albedo/add-reflectance-zones-around-a-new-crater.py +41 -0
  273. terraingenpy-0.2.0.dev111/docs/snippets/albedo/brighten-a-lander-blast-zone.cpp +40 -0
  274. terraingenpy-0.2.0.dev111/docs/snippets/albedo/brighten-a-lander-blast-zone.py +38 -0
  275. terraingenpy-0.2.0.dev111/docs/snippets/albedo/brighten-steep-slopes.cpp +44 -0
  276. terraingenpy-0.2.0.dev111/docs/snippets/albedo/brighten-steep-slopes.py +40 -0
  277. terraingenpy-0.2.0.dev111/docs/snippets/albedo/brighten-the-albedo-with-rocks.cpp +48 -0
  278. terraingenpy-0.2.0.dev111/docs/snippets/albedo/brighten-the-albedo-with-rocks.py +44 -0
  279. terraingenpy-0.2.0.dev111/docs/snippets/albedo/evaluate-a-configured-albedo.cpp +33 -0
  280. terraingenpy-0.2.0.dev111/docs/snippets/albedo/evaluate-a-configured-albedo.py +42 -0
  281. terraingenpy-0.2.0.dev111/docs/snippets/albedo/evaluate-a-synthetic-albedo.cpp +35 -0
  282. terraingenpy-0.2.0.dev111/docs/snippets/albedo/evaluate-a-synthetic-albedo.py +16 -0
  283. terraingenpy-0.2.0.dev111/docs/snippets/albedo/fade-crater-rays-with-age.cpp +39 -0
  284. terraingenpy-0.2.0.dev111/docs/snippets/albedo/fade-crater-rays-with-age.py +44 -0
  285. terraingenpy-0.2.0.dev111/docs/snippets/albedo/mix-hapke-photometry-from-materials.cpp +48 -0
  286. terraingenpy-0.2.0.dev111/docs/snippets/albedo/mix-hapke-photometry-from-materials.py +46 -0
  287. terraingenpy-0.2.0.dev111/docs/snippets/albedo/scatter-dark-and-bright-splotches.cpp +41 -0
  288. terraingenpy-0.2.0.dev111/docs/snippets/albedo/scatter-dark-and-bright-splotches.py +35 -0
  289. terraingenpy-0.2.0.dev111/docs/snippets/albedo/upscale-an-albedo-map.cpp +46 -0
  290. terraingenpy-0.2.0.dev111/docs/snippets/albedo/upscale-an-albedo-map.py +57 -0
  291. terraingenpy-0.2.0.dev111/docs/snippets/bodies/add-terrain-over-a-whole-body.cpp +56 -0
  292. terraingenpy-0.2.0.dev111/docs/snippets/bodies/add-terrain-over-a-whole-body.py +64 -0
  293. terraingenpy-0.2.0.dev111/docs/snippets/bodies/configure-a-shape-model-body.cpp +58 -0
  294. terraingenpy-0.2.0.dev111/docs/snippets/bodies/configure-a-shape-model-body.py +59 -0
  295. terraingenpy-0.2.0.dev111/docs/snippets/bodies/make-a-body-from-a-radius-function.cpp +34 -0
  296. terraingenpy-0.2.0.dev111/docs/snippets/bodies/make-a-body-from-a-radius-function.py +27 -0
  297. terraingenpy-0.2.0.dev111/docs/snippets/bodies/make-a-body-from-a-shape-model.cpp +39 -0
  298. terraingenpy-0.2.0.dev111/docs/snippets/bodies/make-a-body-from-a-shape-model.py +33 -0
  299. terraingenpy-0.2.0.dev111/docs/snippets/bodies/upsample-a-shape-model.cpp +47 -0
  300. terraingenpy-0.2.0.dev111/docs/snippets/bodies/upsample-a-shape-model.py +69 -0
  301. terraingenpy-0.2.0.dev111/docs/snippets/bodies/write-the-whole-body-as-a-mesh.cpp +42 -0
  302. terraingenpy-0.2.0.dev111/docs/snippets/bodies/write-the-whole-body-as-a-mesh.py +37 -0
  303. terraingenpy-0.2.0.dev111/docs/snippets/boulders/break-boulders-as-they-wear.cpp +42 -0
  304. terraingenpy-0.2.0.dev111/docs/snippets/boulders/break-boulders-as-they-wear.py +52 -0
  305. terraingenpy-0.2.0.dev111/docs/snippets/boulders/choose-boulder-sizes.cpp +46 -0
  306. terraingenpy-0.2.0.dev111/docs/snippets/boulders/choose-boulder-sizes.py +49 -0
  307. terraingenpy-0.2.0.dev111/docs/snippets/boulders/design-a-boulder-style.cpp +43 -0
  308. terraingenpy-0.2.0.dev111/docs/snippets/boulders/design-a-boulder-style.py +39 -0
  309. terraingenpy-0.2.0.dev111/docs/snippets/boulders/draw-boulders-as-relief-or-models.cpp +44 -0
  310. terraingenpy-0.2.0.dev111/docs/snippets/boulders/draw-boulders-as-relief-or-models.py +66 -0
  311. terraingenpy-0.2.0.dev111/docs/snippets/boulders/gather-boulders-in-patches-and-clusters.cpp +46 -0
  312. terraingenpy-0.2.0.dev111/docs/snippets/boulders/gather-boulders-in-patches-and-clusters.py +63 -0
  313. terraingenpy-0.2.0.dev111/docs/snippets/boulders/generate-a-boulder-shape.cpp +30 -0
  314. terraingenpy-0.2.0.dev111/docs/snippets/boulders/generate-a-boulder-shape.py +37 -0
  315. terraingenpy-0.2.0.dev111/docs/snippets/boulders/list-boulders-from-a-config.cpp +38 -0
  316. terraingenpy-0.2.0.dev111/docs/snippets/boulders/list-boulders-from-a-config.py +49 -0
  317. terraingenpy-0.2.0.dev111/docs/snippets/boulders/list-boulders-of-a-layer.cpp +31 -0
  318. terraingenpy-0.2.0.dev111/docs/snippets/boulders/list-boulders-of-a-layer.py +37 -0
  319. terraingenpy-0.2.0.dev111/docs/snippets/boulders/place-boulders-by-hand.cpp +45 -0
  320. terraingenpy-0.2.0.dev111/docs/snippets/boulders/place-boulders-by-hand.py +47 -0
  321. terraingenpy-0.2.0.dev111/docs/snippets/boulders/pose-boulders.cpp +41 -0
  322. terraingenpy-0.2.0.dev111/docs/snippets/boulders/pose-boulders.py +64 -0
  323. terraingenpy-0.2.0.dev111/docs/snippets/boulders/split-a-boulder-shape-into-pieces.cpp +40 -0
  324. terraingenpy-0.2.0.dev111/docs/snippets/boulders/split-a-boulder-shape-into-pieces.py +53 -0
  325. terraingenpy-0.2.0.dev111/docs/snippets/boulders/throw-blocks-around-craters.cpp +34 -0
  326. terraingenpy-0.2.0.dev111/docs/snippets/boulders/throw-blocks-around-craters.py +52 -0
  327. terraingenpy-0.2.0.dev111/docs/snippets/boulders/weather-boulders-with-fillets-and-ventifacts.cpp +47 -0
  328. terraingenpy-0.2.0.dev111/docs/snippets/boulders/weather-boulders-with-fillets-and-ventifacts.py +61 -0
  329. terraingenpy-0.2.0.dev111/docs/snippets/boulders/write-boulder-models.cpp +40 -0
  330. terraingenpy-0.2.0.dev111/docs/snippets/boulders/write-boulder-models.py +57 -0
  331. terraingenpy-0.2.0.dev111/docs/snippets/configuration/build-a-generator-from-a-config.cpp +30 -0
  332. terraingenpy-0.2.0.dev111/docs/snippets/configuration/build-a-generator-from-a-config.py +19 -0
  333. terraingenpy-0.2.0.dev111/docs/snippets/conftest.py +18 -0
  334. terraingenpy-0.2.0.dev111/docs/snippets/craters/add-craters-to-a-terrain.cpp +28 -0
  335. terraingenpy-0.2.0.dev111/docs/snippets/craters/add-craters-to-a-terrain.py +29 -0
  336. terraingenpy-0.2.0.dev111/docs/snippets/craters/choose-a-crater-profile.cpp +46 -0
  337. terraingenpy-0.2.0.dev111/docs/snippets/craters/choose-a-crater-profile.py +59 -0
  338. terraingenpy-0.2.0.dev111/docs/snippets/craters/degrade-craters-with-age.cpp +48 -0
  339. terraingenpy-0.2.0.dev111/docs/snippets/craters/degrade-craters-with-age.py +53 -0
  340. terraingenpy-0.2.0.dev111/docs/snippets/craters/list-craters-from-a-config.cpp +36 -0
  341. terraingenpy-0.2.0.dev111/docs/snippets/craters/list-craters-from-a-config.py +55 -0
  342. terraingenpy-0.2.0.dev111/docs/snippets/craters/list-craters-of-a-layer.cpp +31 -0
  343. terraingenpy-0.2.0.dev111/docs/snippets/craters/list-craters-of-a-layer.py +34 -0
  344. terraingenpy-0.2.0.dev111/docs/snippets/craters/place-craters-by-hand.cpp +34 -0
  345. terraingenpy-0.2.0.dev111/docs/snippets/craters/place-craters-by-hand.py +48 -0
  346. terraingenpy-0.2.0.dev111/docs/snippets/craters/raise-central-peaks.cpp +48 -0
  347. terraingenpy-0.2.0.dev111/docs/snippets/craters/raise-central-peaks.py +55 -0
  348. terraingenpy-0.2.0.dev111/docs/snippets/craters/replace-a-blurred-crater.cpp +48 -0
  349. terraingenpy-0.2.0.dev111/docs/snippets/craters/replace-a-blurred-crater.py +68 -0
  350. terraingenpy-0.2.0.dev111/docs/snippets/craters/restamp-craters-from-a-coarser-run.cpp +59 -0
  351. terraingenpy-0.2.0.dev111/docs/snippets/craters/restamp-craters-from-a-coarser-run.py +83 -0
  352. terraingenpy-0.2.0.dev111/docs/snippets/craters/roughen-and-stretch-crater-rims.cpp +51 -0
  353. terraingenpy-0.2.0.dev111/docs/snippets/craters/roughen-and-stretch-crater-rims.py +56 -0
  354. terraingenpy-0.2.0.dev111/docs/snippets/craters/skip-craters-a-dem-resolves.cpp +37 -0
  355. terraingenpy-0.2.0.dev111/docs/snippets/craters/skip-craters-a-dem-resolves.py +48 -0
  356. terraingenpy-0.2.0.dev111/docs/snippets/craters/space-craters-apart.cpp +46 -0
  357. terraingenpy-0.2.0.dev111/docs/snippets/craters/space-craters-apart.py +60 -0
  358. terraingenpy-0.2.0.dev111/docs/snippets/craters/terrace-crater-walls.cpp +45 -0
  359. terraingenpy-0.2.0.dev111/docs/snippets/craters/terrace-crater-walls.py +57 -0
  360. terraingenpy-0.2.0.dev111/docs/snippets/craters/throw-secondary-craters-in-rays.cpp +39 -0
  361. terraingenpy-0.2.0.dev111/docs/snippets/craters/throw-secondary-craters-in-rays.py +47 -0
  362. terraingenpy-0.2.0.dev111/docs/snippets/craters/use-published-crater-models.cpp +38 -0
  363. terraingenpy-0.2.0.dev111/docs/snippets/craters/use-published-crater-models.py +48 -0
  364. terraingenpy-0.2.0.dev111/docs/snippets/craters/vary-crater-density-with-a-map.cpp +47 -0
  365. terraingenpy-0.2.0.dev111/docs/snippets/craters/vary-crater-density-with-a-map.py +51 -0
  366. terraingenpy-0.2.0.dev111/docs/snippets/customization/stack-noise-fractals.cpp +34 -0
  367. terraingenpy-0.2.0.dev111/docs/snippets/customization/stack-noise-fractals.py +32 -0
  368. terraingenpy-0.2.0.dev111/docs/snippets/customization/use-rock-meshes-for-boulders.cpp +38 -0
  369. terraingenpy-0.2.0.dev111/docs/snippets/customization/use-rock-meshes-for-boulders.py +42 -0
  370. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-crater-age-model.cpp +52 -0
  371. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-crater-age-model.py +58 -0
  372. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-crater-profile.cpp +53 -0
  373. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-crater-profile.py +66 -0
  374. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-degradation-model.cpp +43 -0
  375. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-degradation-model.py +64 -0
  376. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-layer.cpp +39 -0
  377. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-layer.py +36 -0
  378. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-size-distribution.cpp +45 -0
  379. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-size-distribution.py +45 -0
  380. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-source.cpp +50 -0
  381. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-source.py +39 -0
  382. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-surface-field.cpp +53 -0
  383. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-a-surface-field.py +56 -0
  384. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-an-albedo-layer.cpp +51 -0
  385. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-an-albedo-layer.py +47 -0
  386. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-an-albedo-source.cpp +51 -0
  387. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-an-albedo-source.py +51 -0
  388. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-an-upsampler.cpp +53 -0
  389. terraingenpy-0.2.0.dev111/docs/snippets/customization/write-an-upsampler.py +53 -0
  390. terraingenpy-0.2.0.dev111/docs/snippets/snippet_test.h +32 -0
  391. terraingenpy-0.2.0.dev111/include/terraingen/albedo/albedo.h +133 -0
  392. terraingenpy-0.2.0.dev111/include/terraingen/albedo/maturity.h +21 -0
  393. terraingenpy-0.2.0.dev111/include/terraingen/albedo/raster_albedo.h +109 -0
  394. terraingenpy-0.2.0.dev111/include/terraingen/albedo/rock_albedo.h +75 -0
  395. terraingenpy-0.2.0.dev111/include/terraingen/albedo/splotches.h +185 -0
  396. terraingenpy-0.2.0.dev111/include/terraingen/albedo/synthetic.h +89 -0
  397. terraingenpy-0.2.0.dev111/include/terraingen/config/build.h +53 -0
  398. terraingenpy-0.2.0.dev111/include/terraingen/config/config.h +65 -0
  399. terraingenpy-0.2.0.dev111/include/terraingen/config/generate.h +109 -0
  400. terraingenpy-0.2.0.dev111/include/terraingen/config/json.h +72 -0
  401. terraingenpy-0.2.0.dev111/include/terraingen/config/validate.h +39 -0
  402. terraingenpy-0.2.0.dev111/include/terraingen/distribution/golombek_rapp.h +41 -0
  403. terraingenpy-0.2.0.dev111/include/terraingen/distribution/log_polynomial.h +44 -0
  404. terraingenpy-0.2.0.dev111/include/terraingen/distribution/piecewise_power_law.h +50 -0
  405. terraingenpy-0.2.0.dev111/include/terraingen/distribution/piecewise_uniform.h +58 -0
  406. terraingenpy-0.2.0.dev111/include/terraingen/distribution/production_surface.h +73 -0
  407. terraingenpy-0.2.0.dev111/include/terraingen/distribution/size_frequency.h +126 -0
  408. terraingenpy-0.2.0.dev111/include/terraingen/distribution/spliced.h +54 -0
  409. terraingenpy-0.2.0.dev111/include/terraingen/distribution/tabulated.h +51 -0
  410. terraingenpy-0.2.0.dev111/include/terraingen/layers/anchored_plane.h +30 -0
  411. terraingenpy-0.2.0.dev111/include/terraingen/layers/bedforms.h +124 -0
  412. terraingenpy-0.2.0.dev111/include/terraingen/layers/boulders/boulder.h +363 -0
  413. terraingenpy-0.2.0.dev111/include/terraingen/layers/boulders/boulder_fragments.h +38 -0
  414. terraingenpy-0.2.0.dev111/include/terraingen/layers/boulders/boulder_layer.h +399 -0
  415. terraingenpy-0.2.0.dev111/include/terraingen/layers/boulders/boulder_options.h +512 -0
  416. terraingenpy-0.2.0.dev111/include/terraingen/layers/boulders/boulder_shape.h +123 -0
  417. terraingenpy-0.2.0.dev111/include/terraingen/layers/boulders/ejecta_index.h +55 -0
  418. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/ages/steady_state.h +73 -0
  419. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/crater.h +247 -0
  420. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/crater_layer.h +212 -0
  421. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/crater_placer.h +44 -0
  422. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/degradation/diffusion.h +167 -0
  423. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/degradation/diffusivities.h +55 -0
  424. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/generation/population.h +161 -0
  425. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/profiles/fassett_thomson.h +44 -0
  426. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/secondaries.h +100 -0
  427. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/secondary_model.h +238 -0
  428. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/shaping/apply.h +90 -0
  429. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/shaping/apply_options.h +365 -0
  430. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/shaping/datum.h +86 -0
  431. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/shaping/irregularity.h +190 -0
  432. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/shaping/prepared.h +58 -0
  433. terraingenpy-0.2.0.dev111/include/terraingen/layers/craters/shaping/slope.h +75 -0
  434. terraingenpy-0.2.0.dev111/include/terraingen/layers/density_map.h +136 -0
  435. terraingenpy-0.2.0.dev111/include/terraingen/layers/dunes.h +267 -0
  436. terraingenpy-0.2.0.dev111/include/terraingen/layers/evaluation_cache.h +79 -0
  437. terraingenpy-0.2.0.dev111/include/terraingen/layers/exposure.h +112 -0
  438. terraingenpy-0.2.0.dev111/include/terraingen/layers/kernels/craters.h +1323 -0
  439. terraingenpy-0.2.0.dev111/include/terraingen/layers/kernels/noise_layer.h +54 -0
  440. terraingenpy-0.2.0.dev111/include/terraingen/layers/layer.h +103 -0
  441. terraingenpy-0.2.0.dev111/include/terraingen/layers/masked.h +150 -0
  442. terraingenpy-0.2.0.dev111/include/terraingen/layers/noise_layer.h +74 -0
  443. terraingenpy-0.2.0.dev111/include/terraingen/layers/pavement.h +134 -0
  444. terraingenpy-0.2.0.dev111/include/terraingen/layers/roughness.h +90 -0
  445. terraingenpy-0.2.0.dev111/include/terraingen/layers/roughness_estimate.h +51 -0
  446. terraingenpy-0.2.0.dev111/include/terraingen/layers/sand_fill.h +74 -0
  447. terraingenpy-0.2.0.dev111/include/terraingen/layers/source_resolved.h +42 -0
  448. terraingenpy-0.2.0.dev111/include/terraingen/layers/strata.h +106 -0
  449. terraingenpy-0.2.0.dev111/include/terraingen/mesh/io/icq.h +79 -0
  450. terraingenpy-0.2.0.dev111/include/terraingen/mesh/io/mesh_io.h +73 -0
  451. terraingenpy-0.2.0.dev111/include/terraingen/mesh/polyhedra.h +32 -0
  452. terraingenpy-0.2.0.dev111/include/terraingen/mesh/shape_model.h +21 -0
  453. terraingenpy-0.2.0.dev111/include/terraingen/noise/fractal.h +319 -0
  454. terraingenpy-0.2.0.dev111/include/terraingen/noise/fractals.h +272 -0
  455. terraingenpy-0.2.0.dev111/include/terraingen/noise/lattice.h +133 -0
  456. terraingenpy-0.2.0.dev111/include/terraingen/noise/perlin.h +145 -0
  457. terraingenpy-0.2.0.dev111/include/terraingen/noise/simplex.h +122 -0
  458. terraingenpy-0.2.0.dev111/include/terraingen/noise/surface_noise.h +27 -0
  459. terraingenpy-0.2.0.dev111/include/terraingen/noise/validate.h +28 -0
  460. terraingenpy-0.2.0.dev111/include/terraingen/noise/worley.h +122 -0
  461. terraingenpy-0.2.0.dev111/include/terraingen/pipeline/feature_lists.h +66 -0
  462. terraingenpy-0.2.0.dev111/include/terraingen/pipeline/generator.h +204 -0
  463. terraingenpy-0.2.0.dev111/include/terraingen/pipeline/materials.h +60 -0
  464. terraingenpy-0.2.0.dev111/include/terraingen/pipeline/report.h +93 -0
  465. terraingenpy-0.2.0.dev111/include/terraingen/random/value_distribution.h +95 -0
  466. terraingenpy-0.2.0.dev111/include/terraingen/raster/cell_loops.h +168 -0
  467. terraingenpy-0.2.0.dev111/include/terraingen/raster/geotiff/geotiff.h +212 -0
  468. terraingenpy-0.2.0.dev111/include/terraingen/raster/grid.h +96 -0
  469. terraingenpy-0.2.0.dev111/include/terraingen/raster/raster.h +210 -0
  470. terraingenpy-0.2.0.dev111/include/terraingen/raster/raster_stats.h +55 -0
  471. terraingenpy-0.2.0.dev111/include/terraingen/raster/resample.h +121 -0
  472. terraingenpy-0.2.0.dev111/include/terraingen/raster/spectrum.h +54 -0
  473. terraingenpy-0.2.0.dev111/include/terraingen/raster/variogram.h +77 -0
  474. terraingenpy-0.2.0.dev111/include/terraingen/sources/diamond_square.h +185 -0
  475. terraingenpy-0.2.0.dev111/include/terraingen/sources/flat_source.h +60 -0
  476. terraingenpy-0.2.0.dev111/include/terraingen/sources/geotiff_source.h +126 -0
  477. terraingenpy-0.2.0.dev111/include/terraingen/sources/raster_source.h +208 -0
  478. terraingenpy-0.2.0.dev111/include/terraingen/sources/shape_model_source.h +96 -0
  479. terraingenpy-0.2.0.dev111/include/terraingen/sources/source.h +115 -0
  480. terraingenpy-0.2.0.dev111/include/terraingen/sources/source_chain.h +152 -0
  481. terraingenpy-0.2.0.dev111/include/terraingen/sources/synthetic_source.h +113 -0
  482. terraingenpy-0.2.0.dev111/include/terraingen/sources/upsampling.h +340 -0
  483. terraingenpy-0.2.0.dev111/include/terraingen/terraingen.h +154 -0
  484. terraingenpy-0.2.0.dev111/include/terraingen/util/bits.h +46 -0
  485. terraingenpy-0.2.0.dev111/include/terraingen/util/cells.h +217 -0
  486. terraingenpy-0.2.0.dev111/include/terraingen/util/lru_cache.h +127 -0
  487. terraingenpy-0.2.0.dev111/include/terraingen/util/portable.h +52 -0
  488. terraingenpy-0.2.0.dev111/include/terraingen/util/span.h +130 -0
  489. terraingenpy-0.2.0.dev111/include/terraingen/util/surface.h +238 -0
  490. terraingenpy-0.2.0.dev111/mkdocs.yml +245 -0
  491. terraingenpy-0.2.0.dev111/pyproject.toml +99 -0
  492. terraingenpy-0.2.0.dev111/python/CMakeLists.txt +66 -0
  493. terraingenpy-0.2.0.dev111/python/src/albedo.cpp +457 -0
  494. terraingenpy-0.2.0.dev111/python/src/boulders.cpp +578 -0
  495. terraingenpy-0.2.0.dev111/python/src/craters.cpp +682 -0
  496. terraingenpy-0.2.0.dev111/python/src/layers.cpp +516 -0
  497. terraingenpy-0.2.0.dev111/python/src/materials.cpp +106 -0
  498. terraingenpy-0.2.0.dev111/python/src/noise.cpp +390 -0
  499. terraingenpy-0.2.0.dev111/python/src/options.h +281 -0
  500. terraingenpy-0.2.0.dev111/python/src/pipeline.cpp +613 -0
  501. terraingenpy-0.2.0.dev111/python/src/raster.cpp +289 -0
  502. terraingenpy-0.2.0.dev111/python/src/sources.cpp +586 -0
  503. terraingenpy-0.2.0.dev111/python/src/tables.h +83 -0
  504. terraingenpy-0.2.0.dev111/python/src/trampolines.h +87 -0
  505. terraingenpy-0.2.0.dev111/src/CMakeLists.txt +124 -0
  506. terraingenpy-0.2.0.dev111/src/albedo/albedo.cpp +159 -0
  507. terraingenpy-0.2.0.dev111/src/albedo/bands.cpp +80 -0
  508. terraingenpy-0.2.0.dev111/src/albedo/blast_zones.cpp +113 -0
  509. terraingenpy-0.2.0.dev111/src/albedo/crater_albedo.cpp +564 -0
  510. terraingenpy-0.2.0.dev111/src/albedo/crater_albedo_options.cpp +181 -0
  511. terraingenpy-0.2.0.dev111/src/albedo/maturity.cpp +22 -0
  512. terraingenpy-0.2.0.dev111/src/albedo/raster_albedo.cpp +157 -0
  513. terraingenpy-0.2.0.dev111/src/albedo/rock_albedo.cpp +113 -0
  514. terraingenpy-0.2.0.dev111/src/albedo/slope_albedo.cpp +157 -0
  515. terraingenpy-0.2.0.dev111/src/albedo/splotches.cpp +446 -0
  516. terraingenpy-0.2.0.dev111/src/albedo/synthetic.cpp +71 -0
  517. terraingenpy-0.2.0.dev111/src/albedo/zone_shadows.cpp +146 -0
  518. terraingenpy-0.2.0.dev111/src/config/build.cpp +1069 -0
  519. terraingenpy-0.2.0.dev111/src/config/build_steps.h +236 -0
  520. terraingenpy-0.2.0.dev111/src/config/config.cpp +119 -0
  521. terraingenpy-0.2.0.dev111/src/config/fields/albedo.h +561 -0
  522. terraingenpy-0.2.0.dev111/src/config/fields/boulders.h +602 -0
  523. terraingenpy-0.2.0.dev111/src/config/fields/common.h +353 -0
  524. terraingenpy-0.2.0.dev111/src/config/fields/crater_models.h +295 -0
  525. terraingenpy-0.2.0.dev111/src/config/fields/craters.h +593 -0
  526. terraingenpy-0.2.0.dev111/src/config/fields/enums.h +420 -0
  527. terraingenpy-0.2.0.dev111/src/config/fields/fields.h +47 -0
  528. terraingenpy-0.2.0.dev111/src/config/fields/json_io.h +395 -0
  529. terraingenpy-0.2.0.dev111/src/config/fields/layers.h +643 -0
  530. terraingenpy-0.2.0.dev111/src/config/fields/maps.h +68 -0
  531. terraingenpy-0.2.0.dev111/src/config/fields/materials.h +60 -0
  532. terraingenpy-0.2.0.dev111/src/config/fields/outputs.h +207 -0
  533. terraingenpy-0.2.0.dev111/src/config/fields/ranges.h +149 -0
  534. terraingenpy-0.2.0.dev111/src/config/fields/sources.h +226 -0
  535. terraingenpy-0.2.0.dev111/src/config/generate.cpp +580 -0
  536. terraingenpy-0.2.0.dev111/src/config/json.cpp +265 -0
  537. terraingenpy-0.2.0.dev111/src/config/ranges.cpp +146 -0
  538. terraingenpy-0.2.0.dev111/src/config/schema.cpp +290 -0
  539. terraingenpy-0.2.0.dev111/src/config/spec.h +877 -0
  540. terraingenpy-0.2.0.dev111/src/config/validate.cpp +914 -0
  541. terraingenpy-0.2.0.dev111/src/distribution/composition.cpp +64 -0
  542. terraingenpy-0.2.0.dev111/src/distribution/golombek_rapp.cpp +44 -0
  543. terraingenpy-0.2.0.dev111/src/distribution/log_polynomial.cpp +63 -0
  544. terraingenpy-0.2.0.dev111/src/distribution/minimum.cpp +46 -0
  545. terraingenpy-0.2.0.dev111/src/distribution/piecewise_power_law.cpp +62 -0
  546. terraingenpy-0.2.0.dev111/src/distribution/piecewise_uniform.cpp +107 -0
  547. terraingenpy-0.2.0.dev111/src/distribution/power_law.cpp +36 -0
  548. terraingenpy-0.2.0.dev111/src/distribution/size_frequency.cpp +140 -0
  549. terraingenpy-0.2.0.dev111/src/distribution/spliced.cpp +69 -0
  550. terraingenpy-0.2.0.dev111/src/distribution/summed.cpp +50 -0
  551. terraingenpy-0.2.0.dev111/src/distribution/tabulated.cpp +82 -0
  552. terraingenpy-0.2.0.dev111/src/gpu/backend.cpp +185 -0
  553. terraingenpy-0.2.0.dev111/src/gpu/cuda.cpp +316 -0
  554. terraingenpy-0.2.0.dev111/src/gpu/cuda.h +47 -0
  555. terraingenpy-0.2.0.dev111/src/gpu/kernel.cpp +155 -0
  556. terraingenpy-0.2.0.dev111/src/gpu/metal.cpp +181 -0
  557. terraingenpy-0.2.0.dev111/src/gpu/metal.h +46 -0
  558. terraingenpy-0.2.0.dev111/src/gpu/vulkan.cpp +555 -0
  559. terraingenpy-0.2.0.dev111/src/gpu/vulkan.h +67 -0
  560. terraingenpy-0.2.0.dev111/src/layers/CMakeLists.txt +87 -0
  561. terraingenpy-0.2.0.dev111/src/layers/bedforms.cpp +186 -0
  562. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_abundance.cpp +182 -0
  563. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_clusters.cpp +60 -0
  564. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_layer.cpp +382 -0
  565. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_layer_abundance.cpp +368 -0
  566. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_models.cpp +307 -0
  567. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_options.cpp +363 -0
  568. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_relief.cpp +461 -0
  569. terraingenpy-0.2.0.dev111/src/layers/boulders/boulder_shape.cpp +497 -0
  570. terraingenpy-0.2.0.dev111/src/layers/craters/ages/age_model.cpp +51 -0
  571. terraingenpy-0.2.0.dev111/src/layers/craters/ages/freshness_ages.cpp +41 -0
  572. terraingenpy-0.2.0.dev111/src/layers/craters/ages/steady_state.cpp +71 -0
  573. terraingenpy-0.2.0.dev111/src/layers/craters/crater.cpp +132 -0
  574. terraingenpy-0.2.0.dev111/src/layers/craters/crater_layer.cpp +341 -0
  575. terraingenpy-0.2.0.dev111/src/layers/craters/crater_placer.cpp +23 -0
  576. terraingenpy-0.2.0.dev111/src/layers/craters/degradation/degradation_model.cpp +50 -0
  577. terraingenpy-0.2.0.dev111/src/layers/craters/degradation/diffusion.cpp +320 -0
  578. terraingenpy-0.2.0.dev111/src/layers/craters/generation/cell_cache.cpp +82 -0
  579. terraingenpy-0.2.0.dev111/src/layers/craters/generation/cell_cache.h +70 -0
  580. terraingenpy-0.2.0.dev111/src/layers/craters/generation/population.cpp +439 -0
  581. terraingenpy-0.2.0.dev111/src/layers/craters/generation/spacing.cpp +132 -0
  582. terraingenpy-0.2.0.dev111/src/layers/craters/profiles/complex.cpp +79 -0
  583. terraingenpy-0.2.0.dev111/src/layers/craters/secondaries.cpp +416 -0
  584. terraingenpy-0.2.0.dev111/src/layers/craters/secondary_model.cpp +260 -0
  585. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/apply.cpp +411 -0
  586. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/apply_options.cpp +208 -0
  587. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/attributes.cpp +32 -0
  588. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/crater_kernel.cpp +611 -0
  589. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/datum.cpp +98 -0
  590. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/datum_fit.cpp +756 -0
  591. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/datum_fit.h +45 -0
  592. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/irregularity.cpp +388 -0
  593. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/morphometry.cpp +71 -0
  594. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/prepared.cpp +88 -0
  595. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/resolved_state.cpp +152 -0
  596. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/resolved_state.h +43 -0
  597. terraingenpy-0.2.0.dev111/src/layers/craters/shaping/slope.cpp +61 -0
  598. terraingenpy-0.2.0.dev111/src/layers/density_map.cpp +116 -0
  599. terraingenpy-0.2.0.dev111/src/layers/dunes.cpp +658 -0
  600. terraingenpy-0.2.0.dev111/src/layers/exposure.cpp +126 -0
  601. terraingenpy-0.2.0.dev111/src/layers/field.cpp +122 -0
  602. terraingenpy-0.2.0.dev111/src/layers/kernel.h +37 -0
  603. terraingenpy-0.2.0.dev111/src/layers/kernels/crater_body_datums.slang +42 -0
  604. terraingenpy-0.2.0.dev111/src/layers/kernels/crater_datums.slang +36 -0
  605. terraingenpy-0.2.0.dev111/src/layers/kernels/craters.slang +60 -0
  606. terraingenpy-0.2.0.dev111/src/layers/kernels/noise_layer.slang +26 -0
  607. terraingenpy-0.2.0.dev111/src/layers/layer.cpp +62 -0
  608. terraingenpy-0.2.0.dev111/src/layers/masked.cpp +356 -0
  609. terraingenpy-0.2.0.dev111/src/layers/noise_layer.cpp +108 -0
  610. terraingenpy-0.2.0.dev111/src/layers/pavement.cpp +240 -0
  611. terraingenpy-0.2.0.dev111/src/layers/prefetched_ground.cpp +136 -0
  612. terraingenpy-0.2.0.dev111/src/layers/prefetched_ground.h +174 -0
  613. terraingenpy-0.2.0.dev111/src/layers/roughness.cpp +153 -0
  614. terraingenpy-0.2.0.dev111/src/layers/roughness_estimate.cpp +140 -0
  615. terraingenpy-0.2.0.dev111/src/layers/sand_fill.cpp +81 -0
  616. terraingenpy-0.2.0.dev111/src/layers/sand_shadow.cpp +134 -0
  617. terraingenpy-0.2.0.dev111/src/layers/source_resolved.cpp +62 -0
  618. terraingenpy-0.2.0.dev111/src/layers/spectral_continuation.cpp +237 -0
  619. terraingenpy-0.2.0.dev111/src/layers/strata.cpp +132 -0
  620. terraingenpy-0.2.0.dev111/src/mesh/io/formats.h +71 -0
  621. terraingenpy-0.2.0.dev111/src/mesh/io/gltf.cpp +335 -0
  622. terraingenpy-0.2.0.dev111/src/mesh/io/icq.cpp +212 -0
  623. terraingenpy-0.2.0.dev111/src/mesh/io/mesh_io.cpp +110 -0
  624. terraingenpy-0.2.0.dev111/src/mesh/io/obj.cpp +117 -0
  625. terraingenpy-0.2.0.dev111/src/mesh/io/stl.cpp +137 -0
  626. terraingenpy-0.2.0.dev111/src/mesh/mesh.cpp +246 -0
  627. terraingenpy-0.2.0.dev111/src/mesh/shape_model.cpp +180 -0
  628. terraingenpy-0.2.0.dev111/src/noise/CMakeLists.txt +13 -0
  629. terraingenpy-0.2.0.dev111/src/noise/fractal_rows.cpp +119 -0
  630. terraingenpy-0.2.0.dev111/src/noise/fractal_rows.h +26 -0
  631. terraingenpy-0.2.0.dev111/src/noise/surface_noise.cpp +39 -0
  632. terraingenpy-0.2.0.dev111/src/noise/validate.cpp +56 -0
  633. terraingenpy-0.2.0.dev111/src/pipeline/body_mesh.cpp +114 -0
  634. terraingenpy-0.2.0.dev111/src/pipeline/feature_lists.cpp +458 -0
  635. terraingenpy-0.2.0.dev111/src/pipeline/generator.cpp +428 -0
  636. terraingenpy-0.2.0.dev111/src/pipeline/materials.cpp +132 -0
  637. terraingenpy-0.2.0.dev111/src/pipeline/mesh_build.cpp +296 -0
  638. terraingenpy-0.2.0.dev111/src/pipeline/report.cpp +253 -0
  639. terraingenpy-0.2.0.dev111/src/random/value_distribution.cpp +142 -0
  640. terraingenpy-0.2.0.dev111/src/raster/cell_loops.cpp +57 -0
  641. terraingenpy-0.2.0.dev111/src/raster/geotiff/geotiff.cpp +123 -0
  642. terraingenpy-0.2.0.dev111/src/raster/geotiff/geotiff_read.cpp +792 -0
  643. terraingenpy-0.2.0.dev111/src/raster/geotiff/geotiff_write.cpp +302 -0
  644. terraingenpy-0.2.0.dev111/src/raster/geotiff/tiff_codecs.cpp +383 -0
  645. terraingenpy-0.2.0.dev111/src/raster/geotiff/tiff_format.cpp +135 -0
  646. terraingenpy-0.2.0.dev111/src/raster/geotiff/tiff_format.h +171 -0
  647. terraingenpy-0.2.0.dev111/src/raster/grid.cpp +127 -0
  648. terraingenpy-0.2.0.dev111/src/raster/kernel_weight.h +15 -0
  649. terraingenpy-0.2.0.dev111/src/raster/mapped_bounds.h +32 -0
  650. terraingenpy-0.2.0.dev111/src/raster/radial_spectrum.h +27 -0
  651. terraingenpy-0.2.0.dev111/src/raster/resample.cpp +158 -0
  652. terraingenpy-0.2.0.dev111/src/raster/spectrum.cpp +262 -0
  653. terraingenpy-0.2.0.dev111/src/raster/variogram.cpp +22 -0
  654. terraingenpy-0.2.0.dev111/src/sources/CMakeLists.txt +20 -0
  655. terraingenpy-0.2.0.dev111/src/sources/diamond_square.cpp +505 -0
  656. terraingenpy-0.2.0.dev111/src/sources/flat_source.cpp +32 -0
  657. terraingenpy-0.2.0.dev111/src/sources/geotiff_source.cpp +238 -0
  658. terraingenpy-0.2.0.dev111/src/sources/raster_source.cpp +193 -0
  659. terraingenpy-0.2.0.dev111/src/sources/seam_field.cpp +715 -0
  660. terraingenpy-0.2.0.dev111/src/sources/seam_field.h +52 -0
  661. terraingenpy-0.2.0.dev111/src/sources/shape_model_source.cpp +165 -0
  662. terraingenpy-0.2.0.dev111/src/sources/source.cpp +46 -0
  663. terraingenpy-0.2.0.dev111/src/sources/source_chain.cpp +209 -0
  664. terraingenpy-0.2.0.dev111/src/sources/synthetic_source.cpp +106 -0
  665. terraingenpy-0.2.0.dev111/src/sources/upsampling.cpp +457 -0
  666. terraingenpy-0.2.0.dev111/src/util/CMakeLists.txt +20 -0
  667. terraingenpy-0.2.0.dev111/src/util/checks.cpp +48 -0
  668. terraingenpy-0.2.0.dev111/src/util/cube_sphere_cells.cpp +423 -0
  669. terraingenpy-0.2.0.dev111/src/util/fft.cpp +77 -0
  670. terraingenpy-0.2.0.dev111/src/util/log.cpp +127 -0
  671. terraingenpy-0.2.0.dev111/src/util/numerics.h +145 -0
  672. terraingenpy-0.2.0.dev111/src/util/planar_cells.cpp +65 -0
  673. terraingenpy-0.2.0.dev111/src/util/radial_shape.cpp +146 -0
  674. terraingenpy-0.2.0.dev111/src/util/surface.cpp +336 -0
  675. terraingenpy-0.2.0.dev111/src/util/text.cpp +59 -0
  676. terraingenpy-0.2.0.dev111/src/util/text.h +34 -0
  677. terraingenpy-0.2.0.dev111/tests/CMakeLists.txt +54 -0
  678. terraingenpy-0.2.0.dev111/tests/benchmark/CMakeLists.txt +33 -0
  679. terraingenpy-0.2.0.dev111/tests/benchmark/bench_grids.cpp +89 -0
  680. terraingenpy-0.2.0.dev111/tests/benchmark/bench_python_subclasses.py +144 -0
  681. terraingenpy-0.2.0.dev111/tests/benchmark/bench_sources.cpp +64 -0
  682. terraingenpy-0.2.0.dev111/tests/benchmark/fixtures.h +44 -0
  683. terraingenpy-0.2.0.dev111/tests/golden/noise/kernels_test.cpp +103 -0
  684. terraingenpy-0.2.0.dev111/tests/integration/build_info_stable.cmake +68 -0
  685. terraingenpy-0.2.0.dev111/tests/integration/package/main.cpp +33 -0
  686. terraingenpy-0.2.0.dev111/tests/python/CMakeLists.txt +23 -0
  687. terraingenpy-0.2.0.dev111/tests/python/conftest.py +233 -0
  688. terraingenpy-0.2.0.dev111/tests/python/test_albedo.py +311 -0
  689. terraingenpy-0.2.0.dev111/tests/python/test_boulders.py +499 -0
  690. terraingenpy-0.2.0.dev111/tests/python/test_config.py +367 -0
  691. terraingenpy-0.2.0.dev111/tests/python/test_craters.py +707 -0
  692. terraingenpy-0.2.0.dev111/tests/python/test_docs_cli_help.py +46 -0
  693. terraingenpy-0.2.0.dev111/tests/python/test_docs_cmake_options.py +37 -0
  694. terraingenpy-0.2.0.dev111/tests/python/test_docs_gallery.py +157 -0
  695. terraingenpy-0.2.0.dev111/tests/python/test_docs_guides.py +107 -0
  696. terraingenpy-0.2.0.dev111/tests/python/test_layers.py +820 -0
  697. terraingenpy-0.2.0.dev111/tests/python/test_noise.py +297 -0
  698. terraingenpy-0.2.0.dev111/tests/python/test_pipeline.py +413 -0
  699. terraingenpy-0.2.0.dev111/tests/python/test_raster.py +246 -0
  700. terraingenpy-0.2.0.dev111/tests/python/test_report.py +107 -0
  701. terraingenpy-0.2.0.dev111/tests/python/test_sources.py +474 -0
  702. terraingenpy-0.2.0.dev111/tests/support/apply_crater.h +23 -0
  703. terraingenpy-0.2.0.dev111/tests/support/referenced_source.h +44 -0
  704. terraingenpy-0.2.0.dev111/tests/support/resample.h +46 -0
  705. terraingenpy-0.2.0.dev111/tests/support/source_agreement.h +67 -0
  706. terraingenpy-0.2.0.dev111/tests/unit/albedo/albedo_test.cpp +407 -0
  707. terraingenpy-0.2.0.dev111/tests/unit/albedo/bands_test.cpp +100 -0
  708. terraingenpy-0.2.0.dev111/tests/unit/app/CMakeLists.txt +3 -0
  709. terraingenpy-0.2.0.dev111/tests/unit/app/cli_test.cpp +274 -0
  710. terraingenpy-0.2.0.dev111/tests/unit/config/angles_test.cpp +175 -0
  711. terraingenpy-0.2.0.dev111/tests/unit/config/build_test.cpp +1310 -0
  712. terraingenpy-0.2.0.dev111/tests/unit/config/checks_test.cpp +61 -0
  713. terraingenpy-0.2.0.dev111/tests/unit/config/config_test.cpp +151 -0
  714. terraingenpy-0.2.0.dev111/tests/unit/config/configs.h +311 -0
  715. terraingenpy-0.2.0.dev111/tests/unit/config/feature_lists_test.cpp +264 -0
  716. terraingenpy-0.2.0.dev111/tests/unit/config/generate_from_config_test.cpp +1019 -0
  717. terraingenpy-0.2.0.dev111/tests/unit/config/json_io_test.cpp +1003 -0
  718. terraingenpy-0.2.0.dev111/tests/unit/config/json_parse_errors_test.cpp +188 -0
  719. terraingenpy-0.2.0.dev111/tests/unit/config/json_read_test.cpp +251 -0
  720. terraingenpy-0.2.0.dev111/tests/unit/config/ranges_test.cpp +240 -0
  721. terraingenpy-0.2.0.dev111/tests/unit/config/schema_test.cpp +640 -0
  722. terraingenpy-0.2.0.dev111/tests/unit/config/validate_config_test.cpp +1162 -0
  723. terraingenpy-0.2.0.dev111/tests/unit/config/validate_sources_test.cpp +408 -0
  724. terraingenpy-0.2.0.dev111/tests/unit/config/write_outputs_test.cpp +467 -0
  725. terraingenpy-0.2.0.dev111/tests/unit/distribution/composition_test.cpp +153 -0
  726. terraingenpy-0.2.0.dev111/tests/unit/docs/CMakeLists.txt +6 -0
  727. terraingenpy-0.2.0.dev111/tests/unit/gpu/backend_test.cpp +193 -0
  728. terraingenpy-0.2.0.dev111/tests/unit/gpu/kernels/noise_conformance.slang +63 -0
  729. terraingenpy-0.2.0.dev111/tests/unit/gpu/noise_test.cpp +184 -0
  730. terraingenpy-0.2.0.dev111/tests/unit/gpu/vulkan_test.cpp +158 -0
  731. terraingenpy-0.2.0.dev111/tests/unit/layers/CMakeLists.txt +66 -0
  732. terraingenpy-0.2.0.dev111/tests/unit/layers/boulders/boulder_fragments_test.cpp +318 -0
  733. terraingenpy-0.2.0.dev111/tests/unit/layers/boulders/boulder_options_test.cpp +121 -0
  734. terraingenpy-0.2.0.dev111/tests/unit/layers/craters/crater_layer_test.cpp +503 -0
  735. terraingenpy-0.2.0.dev111/tests/unit/layers/craters/crater_test.cpp +180 -0
  736. terraingenpy-0.2.0.dev111/tests/unit/layers/craters/generation/cell_cache_test.cpp +120 -0
  737. terraingenpy-0.2.0.dev111/tests/unit/layers/craters/generation/population_test.cpp +725 -0
  738. terraingenpy-0.2.0.dev111/tests/unit/layers/craters/shaping/apply_test.cpp +718 -0
  739. terraingenpy-0.2.0.dev111/tests/unit/layers/craters/shaping/replacement_test.cpp +219 -0
  740. terraingenpy-0.2.0.dev111/tests/unit/layers/craters/shaping/resolved_state_test.cpp +289 -0
  741. terraingenpy-0.2.0.dev111/tests/unit/layers/field_test.cpp +146 -0
  742. terraingenpy-0.2.0.dev111/tests/unit/layers/lattice_test.cpp +34 -0
  743. terraingenpy-0.2.0.dev111/tests/unit/layers/noise_layer_test.cpp +300 -0
  744. terraingenpy-0.2.0.dev111/tests/unit/layers/prefetched_ground_test.cpp +178 -0
  745. terraingenpy-0.2.0.dev111/tests/unit/layers/roughness_estimate_test.cpp +219 -0
  746. terraingenpy-0.2.0.dev111/tests/unit/layers/source_resolved_test.cpp +256 -0
  747. terraingenpy-0.2.0.dev111/tests/unit/layers/spectral_continuation_test.cpp +249 -0
  748. terraingenpy-0.2.0.dev111/tests/unit/layers/sphere_layers_test.cpp +221 -0
  749. terraingenpy-0.2.0.dev111/tests/unit/mesh/io/mesh_io_test.cpp +222 -0
  750. terraingenpy-0.2.0.dev111/tests/unit/noise/CMakeLists.txt +19 -0
  751. terraingenpy-0.2.0.dev111/tests/unit/noise/fractal_rows_test.cpp +125 -0
  752. terraingenpy-0.2.0.dev111/tests/unit/noise/fractals_test.cpp +186 -0
  753. terraingenpy-0.2.0.dev111/tests/unit/noise/noise3_test.cpp +293 -0
  754. terraingenpy-0.2.0.dev111/tests/unit/noise/perlin_test.cpp +228 -0
  755. terraingenpy-0.2.0.dev111/tests/unit/noise/surface_noise_test.cpp +29 -0
  756. terraingenpy-0.2.0.dev111/tests/unit/noise/validate_test.cpp +80 -0
  757. terraingenpy-0.2.0.dev111/tests/unit/pipeline/features_test.cpp +232 -0
  758. terraingenpy-0.2.0.dev111/tests/unit/pipeline/generator_test.cpp +699 -0
  759. terraingenpy-0.2.0.dev111/tests/unit/pipeline/materials_test.cpp +165 -0
  760. terraingenpy-0.2.0.dev111/tests/unit/pipeline/report_test.cpp +305 -0
  761. terraingenpy-0.2.0.dev111/tests/unit/pipeline/terrain_windows_test.cpp +281 -0
  762. terraingenpy-0.2.0.dev111/tests/unit/pipeline/terrains.h +61 -0
  763. terraingenpy-0.2.0.dev111/tests/unit/raster/cell_loops_test.cpp +155 -0
  764. terraingenpy-0.2.0.dev111/tests/unit/raster/geotiff_test.cpp +628 -0
  765. terraingenpy-0.2.0.dev111/tests/unit/raster/raster_stats_test.cpp +62 -0
  766. terraingenpy-0.2.0.dev111/tests/unit/raster/raster_test.cpp +110 -0
  767. terraingenpy-0.2.0.dev111/tests/unit/raster/resample_test.cpp +248 -0
  768. terraingenpy-0.2.0.dev111/tests/unit/raster/spectrum_test.cpp +178 -0
  769. terraingenpy-0.2.0.dev111/tests/unit/raster/tiff_format_test.cpp +144 -0
  770. terraingenpy-0.2.0.dev111/tests/unit/sources/CMakeLists.txt +16 -0
  771. terraingenpy-0.2.0.dev111/tests/unit/sources/diamond_square_test.cpp +706 -0
  772. terraingenpy-0.2.0.dev111/tests/unit/sources/geotiff_source_test.cpp +569 -0
  773. terraingenpy-0.2.0.dev111/tests/unit/sources/raster_source_test.cpp +328 -0
  774. terraingenpy-0.2.0.dev111/tests/unit/sources/shape_model_source_test.cpp +154 -0
  775. terraingenpy-0.2.0.dev111/tests/unit/sources/source_chain_test.cpp +538 -0
  776. terraingenpy-0.2.0.dev111/tests/unit/sources/synthetic_source_test.cpp +151 -0
  777. terraingenpy-0.2.0.dev111/tests/unit/sources/upsampling_test.cpp +435 -0
  778. terraingenpy-0.2.0.dev111/tests/unit/util/arithmetic_test.cpp +25 -0
  779. terraingenpy-0.2.0.dev111/tests/unit/util/bisection_test.cpp +76 -0
  780. terraingenpy-0.2.0.dev111/tests/unit/util/cells_test.cpp +105 -0
  781. terraingenpy-0.2.0.dev111/tests/unit/util/checks_test.cpp +65 -0
  782. terraingenpy-0.2.0.dev111/tests/unit/util/fft_test.cpp +87 -0
  783. terraingenpy-0.2.0.dev111/tests/unit/util/files_test.cpp +32 -0
  784. terraingenpy-0.2.0.dev111/tests/unit/util/lru_cache_test.cpp +38 -0
  785. terraingenpy-0.2.0.dev111/tests/unit/util/overloaded_test.cpp +19 -0
  786. terraingenpy-0.2.0.dev111/tests/unit/util/quadrature_test.cpp +35 -0
  787. terraingenpy-0.2.0.dev111/tests/unit/util/surface_test.cpp +734 -0
  788. terraingenpy-0.2.0.dev111/tests/unit/util/text_test.cpp +26 -0
  789. terraingenpy-0.2.0.dev90/.pre-commit-config.yaml +0 -66
  790. terraingenpy-0.2.0.dev90/CHANGELOG.md +0 -337
  791. terraingenpy-0.2.0.dev90/CMakeLists.txt +0 -147
  792. terraingenpy-0.2.0.dev90/CONTRIBUTING.md +0 -47
  793. terraingenpy-0.2.0.dev90/PKG-INFO +0 -250
  794. terraingenpy-0.2.0.dev90/README.md +0 -194
  795. terraingenpy-0.2.0.dev90/cmake/TerrainGenSlang.cmake +0 -131
  796. terraingenpy-0.2.0.dev90/cmake/TerrainGenTesting.cmake +0 -21
  797. terraingenpy-0.2.0.dev90/cmake/third_party/ernie.cmake +0 -37
  798. terraingenpy-0.2.0.dev90/docs/_src/concepts/extending.md +0 -1
  799. terraingenpy-0.2.0.dev90/docs/_src/getting-started/first-terrain.md +0 -1
  800. terraingenpy-0.2.0.dev90/docs/_src/getting-started/index.md +0 -14
  801. terraingenpy-0.2.0.dev90/docs/_src/getting-started/installation.md +0 -77
  802. terraingenpy-0.2.0.dev90/docs/_src/getting-started/quickstart.md +0 -1
  803. terraingenpy-0.2.0.dev90/docs/_src/guides/command-line.md +0 -1
  804. terraingenpy-0.2.0.dev90/docs/_src/guides/index.md +0 -1
  805. terraingenpy-0.2.0.dev90/docs/_src/index.md +0 -46
  806. terraingenpy-0.2.0.dev90/docs/gallery/albedo/blast_zones.py +0 -44
  807. terraingenpy-0.2.0.dev90/docs/gallery/albedo/crater_rays.py +0 -60
  808. terraingenpy-0.2.0.dev90/docs/gallery/albedo/oblique_impacts.py +0 -49
  809. terraingenpy-0.2.0.dev90/docs/gallery/albedo/reflectance_zones.py +0 -51
  810. terraingenpy-0.2.0.dev90/docs/gallery/albedo/rocks.py +0 -48
  811. terraingenpy-0.2.0.dev90/docs/gallery/albedo/slopes.py +0 -42
  812. terraingenpy-0.2.0.dev90/docs/gallery/albedo/splotches.py +0 -37
  813. terraingenpy-0.2.0.dev90/docs/gallery/albedo/synthetic_base.py +0 -60
  814. terraingenpy-0.2.0.dev90/docs/gallery/assets.py +0 -102
  815. terraingenpy-0.2.0.dev90/docs/gallery/boulders/clustering.py +0 -42
  816. terraingenpy-0.2.0.dev90/docs/gallery/boulders/crater_ejecta_aging.py +0 -69
  817. terraingenpy-0.2.0.dev90/docs/gallery/boulders/crater_ejecta_coverage.py +0 -62
  818. terraingenpy-0.2.0.dev90/docs/gallery/boulders/crater_ejecta_decay.py +0 -65
  819. terraingenpy-0.2.0.dev90/docs/gallery/boulders/crater_ejecta_floor.py +0 -64
  820. terraingenpy-0.2.0.dev90/docs/gallery/boulders/crater_ejecta_profiles.py +0 -58
  821. terraingenpy-0.2.0.dev90/docs/gallery/boulders/crater_ejecta_reach.py +0 -63
  822. terraingenpy-0.2.0.dev90/docs/gallery/boulders/crater_ejecta_regolith.py +0 -51
  823. terraingenpy-0.2.0.dev90/docs/gallery/boulders/density_map.py +0 -74
  824. terraingenpy-0.2.0.dev90/docs/gallery/boulders/fillets.py +0 -77
  825. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_axes.py +0 -31
  826. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_fractures.py +0 -36
  827. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_fragments.py +0 -56
  828. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_noise.py +0 -37
  829. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_rounding.py +0 -29
  830. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_settle.py +0 -62
  831. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_solids.py +0 -36
  832. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_styles.py +0 -30
  833. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_variety.py +0 -27
  834. terraingenpy-0.2.0.dev90/docs/gallery/boulders/models_weathering.py +0 -42
  835. terraingenpy-0.2.0.dev90/docs/gallery/boulders/patches.py +0 -37
  836. terraingenpy-0.2.0.dev90/docs/gallery/boulders/pose_burial.py +0 -56
  837. terraingenpy-0.2.0.dev90/docs/gallery/boulders/pose_burial_by_wear.py +0 -51
  838. terraingenpy-0.2.0.dev90/docs/gallery/boulders/pose_height_ratio.py +0 -56
  839. terraingenpy-0.2.0.dev90/docs/gallery/boulders/size_distributions.py +0 -67
  840. terraingenpy-0.2.0.dev90/docs/gallery/boulders/slope_map.py +0 -68
  841. terraingenpy-0.2.0.dev90/docs/gallery/boulders/slopes.py +0 -72
  842. terraingenpy-0.2.0.dev90/docs/gallery/craters/ages.py +0 -75
  843. terraingenpy-0.2.0.dev90/docs/gallery/craters/aristarchus.py +0 -78
  844. terraingenpy-0.2.0.dev90/docs/gallery/craters/blend_shapes.py +0 -61
  845. terraingenpy-0.2.0.dev90/docs/gallery/craters/catalog_completeness.py +0 -73
  846. terraingenpy-0.2.0.dev90/docs/gallery/craters/complex_craters.py +0 -59
  847. terraingenpy-0.2.0.dev90/docs/gallery/craters/complex_profiles.py +0 -77
  848. terraingenpy-0.2.0.dev90/docs/gallery/craters/copernicus.py +0 -77
  849. terraingenpy-0.2.0.dev90/docs/gallery/craters/datum.py +0 -58
  850. terraingenpy-0.2.0.dev90/docs/gallery/craters/datum_profiles.py +0 -62
  851. terraingenpy-0.2.0.dev90/docs/gallery/craters/default_field.py +0 -28
  852. terraingenpy-0.2.0.dev90/docs/gallery/craters/degradation_by_age.py +0 -44
  853. terraingenpy-0.2.0.dev90/docs/gallery/craters/degradation_by_diffusion.py +0 -54
  854. terraingenpy-0.2.0.dev90/docs/gallery/craters/degradation_by_freshness.py +0 -52
  855. terraingenpy-0.2.0.dev90/docs/gallery/craters/density_map.py +0 -77
  856. terraingenpy-0.2.0.dev90/docs/gallery/craters/density_map_areal_fraction.py +0 -90
  857. terraingenpy-0.2.0.dev90/docs/gallery/craters/density_map_count.py +0 -87
  858. terraingenpy-0.2.0.dev90/docs/gallery/craters/density_map_scale.py +0 -77
  859. terraingenpy-0.2.0.dev90/docs/gallery/craters/depth_ratio.py +0 -70
  860. terraingenpy-0.2.0.dev90/docs/gallery/craters/elongation.py +0 -52
  861. terraingenpy-0.2.0.dev90/docs/gallery/craters/elongation_and_roughness.py +0 -57
  862. terraingenpy-0.2.0.dev90/docs/gallery/craters/freshness_vs_diffusion.py +0 -44
  863. terraingenpy-0.2.0.dev90/docs/gallery/craters/freshness_vs_diffusion_maps.py +0 -64
  864. terraingenpy-0.2.0.dev90/docs/gallery/craters/interior_replacement.py +0 -46
  865. terraingenpy-0.2.0.dev90/docs/gallery/craters/irregularity.py +0 -48
  866. terraingenpy-0.2.0.dev90/docs/gallery/craters/irregularity_harmonics.py +0 -81
  867. terraingenpy-0.2.0.dev90/docs/gallery/craters/irregularity_models.py +0 -82
  868. terraingenpy-0.2.0.dev90/docs/gallery/craters/irregularity_spectral_slope.py +0 -77
  869. terraingenpy-0.2.0.dev90/docs/gallery/craters/manual_depth.py +0 -64
  870. terraingenpy-0.2.0.dev90/docs/gallery/craters/max_craters.py +0 -51
  871. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks.py +0 -81
  872. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks_elongation.py +0 -88
  873. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks_massifs.py +0 -88
  874. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks_roughness.py +0 -88
  875. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks_seeds.py +0 -84
  876. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks_sharpness.py +0 -88
  877. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks_size.py +0 -88
  878. terraingenpy-0.2.0.dev90/docs/gallery/craters/peaks_spread.py +0 -89
  879. terraingenpy-0.2.0.dev90/docs/gallery/craters/populations.py +0 -106
  880. terraingenpy-0.2.0.dev90/docs/gallery/craters/profiles.py +0 -72
  881. terraingenpy-0.2.0.dev90/docs/gallery/craters/radial_marks.py +0 -55
  882. terraingenpy-0.2.0.dev90/docs/gallery/craters/resolution_fade.py +0 -43
  883. terraingenpy-0.2.0.dev90/docs/gallery/craters/rim_models.py +0 -59
  884. terraingenpy-0.2.0.dev90/docs/gallery/craters/rim_smoothing.py +0 -64
  885. terraingenpy-0.2.0.dev90/docs/gallery/craters/secondaries.py +0 -81
  886. terraingenpy-0.2.0.dev90/docs/gallery/craters/secondary_shapes.py +0 -45
  887. terraingenpy-0.2.0.dev90/docs/gallery/craters/slope_floor_offset.py +0 -61
  888. terraingenpy-0.2.0.dev90/docs/gallery/craters/slope_hillside.py +0 -56
  889. terraingenpy-0.2.0.dev90/docs/gallery/craters/slope_response.py +0 -59
  890. terraingenpy-0.2.0.dev90/docs/gallery/craters/slope_upslope_rim.py +0 -61
  891. terraingenpy-0.2.0.dev90/docs/gallery/craters/slope_wear.py +0 -70
  892. terraingenpy-0.2.0.dev90/docs/gallery/craters/source_resolved.py +0 -64
  893. terraingenpy-0.2.0.dev90/docs/gallery/craters/spacing_both.py +0 -45
  894. terraingenpy-0.2.0.dev90/docs/gallery/craters/spacing_ratio.py +0 -46
  895. terraingenpy-0.2.0.dev90/docs/gallery/craters/spacing_separation.py +0 -40
  896. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces.py +0 -82
  897. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_arcs.py +0 -87
  898. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_bench_slope.py +0 -87
  899. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_benches.py +0 -87
  900. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_blocks.py +0 -87
  901. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_freshness.py +0 -85
  902. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_gaps.py +0 -87
  903. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_onset.py +0 -94
  904. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_rim_variation.py +0 -87
  905. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_scarps.py +0 -87
  906. terraingenpy-0.2.0.dev90/docs/gallery/craters/terraces_seeds.py +0 -86
  907. terraingenpy-0.2.0.dev90/docs/gallery/craters/texture_ejecta.py +0 -49
  908. terraingenpy-0.2.0.dev90/docs/gallery/craters/texture_gullies.py +0 -48
  909. terraingenpy-0.2.0.dev90/docs/gallery/craters/texture_mantling.py +0 -51
  910. terraingenpy-0.2.0.dev90/docs/gallery/craters/texture_noise.py +0 -48
  911. terraingenpy-0.2.0.dev90/docs/gallery/craters/texture_rim_noise.py +0 -48
  912. terraingenpy-0.2.0.dev90/docs/gallery/craters/theophilus.py +0 -87
  913. terraingenpy-0.2.0.dev90/docs/gallery/craters/tycho.py +0 -82
  914. terraingenpy-0.2.0.dev90/docs/gallery/dem/craters_added.py +0 -82
  915. terraingenpy-0.2.0.dev90/docs/gallery/dem/globe.py +0 -69
  916. terraingenpy-0.2.0.dev90/docs/gallery/dem/noise_added.py +0 -116
  917. terraingenpy-0.2.0.dev90/docs/gallery/dem/upsampling.py +0 -97
  918. terraingenpy-0.2.0.dev90/docs/gallery/distributions/chronology.py +0 -51
  919. terraingenpy-0.2.0.dev90/docs/gallery/distributions/combining.py +0 -69
  920. terraingenpy-0.2.0.dev90/docs/gallery/distributions/crater_densities.py +0 -72
  921. terraingenpy-0.2.0.dev90/docs/gallery/distributions/literature_boulders.py +0 -83
  922. terraingenpy-0.2.0.dev90/docs/gallery/distributions/literature_craters.py +0 -100
  923. terraingenpy-0.2.0.dev90/docs/gallery/distributions/piecewise.py +0 -55
  924. terraingenpy-0.2.0.dev90/docs/gallery/distributions/power_laws.py +0 -69
  925. terraingenpy-0.2.0.dev90/docs/gallery/distributions/sampling.py +0 -73
  926. terraingenpy-0.2.0.dev90/docs/gallery/distributions/value_distributions.py +0 -47
  927. terraingenpy-0.2.0.dev90/docs/gallery/gallery.py +0 -344
  928. terraingenpy-0.2.0.dev90/docs/gallery/geology/bedforms_ripples.py +0 -35
  929. terraingenpy-0.2.0.dev90/docs/gallery/geology/bedforms_tars.py +0 -34
  930. terraingenpy-0.2.0.dev90/docs/gallery/geology/dune_shapes.py +0 -34
  931. terraingenpy-0.2.0.dev90/docs/gallery/geology/dunes_barchan_winds.py +0 -35
  932. terraingenpy-0.2.0.dev90/docs/gallery/geology/dunes_crest_lines.py +0 -38
  933. terraingenpy-0.2.0.dev90/docs/gallery/geology/dunes_grainflows.py +0 -58
  934. terraingenpy-0.2.0.dev90/docs/gallery/geology/dunes_ripples.py +0 -87
  935. terraingenpy-0.2.0.dev90/docs/gallery/geology/exposure.py +0 -74
  936. terraingenpy-0.2.0.dev90/docs/gallery/geology/pavement.py +0 -32
  937. terraingenpy-0.2.0.dev90/docs/gallery/geology/sand_fill.py +0 -45
  938. terraingenpy-0.2.0.dev90/docs/gallery/geology/sand_shadows.py +0 -54
  939. terraingenpy-0.2.0.dev90/docs/gallery/geology/strata.py +0 -41
  940. terraingenpy-0.2.0.dev90/docs/gallery/layers/masked.py +0 -49
  941. terraingenpy-0.2.0.dev90/docs/gallery/layers/masked_craters_boulders.py +0 -93
  942. terraingenpy-0.2.0.dev90/docs/gallery/layers/masked_polygon.py +0 -56
  943. terraingenpy-0.2.0.dev90/docs/gallery/layers/masked_polygon_craters_boulders.py +0 -88
  944. terraingenpy-0.2.0.dev90/docs/gallery/layers/scale_and_clamp.py +0 -57
  945. terraingenpy-0.2.0.dev90/docs/gallery/outputs/materials.py +0 -68
  946. terraingenpy-0.2.0.dev90/docs/gallery/planets/ellipsoid_craters.py +0 -123
  947. terraingenpy-0.2.0.dev90/docs/gallery/planets/ellipsoid_projection.py +0 -86
  948. terraingenpy-0.2.0.dev90/docs/gallery/planets/mars_scene.py +0 -150
  949. terraingenpy-0.2.0.dev90/docs/gallery/planets/moon_scene.py +0 -112
  950. terraingenpy-0.2.0.dev90/docs/gallery/queries/rover_traverse.py +0 -80
  951. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_blending.py +0 -39
  952. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_gain.py +0 -29
  953. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_lacunarity.py +0 -31
  954. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_octaves.py +0 -29
  955. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_perlin.py +0 -41
  956. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_simplex.py +0 -41
  957. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_value.py +0 -41
  958. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_warp.py +0 -32
  959. terraingenpy-0.2.0.dev90/docs/gallery/relief/noise_worley.py +0 -44
  960. terraingenpy-0.2.0.dev90/docs/gallery/relief/roughness_lunar.py +0 -81
  961. terraingenpy-0.2.0.dev90/docs/gallery/relief/spectral_continuation.py +0 -81
  962. terraingenpy-0.2.0.dev90/docs/gallery/relief/upsampling.py +0 -68
  963. terraingenpy-0.2.0.dev90/docs/gallery/relief/upsampling_diamond_square.py +0 -42
  964. terraingenpy-0.2.0.dev90/docs/gallery/relief/upsampling_synthetic.py +0 -53
  965. terraingenpy-0.2.0.dev90/docs/gallery/sources/chain.py +0 -93
  966. terraingenpy-0.2.0.dev90/docs/overrides/css/extra.css +0 -465
  967. terraingenpy-0.2.0.dev90/docs/overrides/main.html +0 -7
  968. terraingenpy-0.2.0.dev90/docs/scripts/gallery_page.py +0 -119
  969. terraingenpy-0.2.0.dev90/docs/scripts/generate_schema.py +0 -398
  970. terraingenpy-0.2.0.dev90/docs/snippets/craters/crater_layer.cpp +0 -50
  971. terraingenpy-0.2.0.dev90/docs/snippets/craters/crater_layer.py +0 -41
  972. terraingenpy-0.2.0.dev90/mkdocs.yml +0 -234
  973. terraingenpy-0.2.0.dev90/pyproject.toml +0 -98
  974. terraingenpy-0.2.0.dev90/terraingen/CMakeLists.txt +0 -126
  975. terraingenpy-0.2.0.dev90/terraingen/albedo/albedo.cpp +0 -159
  976. terraingenpy-0.2.0.dev90/terraingen/albedo/albedo.h +0 -135
  977. terraingenpy-0.2.0.dev90/terraingen/albedo/bands.cpp +0 -80
  978. terraingenpy-0.2.0.dev90/terraingen/albedo/blast_zones.cpp +0 -113
  979. terraingenpy-0.2.0.dev90/terraingen/albedo/crater_albedo.cpp +0 -564
  980. terraingenpy-0.2.0.dev90/terraingen/albedo/crater_albedo_options.cpp +0 -181
  981. terraingenpy-0.2.0.dev90/terraingen/albedo/maturity.cpp +0 -22
  982. terraingenpy-0.2.0.dev90/terraingen/albedo/maturity.h +0 -23
  983. terraingenpy-0.2.0.dev90/terraingen/albedo/raster_albedo.cpp +0 -157
  984. terraingenpy-0.2.0.dev90/terraingen/albedo/raster_albedo.h +0 -112
  985. terraingenpy-0.2.0.dev90/terraingen/albedo/rock_albedo.cpp +0 -113
  986. terraingenpy-0.2.0.dev90/terraingen/albedo/rock_albedo.h +0 -75
  987. terraingenpy-0.2.0.dev90/terraingen/albedo/slope_albedo.cpp +0 -157
  988. terraingenpy-0.2.0.dev90/terraingen/albedo/splotches.cpp +0 -446
  989. terraingenpy-0.2.0.dev90/terraingen/albedo/splotches.h +0 -190
  990. terraingenpy-0.2.0.dev90/terraingen/albedo/synthetic.cpp +0 -71
  991. terraingenpy-0.2.0.dev90/terraingen/albedo/synthetic.h +0 -89
  992. terraingenpy-0.2.0.dev90/terraingen/albedo/zone_shadows.cpp +0 -146
  993. terraingenpy-0.2.0.dev90/terraingen/app/CMakeLists.txt +0 -33
  994. terraingenpy-0.2.0.dev90/terraingen/app/cli.cpp +0 -348
  995. terraingenpy-0.2.0.dev90/terraingen/app/cli.h +0 -66
  996. terraingenpy-0.2.0.dev90/terraingen/app/gui/CMakeLists.txt +0 -10
  997. terraingenpy-0.2.0.dev90/terraingen/app/gui/config_editor.cpp +0 -923
  998. terraingenpy-0.2.0.dev90/terraingen/app/gui/config_editor.h +0 -130
  999. terraingenpy-0.2.0.dev90/terraingen/app/gui/gui_app.cpp +0 -511
  1000. terraingenpy-0.2.0.dev90/terraingen/app/gui/gui_app.h +0 -144
  1001. terraingenpy-0.2.0.dev90/terraingen/app/gui/run.cpp +0 -33
  1002. terraingenpy-0.2.0.dev90/terraingen/app/gui/run.h +0 -26
  1003. terraingenpy-0.2.0.dev90/terraingen/app/gui/run_none.cpp +0 -19
  1004. terraingenpy-0.2.0.dev90/terraingen/app/gui/terrain_scene.cpp +0 -96
  1005. terraingenpy-0.2.0.dev90/terraingen/app/gui/terrain_scene.h +0 -38
  1006. terraingenpy-0.2.0.dev90/terraingen/app/gui/widgets.h +0 -36
  1007. terraingenpy-0.2.0.dev90/terraingen/app/main.cpp +0 -12
  1008. terraingenpy-0.2.0.dev90/terraingen/config/build.cpp +0 -1085
  1009. terraingenpy-0.2.0.dev90/terraingen/config/build.h +0 -205
  1010. terraingenpy-0.2.0.dev90/terraingen/config/config.cpp +0 -106
  1011. terraingenpy-0.2.0.dev90/terraingen/config/config.h +0 -871
  1012. terraingenpy-0.2.0.dev90/terraingen/config/fields/albedo.h +0 -566
  1013. terraingenpy-0.2.0.dev90/terraingen/config/fields/boulders.h +0 -609
  1014. terraingenpy-0.2.0.dev90/terraingen/config/fields/common.h +0 -309
  1015. terraingenpy-0.2.0.dev90/terraingen/config/fields/crater_models.h +0 -298
  1016. terraingenpy-0.2.0.dev90/terraingen/config/fields/craters.h +0 -552
  1017. terraingenpy-0.2.0.dev90/terraingen/config/fields/enums.h +0 -420
  1018. terraingenpy-0.2.0.dev90/terraingen/config/fields/fields.h +0 -47
  1019. terraingenpy-0.2.0.dev90/terraingen/config/fields/json_io.h +0 -390
  1020. terraingenpy-0.2.0.dev90/terraingen/config/fields/layers.h +0 -647
  1021. terraingenpy-0.2.0.dev90/terraingen/config/fields/maps.h +0 -64
  1022. terraingenpy-0.2.0.dev90/terraingen/config/fields/materials.h +0 -62
  1023. terraingenpy-0.2.0.dev90/terraingen/config/fields/outputs.h +0 -200
  1024. terraingenpy-0.2.0.dev90/terraingen/config/fields/ranges.h +0 -143
  1025. terraingenpy-0.2.0.dev90/terraingen/config/fields/sources.h +0 -208
  1026. terraingenpy-0.2.0.dev90/terraingen/config/generate.cpp +0 -591
  1027. terraingenpy-0.2.0.dev90/terraingen/config/generate.h +0 -105
  1028. terraingenpy-0.2.0.dev90/terraingen/config/json.cpp +0 -261
  1029. terraingenpy-0.2.0.dev90/terraingen/config/json.h +0 -90
  1030. terraingenpy-0.2.0.dev90/terraingen/config/ranges.cpp +0 -85
  1031. terraingenpy-0.2.0.dev90/terraingen/config/schema.cpp +0 -276
  1032. terraingenpy-0.2.0.dev90/terraingen/config/validate.cpp +0 -1042
  1033. terraingenpy-0.2.0.dev90/terraingen/config/validate.h +0 -53
  1034. terraingenpy-0.2.0.dev90/terraingen/distribution/composition.cpp +0 -64
  1035. terraingenpy-0.2.0.dev90/terraingen/distribution/golombek_rapp.cpp +0 -44
  1036. terraingenpy-0.2.0.dev90/terraingen/distribution/golombek_rapp.h +0 -43
  1037. terraingenpy-0.2.0.dev90/terraingen/distribution/log_polynomial.cpp +0 -63
  1038. terraingenpy-0.2.0.dev90/terraingen/distribution/log_polynomial.h +0 -47
  1039. terraingenpy-0.2.0.dev90/terraingen/distribution/minimum.cpp +0 -46
  1040. terraingenpy-0.2.0.dev90/terraingen/distribution/piecewise_power_law.cpp +0 -62
  1041. terraingenpy-0.2.0.dev90/terraingen/distribution/piecewise_power_law.h +0 -56
  1042. terraingenpy-0.2.0.dev90/terraingen/distribution/piecewise_uniform.cpp +0 -107
  1043. terraingenpy-0.2.0.dev90/terraingen/distribution/piecewise_uniform.h +0 -63
  1044. terraingenpy-0.2.0.dev90/terraingen/distribution/power_law.cpp +0 -36
  1045. terraingenpy-0.2.0.dev90/terraingen/distribution/production_surface.h +0 -76
  1046. terraingenpy-0.2.0.dev90/terraingen/distribution/size_frequency.cpp +0 -168
  1047. terraingenpy-0.2.0.dev90/terraingen/distribution/size_frequency.h +0 -128
  1048. terraingenpy-0.2.0.dev90/terraingen/distribution/spliced.cpp +0 -69
  1049. terraingenpy-0.2.0.dev90/terraingen/distribution/spliced.h +0 -58
  1050. terraingenpy-0.2.0.dev90/terraingen/distribution/summed.cpp +0 -50
  1051. terraingenpy-0.2.0.dev90/terraingen/distribution/tabulated.cpp +0 -82
  1052. terraingenpy-0.2.0.dev90/terraingen/distribution/tabulated.h +0 -57
  1053. terraingenpy-0.2.0.dev90/terraingen/gpu/backend.cpp +0 -185
  1054. terraingenpy-0.2.0.dev90/terraingen/gpu/cuda.cpp +0 -316
  1055. terraingenpy-0.2.0.dev90/terraingen/gpu/cuda.h +0 -47
  1056. terraingenpy-0.2.0.dev90/terraingen/gpu/kernel.cpp +0 -155
  1057. terraingenpy-0.2.0.dev90/terraingen/gpu/metal.cpp +0 -181
  1058. terraingenpy-0.2.0.dev90/terraingen/gpu/metal.h +0 -46
  1059. terraingenpy-0.2.0.dev90/terraingen/gpu/vulkan.cpp +0 -555
  1060. terraingenpy-0.2.0.dev90/terraingen/gpu/vulkan.h +0 -67
  1061. terraingenpy-0.2.0.dev90/terraingen/layers/CMakeLists.txt +0 -86
  1062. terraingenpy-0.2.0.dev90/terraingen/layers/anchored_plane.h +0 -29
  1063. terraingenpy-0.2.0.dev90/terraingen/layers/bedforms.cpp +0 -186
  1064. terraingenpy-0.2.0.dev90/terraingen/layers/bedforms.h +0 -130
  1065. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder.h +0 -345
  1066. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_abundance.cpp +0 -182
  1067. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_clusters.cpp +0 -60
  1068. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_fragments.h +0 -42
  1069. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_layer.cpp +0 -381
  1070. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_layer.h +0 -409
  1071. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_layer_abundance.cpp +0 -368
  1072. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_models.cpp +0 -310
  1073. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_options.cpp +0 -363
  1074. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_options.h +0 -518
  1075. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_relief.cpp +0 -474
  1076. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_shape.cpp +0 -497
  1077. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/boulder_shape.h +0 -127
  1078. terraingenpy-0.2.0.dev90/terraingen/layers/boulders/ejecta_index.h +0 -53
  1079. terraingenpy-0.2.0.dev90/terraingen/layers/craters/ages/age_model.cpp +0 -51
  1080. terraingenpy-0.2.0.dev90/terraingen/layers/craters/ages/freshness_ages.cpp +0 -41
  1081. terraingenpy-0.2.0.dev90/terraingen/layers/craters/ages/steady_state.cpp +0 -72
  1082. terraingenpy-0.2.0.dev90/terraingen/layers/craters/ages/steady_state.h +0 -75
  1083. terraingenpy-0.2.0.dev90/terraingen/layers/craters/crater.cpp +0 -118
  1084. terraingenpy-0.2.0.dev90/terraingen/layers/craters/crater.h +0 -228
  1085. terraingenpy-0.2.0.dev90/terraingen/layers/craters/crater_layer.cpp +0 -255
  1086. terraingenpy-0.2.0.dev90/terraingen/layers/craters/crater_layer.h +0 -178
  1087. terraingenpy-0.2.0.dev90/terraingen/layers/craters/crater_placer.cpp +0 -34
  1088. terraingenpy-0.2.0.dev90/terraingen/layers/craters/crater_placer.h +0 -50
  1089. terraingenpy-0.2.0.dev90/terraingen/layers/craters/degradation/degradation_model.cpp +0 -50
  1090. terraingenpy-0.2.0.dev90/terraingen/layers/craters/degradation/diffusion.cpp +0 -320
  1091. terraingenpy-0.2.0.dev90/terraingen/layers/craters/degradation/diffusion.h +0 -171
  1092. terraingenpy-0.2.0.dev90/terraingen/layers/craters/degradation/diffusivities.h +0 -61
  1093. terraingenpy-0.2.0.dev90/terraingen/layers/craters/generation/cell_cache.cpp +0 -43
  1094. terraingenpy-0.2.0.dev90/terraingen/layers/craters/generation/cell_cache.h +0 -69
  1095. terraingenpy-0.2.0.dev90/terraingen/layers/craters/generation/population.cpp +0 -411
  1096. terraingenpy-0.2.0.dev90/terraingen/layers/craters/generation/population.h +0 -161
  1097. terraingenpy-0.2.0.dev90/terraingen/layers/craters/generation/spacing.cpp +0 -132
  1098. terraingenpy-0.2.0.dev90/terraingen/layers/craters/profiles/complex.cpp +0 -79
  1099. terraingenpy-0.2.0.dev90/terraingen/layers/craters/profiles/fassett_thomson.h +0 -48
  1100. terraingenpy-0.2.0.dev90/terraingen/layers/craters/secondaries.cpp +0 -416
  1101. terraingenpy-0.2.0.dev90/terraingen/layers/craters/secondaries.h +0 -103
  1102. terraingenpy-0.2.0.dev90/terraingen/layers/craters/secondary_model.cpp +0 -260
  1103. terraingenpy-0.2.0.dev90/terraingen/layers/craters/secondary_model.h +0 -241
  1104. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/apply.cpp +0 -374
  1105. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/apply.h +0 -95
  1106. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/apply_options.cpp +0 -184
  1107. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/apply_options.h +0 -337
  1108. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/attributes.cpp +0 -32
  1109. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/crater_kernel.cpp +0 -610
  1110. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/datum.cpp +0 -60
  1111. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/datum.h +0 -73
  1112. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/datum_fit.cpp +0 -726
  1113. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/datum_fit.h +0 -36
  1114. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/irregularity.cpp +0 -388
  1115. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/irregularity.h +0 -195
  1116. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/morphometry.cpp +0 -71
  1117. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/prepared.cpp +0 -33
  1118. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/prepared.h +0 -49
  1119. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/resolved_state.cpp +0 -147
  1120. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/resolved_state.h +0 -39
  1121. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/slope.cpp +0 -61
  1122. terraingenpy-0.2.0.dev90/terraingen/layers/craters/shaping/slope.h +0 -79
  1123. terraingenpy-0.2.0.dev90/terraingen/layers/density_map.cpp +0 -116
  1124. terraingenpy-0.2.0.dev90/terraingen/layers/density_map.h +0 -136
  1125. terraingenpy-0.2.0.dev90/terraingen/layers/dunes.cpp +0 -658
  1126. terraingenpy-0.2.0.dev90/terraingen/layers/dunes.h +0 -276
  1127. terraingenpy-0.2.0.dev90/terraingen/layers/evaluation_cache.h +0 -70
  1128. terraingenpy-0.2.0.dev90/terraingen/layers/exposure.cpp +0 -126
  1129. terraingenpy-0.2.0.dev90/terraingen/layers/exposure.h +0 -115
  1130. terraingenpy-0.2.0.dev90/terraingen/layers/kernel.h +0 -37
  1131. terraingenpy-0.2.0.dev90/terraingen/layers/kernels/crater_body_datums.slang +0 -42
  1132. terraingenpy-0.2.0.dev90/terraingen/layers/kernels/crater_datums.slang +0 -36
  1133. terraingenpy-0.2.0.dev90/terraingen/layers/kernels/craters.h +0 -1331
  1134. terraingenpy-0.2.0.dev90/terraingen/layers/kernels/craters.slang +0 -60
  1135. terraingenpy-0.2.0.dev90/terraingen/layers/kernels/noise_relief.h +0 -54
  1136. terraingenpy-0.2.0.dev90/terraingen/layers/kernels/noise_relief.slang +0 -26
  1137. terraingenpy-0.2.0.dev90/terraingen/layers/layer.cpp +0 -62
  1138. terraingenpy-0.2.0.dev90/terraingen/layers/layer.h +0 -106
  1139. terraingenpy-0.2.0.dev90/terraingen/layers/masked.cpp +0 -356
  1140. terraingenpy-0.2.0.dev90/terraingen/layers/masked.h +0 -153
  1141. terraingenpy-0.2.0.dev90/terraingen/layers/noise_relief.cpp +0 -67
  1142. terraingenpy-0.2.0.dev90/terraingen/layers/noise_relief.h +0 -77
  1143. terraingenpy-0.2.0.dev90/terraingen/layers/pavement.cpp +0 -240
  1144. terraingenpy-0.2.0.dev90/terraingen/layers/pavement.h +0 -131
  1145. terraingenpy-0.2.0.dev90/terraingen/layers/prefetched_ground.cpp +0 -91
  1146. terraingenpy-0.2.0.dev90/terraingen/layers/prefetched_ground.h +0 -133
  1147. terraingenpy-0.2.0.dev90/terraingen/layers/roughness.cpp +0 -153
  1148. terraingenpy-0.2.0.dev90/terraingen/layers/roughness.h +0 -94
  1149. terraingenpy-0.2.0.dev90/terraingen/layers/roughness_estimate.cpp +0 -138
  1150. terraingenpy-0.2.0.dev90/terraingen/layers/roughness_estimate.h +0 -57
  1151. terraingenpy-0.2.0.dev90/terraingen/layers/sand_fill.cpp +0 -81
  1152. terraingenpy-0.2.0.dev90/terraingen/layers/sand_fill.h +0 -78
  1153. terraingenpy-0.2.0.dev90/terraingen/layers/sand_shadow.cpp +0 -134
  1154. terraingenpy-0.2.0.dev90/terraingen/layers/source_resolved.cpp +0 -62
  1155. terraingenpy-0.2.0.dev90/terraingen/layers/source_resolved.h +0 -46
  1156. terraingenpy-0.2.0.dev90/terraingen/layers/spectral_continuation.cpp +0 -237
  1157. terraingenpy-0.2.0.dev90/terraingen/layers/strata.cpp +0 -132
  1158. terraingenpy-0.2.0.dev90/terraingen/layers/strata.h +0 -111
  1159. terraingenpy-0.2.0.dev90/terraingen/mesh/io/formats.h +0 -71
  1160. terraingenpy-0.2.0.dev90/terraingen/mesh/io/gltf.cpp +0 -335
  1161. terraingenpy-0.2.0.dev90/terraingen/mesh/io/icq.cpp +0 -213
  1162. terraingenpy-0.2.0.dev90/terraingen/mesh/io/icq.h +0 -81
  1163. terraingenpy-0.2.0.dev90/terraingen/mesh/io/mesh_io.cpp +0 -110
  1164. terraingenpy-0.2.0.dev90/terraingen/mesh/io/mesh_io.h +0 -79
  1165. terraingenpy-0.2.0.dev90/terraingen/mesh/io/obj.cpp +0 -117
  1166. terraingenpy-0.2.0.dev90/terraingen/mesh/io/stl.cpp +0 -137
  1167. terraingenpy-0.2.0.dev90/terraingen/mesh/mesh.cpp +0 -246
  1168. terraingenpy-0.2.0.dev90/terraingen/mesh/polyhedra.h +0 -34
  1169. terraingenpy-0.2.0.dev90/terraingen/mesh/shape_model.cpp +0 -180
  1170. terraingenpy-0.2.0.dev90/terraingen/mesh/shape_model.h +0 -23
  1171. terraingenpy-0.2.0.dev90/terraingen/noise/CMakeLists.txt +0 -12
  1172. terraingenpy-0.2.0.dev90/terraingen/noise/fractal.h +0 -316
  1173. terraingenpy-0.2.0.dev90/terraingen/noise/lattice.h +0 -135
  1174. terraingenpy-0.2.0.dev90/terraingen/noise/noise_layers.h +0 -244
  1175. terraingenpy-0.2.0.dev90/terraingen/noise/perlin.h +0 -156
  1176. terraingenpy-0.2.0.dev90/terraingen/noise/simplex.h +0 -124
  1177. terraingenpy-0.2.0.dev90/terraingen/noise/surface_noise.cpp +0 -20
  1178. terraingenpy-0.2.0.dev90/terraingen/noise/surface_noise.h +0 -21
  1179. terraingenpy-0.2.0.dev90/terraingen/noise/validate.cpp +0 -55
  1180. terraingenpy-0.2.0.dev90/terraingen/noise/validate.h +0 -28
  1181. terraingenpy-0.2.0.dev90/terraingen/noise/worley.h +0 -124
  1182. terraingenpy-0.2.0.dev90/terraingen/pipeline/body_mesh.cpp +0 -114
  1183. terraingenpy-0.2.0.dev90/terraingen/pipeline/feature_lists.cpp +0 -276
  1184. terraingenpy-0.2.0.dev90/terraingen/pipeline/feature_lists.h +0 -53
  1185. terraingenpy-0.2.0.dev90/terraingen/pipeline/generator.cpp +0 -355
  1186. terraingenpy-0.2.0.dev90/terraingen/pipeline/generator.h +0 -194
  1187. terraingenpy-0.2.0.dev90/terraingen/pipeline/materials.cpp +0 -125
  1188. terraingenpy-0.2.0.dev90/terraingen/pipeline/materials.h +0 -58
  1189. terraingenpy-0.2.0.dev90/terraingen/pipeline/mesh_build.cpp +0 -256
  1190. terraingenpy-0.2.0.dev90/terraingen/pipeline/report.cpp +0 -282
  1191. terraingenpy-0.2.0.dev90/terraingen/pipeline/report.h +0 -112
  1192. terraingenpy-0.2.0.dev90/terraingen/python/CMakeLists.txt +0 -62
  1193. terraingenpy-0.2.0.dev90/terraingen/python/src/albedo.cpp +0 -456
  1194. terraingenpy-0.2.0.dev90/terraingen/python/src/boulders.cpp +0 -578
  1195. terraingenpy-0.2.0.dev90/terraingen/python/src/craters.cpp +0 -641
  1196. terraingenpy-0.2.0.dev90/terraingen/python/src/layers.cpp +0 -495
  1197. terraingenpy-0.2.0.dev90/terraingen/python/src/materials.cpp +0 -107
  1198. terraingenpy-0.2.0.dev90/terraingen/python/src/noise.cpp +0 -374
  1199. terraingenpy-0.2.0.dev90/terraingen/python/src/options.h +0 -335
  1200. terraingenpy-0.2.0.dev90/terraingen/python/src/pipeline.cpp +0 -623
  1201. terraingenpy-0.2.0.dev90/terraingen/python/src/raster.cpp +0 -288
  1202. terraingenpy-0.2.0.dev90/terraingen/python/src/sources.cpp +0 -499
  1203. terraingenpy-0.2.0.dev90/terraingen/python/src/tables.h +0 -82
  1204. terraingenpy-0.2.0.dev90/terraingen/python/src/trampolines.h +0 -87
  1205. terraingenpy-0.2.0.dev90/terraingen/python/terraingen/render.py +0 -242
  1206. terraingenpy-0.2.0.dev90/terraingen/random/value_distribution.cpp +0 -142
  1207. terraingenpy-0.2.0.dev90/terraingen/random/value_distribution.h +0 -98
  1208. terraingenpy-0.2.0.dev90/terraingen/raster/cell_loops.cpp +0 -70
  1209. terraingenpy-0.2.0.dev90/terraingen/raster/cell_loops.h +0 -172
  1210. terraingenpy-0.2.0.dev90/terraingen/raster/geotiff/geotiff.cpp +0 -123
  1211. terraingenpy-0.2.0.dev90/terraingen/raster/geotiff/geotiff.h +0 -181
  1212. terraingenpy-0.2.0.dev90/terraingen/raster/geotiff/geotiff_read.cpp +0 -699
  1213. terraingenpy-0.2.0.dev90/terraingen/raster/geotiff/geotiff_write.cpp +0 -302
  1214. terraingenpy-0.2.0.dev90/terraingen/raster/geotiff/tiff_codecs.cpp +0 -383
  1215. terraingenpy-0.2.0.dev90/terraingen/raster/geotiff/tiff_format.cpp +0 -135
  1216. terraingenpy-0.2.0.dev90/terraingen/raster/geotiff/tiff_format.h +0 -171
  1217. terraingenpy-0.2.0.dev90/terraingen/raster/grid.cpp +0 -142
  1218. terraingenpy-0.2.0.dev90/terraingen/raster/grid.h +0 -104
  1219. terraingenpy-0.2.0.dev90/terraingen/raster/raster.h +0 -166
  1220. terraingenpy-0.2.0.dev90/terraingen/raster/raster_stats.h +0 -50
  1221. terraingenpy-0.2.0.dev90/terraingen/raster/resample.cpp +0 -159
  1222. terraingenpy-0.2.0.dev90/terraingen/raster/resample.h +0 -116
  1223. terraingenpy-0.2.0.dev90/terraingen/raster/spectrum.cpp +0 -268
  1224. terraingenpy-0.2.0.dev90/terraingen/raster/spectrum.h +0 -77
  1225. terraingenpy-0.2.0.dev90/terraingen/raster/variogram.cpp +0 -81
  1226. terraingenpy-0.2.0.dev90/terraingen/raster/variogram.h +0 -29
  1227. terraingenpy-0.2.0.dev90/terraingen/sources/CMakeLists.txt +0 -19
  1228. terraingenpy-0.2.0.dev90/terraingen/sources/diamond_square.cpp +0 -590
  1229. terraingenpy-0.2.0.dev90/terraingen/sources/diamond_square.h +0 -216
  1230. terraingenpy-0.2.0.dev90/terraingen/sources/field.cpp +0 -123
  1231. terraingenpy-0.2.0.dev90/terraingen/sources/flat_source.cpp +0 -32
  1232. terraingenpy-0.2.0.dev90/terraingen/sources/flat_source.h +0 -60
  1233. terraingenpy-0.2.0.dev90/terraingen/sources/geotiff_source.cpp +0 -106
  1234. terraingenpy-0.2.0.dev90/terraingen/sources/geotiff_source.h +0 -110
  1235. terraingenpy-0.2.0.dev90/terraingen/sources/raster_source.cpp +0 -230
  1236. terraingenpy-0.2.0.dev90/terraingen/sources/raster_source.h +0 -210
  1237. terraingenpy-0.2.0.dev90/terraingen/sources/seam_field.cpp +0 -703
  1238. terraingenpy-0.2.0.dev90/terraingen/sources/seam_field.h +0 -57
  1239. terraingenpy-0.2.0.dev90/terraingen/sources/source.h +0 -79
  1240. terraingenpy-0.2.0.dev90/terraingen/sources/source_chain.cpp +0 -190
  1241. terraingenpy-0.2.0.dev90/terraingen/sources/source_chain.h +0 -144
  1242. terraingenpy-0.2.0.dev90/terraingen/sources/synthetic_source.cpp +0 -94
  1243. terraingenpy-0.2.0.dev90/terraingen/sources/synthetic_source.h +0 -122
  1244. terraingenpy-0.2.0.dev90/terraingen/sources/upsampling.cpp +0 -334
  1245. terraingenpy-0.2.0.dev90/terraingen/sources/upsampling.h +0 -247
  1246. terraingenpy-0.2.0.dev90/terraingen/terraingen.h +0 -157
  1247. terraingenpy-0.2.0.dev90/terraingen/util/CMakeLists.txt +0 -21
  1248. terraingenpy-0.2.0.dev90/terraingen/util/arithmetic.h +0 -26
  1249. terraingenpy-0.2.0.dev90/terraingen/util/bisection.h +0 -38
  1250. terraingenpy-0.2.0.dev90/terraingen/util/bits.h +0 -31
  1251. terraingenpy-0.2.0.dev90/terraingen/util/cells.h +0 -212
  1252. terraingenpy-0.2.0.dev90/terraingen/util/checks.cpp +0 -48
  1253. terraingenpy-0.2.0.dev90/terraingen/util/cube_sphere_cells.cpp +0 -394
  1254. terraingenpy-0.2.0.dev90/terraingen/util/fft.cpp +0 -77
  1255. terraingenpy-0.2.0.dev90/terraingen/util/files.cpp +0 -35
  1256. terraingenpy-0.2.0.dev90/terraingen/util/files.h +0 -21
  1257. terraingenpy-0.2.0.dev90/terraingen/util/log.cpp +0 -127
  1258. terraingenpy-0.2.0.dev90/terraingen/util/lru_cache.h +0 -134
  1259. terraingenpy-0.2.0.dev90/terraingen/util/planar_cells.cpp +0 -65
  1260. terraingenpy-0.2.0.dev90/terraingen/util/portable.h +0 -57
  1261. terraingenpy-0.2.0.dev90/terraingen/util/quadrature.h +0 -27
  1262. terraingenpy-0.2.0.dev90/terraingen/util/radial_shape.cpp +0 -146
  1263. terraingenpy-0.2.0.dev90/terraingen/util/span.h +0 -129
  1264. terraingenpy-0.2.0.dev90/terraingen/util/surface.cpp +0 -336
  1265. terraingenpy-0.2.0.dev90/terraingen/util/surface.h +0 -233
  1266. terraingenpy-0.2.0.dev90/terraingen/util/text.cpp +0 -32
  1267. terraingenpy-0.2.0.dev90/terraingen/util/text.h +0 -25
  1268. terraingenpy-0.2.0.dev90/tests/CMakeLists.txt +0 -53
  1269. terraingenpy-0.2.0.dev90/tests/benchmark/CMakeLists.txt +0 -32
  1270. terraingenpy-0.2.0.dev90/tests/benchmark/bench_grids.cpp +0 -89
  1271. terraingenpy-0.2.0.dev90/tests/benchmark/bench_python_subclasses.py +0 -146
  1272. terraingenpy-0.2.0.dev90/tests/benchmark/fixtures.h +0 -44
  1273. terraingenpy-0.2.0.dev90/tests/golden/noise/kernels_test.cpp +0 -103
  1274. terraingenpy-0.2.0.dev90/tests/integration/build_info_stable.cmake +0 -68
  1275. terraingenpy-0.2.0.dev90/tests/integration/package/main.cpp +0 -33
  1276. terraingenpy-0.2.0.dev90/tests/python/CMakeLists.txt +0 -15
  1277. terraingenpy-0.2.0.dev90/tests/python/conftest.py +0 -230
  1278. terraingenpy-0.2.0.dev90/tests/python/test_albedo.py +0 -317
  1279. terraingenpy-0.2.0.dev90/tests/python/test_boulders.py +0 -499
  1280. terraingenpy-0.2.0.dev90/tests/python/test_config.py +0 -367
  1281. terraingenpy-0.2.0.dev90/tests/python/test_craters.py +0 -635
  1282. terraingenpy-0.2.0.dev90/tests/python/test_docs_gallery.py +0 -103
  1283. terraingenpy-0.2.0.dev90/tests/python/test_docs_snippets.py +0 -16
  1284. terraingenpy-0.2.0.dev90/tests/python/test_layers.py +0 -801
  1285. terraingenpy-0.2.0.dev90/tests/python/test_noise.py +0 -265
  1286. terraingenpy-0.2.0.dev90/tests/python/test_pipeline.py +0 -396
  1287. terraingenpy-0.2.0.dev90/tests/python/test_raster.py +0 -256
  1288. terraingenpy-0.2.0.dev90/tests/python/test_render.py +0 -152
  1289. terraingenpy-0.2.0.dev90/tests/python/test_report.py +0 -107
  1290. terraingenpy-0.2.0.dev90/tests/python/test_sources.py +0 -378
  1291. terraingenpy-0.2.0.dev90/tests/support/apply_crater.h +0 -23
  1292. terraingenpy-0.2.0.dev90/tests/support/referenced_source.h +0 -44
  1293. terraingenpy-0.2.0.dev90/tests/support/resample.h +0 -46
  1294. terraingenpy-0.2.0.dev90/tests/support/source_agreement.h +0 -48
  1295. terraingenpy-0.2.0.dev90/tests/unit/albedo/albedo_test.cpp +0 -407
  1296. terraingenpy-0.2.0.dev90/tests/unit/albedo/bands_test.cpp +0 -100
  1297. terraingenpy-0.2.0.dev90/tests/unit/app/CMakeLists.txt +0 -6
  1298. terraingenpy-0.2.0.dev90/tests/unit/app/cli_test.cpp +0 -290
  1299. terraingenpy-0.2.0.dev90/tests/unit/app/gui/CMakeLists.txt +0 -12
  1300. terraingenpy-0.2.0.dev90/tests/unit/app/gui/config_editor_test.cpp +0 -188
  1301. terraingenpy-0.2.0.dev90/tests/unit/app/gui/gui_app_test.cpp +0 -174
  1302. terraingenpy-0.2.0.dev90/tests/unit/app/gui/terrain_scene_test.cpp +0 -92
  1303. terraingenpy-0.2.0.dev90/tests/unit/config/angles_test.cpp +0 -174
  1304. terraingenpy-0.2.0.dev90/tests/unit/config/build_test.cpp +0 -1220
  1305. terraingenpy-0.2.0.dev90/tests/unit/config/checks_test.cpp +0 -61
  1306. terraingenpy-0.2.0.dev90/tests/unit/config/config_test.cpp +0 -152
  1307. terraingenpy-0.2.0.dev90/tests/unit/config/configs.h +0 -310
  1308. terraingenpy-0.2.0.dev90/tests/unit/config/feature_lists_test.cpp +0 -165
  1309. terraingenpy-0.2.0.dev90/tests/unit/config/generate_from_config_test.cpp +0 -1015
  1310. terraingenpy-0.2.0.dev90/tests/unit/config/json_io_test.cpp +0 -992
  1311. terraingenpy-0.2.0.dev90/tests/unit/config/json_parse_errors_test.cpp +0 -173
  1312. terraingenpy-0.2.0.dev90/tests/unit/config/json_read_test.cpp +0 -251
  1313. terraingenpy-0.2.0.dev90/tests/unit/config/ranges_test.cpp +0 -184
  1314. terraingenpy-0.2.0.dev90/tests/unit/config/schema_test.cpp +0 -613
  1315. terraingenpy-0.2.0.dev90/tests/unit/config/validate_config_test.cpp +0 -1176
  1316. terraingenpy-0.2.0.dev90/tests/unit/config/validate_sources_test.cpp +0 -399
  1317. terraingenpy-0.2.0.dev90/tests/unit/config/write_outputs_test.cpp +0 -464
  1318. terraingenpy-0.2.0.dev90/tests/unit/distribution/composition_test.cpp +0 -153
  1319. terraingenpy-0.2.0.dev90/tests/unit/docs/CMakeLists.txt +0 -6
  1320. terraingenpy-0.2.0.dev90/tests/unit/gpu/backend_test.cpp +0 -193
  1321. terraingenpy-0.2.0.dev90/tests/unit/gpu/kernels/noise_conformance.slang +0 -63
  1322. terraingenpy-0.2.0.dev90/tests/unit/gpu/noise_test.cpp +0 -176
  1323. terraingenpy-0.2.0.dev90/tests/unit/gpu/vulkan_test.cpp +0 -158
  1324. terraingenpy-0.2.0.dev90/tests/unit/layers/CMakeLists.txt +0 -64
  1325. terraingenpy-0.2.0.dev90/tests/unit/layers/boulders/boulder_fragments_test.cpp +0 -318
  1326. terraingenpy-0.2.0.dev90/tests/unit/layers/boulders/boulder_options_test.cpp +0 -121
  1327. terraingenpy-0.2.0.dev90/tests/unit/layers/craters/crater_layer_test.cpp +0 -370
  1328. terraingenpy-0.2.0.dev90/tests/unit/layers/craters/crater_test.cpp +0 -154
  1329. terraingenpy-0.2.0.dev90/tests/unit/layers/craters/generation/cell_cache_test.cpp +0 -98
  1330. terraingenpy-0.2.0.dev90/tests/unit/layers/craters/generation/population_test.cpp +0 -704
  1331. terraingenpy-0.2.0.dev90/tests/unit/layers/craters/shaping/apply_test.cpp +0 -669
  1332. terraingenpy-0.2.0.dev90/tests/unit/layers/craters/shaping/resolved_state_test.cpp +0 -276
  1333. terraingenpy-0.2.0.dev90/tests/unit/layers/lattice_test.cpp +0 -34
  1334. terraingenpy-0.2.0.dev90/tests/unit/layers/noise_relief_test.cpp +0 -305
  1335. terraingenpy-0.2.0.dev90/tests/unit/layers/prefetched_ground_test.cpp +0 -151
  1336. terraingenpy-0.2.0.dev90/tests/unit/layers/roughness_estimate_test.cpp +0 -219
  1337. terraingenpy-0.2.0.dev90/tests/unit/layers/source_resolved_test.cpp +0 -257
  1338. terraingenpy-0.2.0.dev90/tests/unit/layers/spectral_continuation_test.cpp +0 -248
  1339. terraingenpy-0.2.0.dev90/tests/unit/layers/sphere_layers_test.cpp +0 -221
  1340. terraingenpy-0.2.0.dev90/tests/unit/mesh/io/mesh_io_test.cpp +0 -222
  1341. terraingenpy-0.2.0.dev90/tests/unit/noise/CMakeLists.txt +0 -18
  1342. terraingenpy-0.2.0.dev90/tests/unit/noise/noise3_test.cpp +0 -293
  1343. terraingenpy-0.2.0.dev90/tests/unit/noise/noise_layers_test.cpp +0 -129
  1344. terraingenpy-0.2.0.dev90/tests/unit/noise/perlin_test.cpp +0 -186
  1345. terraingenpy-0.2.0.dev90/tests/unit/noise/surface_noise_test.cpp +0 -29
  1346. terraingenpy-0.2.0.dev90/tests/unit/noise/validate_test.cpp +0 -80
  1347. terraingenpy-0.2.0.dev90/tests/unit/pipeline/features_test.cpp +0 -234
  1348. terraingenpy-0.2.0.dev90/tests/unit/pipeline/generator_test.cpp +0 -596
  1349. terraingenpy-0.2.0.dev90/tests/unit/pipeline/materials_test.cpp +0 -165
  1350. terraingenpy-0.2.0.dev90/tests/unit/pipeline/report_test.cpp +0 -320
  1351. terraingenpy-0.2.0.dev90/tests/unit/pipeline/terrain_windows_test.cpp +0 -281
  1352. terraingenpy-0.2.0.dev90/tests/unit/pipeline/terrains.h +0 -61
  1353. terraingenpy-0.2.0.dev90/tests/unit/raster/cell_loops_test.cpp +0 -152
  1354. terraingenpy-0.2.0.dev90/tests/unit/raster/geotiff_test.cpp +0 -516
  1355. terraingenpy-0.2.0.dev90/tests/unit/raster/raster_stats_test.cpp +0 -61
  1356. terraingenpy-0.2.0.dev90/tests/unit/raster/raster_test.cpp +0 -88
  1357. terraingenpy-0.2.0.dev90/tests/unit/raster/resample_test.cpp +0 -252
  1358. terraingenpy-0.2.0.dev90/tests/unit/raster/spectrum_test.cpp +0 -178
  1359. terraingenpy-0.2.0.dev90/tests/unit/raster/tiff_format_test.cpp +0 -144
  1360. terraingenpy-0.2.0.dev90/tests/unit/sources/CMakeLists.txt +0 -16
  1361. terraingenpy-0.2.0.dev90/tests/unit/sources/diamond_square_test.cpp +0 -623
  1362. terraingenpy-0.2.0.dev90/tests/unit/sources/field_test.cpp +0 -146
  1363. terraingenpy-0.2.0.dev90/tests/unit/sources/geotiff_source_test.cpp +0 -458
  1364. terraingenpy-0.2.0.dev90/tests/unit/sources/raster_source_test.cpp +0 -305
  1365. terraingenpy-0.2.0.dev90/tests/unit/sources/source_chain_test.cpp +0 -502
  1366. terraingenpy-0.2.0.dev90/tests/unit/sources/synthetic_source_test.cpp +0 -171
  1367. terraingenpy-0.2.0.dev90/tests/unit/sources/upsampling_test.cpp +0 -290
  1368. terraingenpy-0.2.0.dev90/tests/unit/util/arithmetic_test.cpp +0 -25
  1369. terraingenpy-0.2.0.dev90/tests/unit/util/bisection_test.cpp +0 -31
  1370. terraingenpy-0.2.0.dev90/tests/unit/util/cells_test.cpp +0 -89
  1371. terraingenpy-0.2.0.dev90/tests/unit/util/checks_test.cpp +0 -65
  1372. terraingenpy-0.2.0.dev90/tests/unit/util/fft_test.cpp +0 -87
  1373. terraingenpy-0.2.0.dev90/tests/unit/util/files_test.cpp +0 -32
  1374. terraingenpy-0.2.0.dev90/tests/unit/util/lru_cache_test.cpp +0 -38
  1375. terraingenpy-0.2.0.dev90/tests/unit/util/overloaded_test.cpp +0 -19
  1376. terraingenpy-0.2.0.dev90/tests/unit/util/quadrature_test.cpp +0 -35
  1377. terraingenpy-0.2.0.dev90/tests/unit/util/surface_test.cpp +0 -725
  1378. terraingenpy-0.2.0.dev90/tests/unit/util/text_test.cpp +0 -26
  1379. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.clang-format +0 -0
  1380. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.clang-tidy +0 -0
  1381. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.cmake-format.yaml +0 -0
  1382. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.dockerignore +0 -0
  1383. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.gitattributes +0 -0
  1384. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  1385. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  1386. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  1387. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.github/pull_request_template.md +0 -0
  1388. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.github/scripts/install-lavapipe-windows.sh +0 -0
  1389. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.github/workflows/ci.yml +0 -0
  1390. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/.gitignore +0 -0
  1391. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/CITATION.cff +0 -0
  1392. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/Dockerfile +0 -0
  1393. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/LICENSE +0 -0
  1394. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/BuildInfo.cmake +0 -0
  1395. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/CoverageBadge.cmake +0 -0
  1396. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/EmbedFile.cmake +0 -0
  1397. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/Kernel.cpp.in +0 -0
  1398. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/TerrainGenPackaging.cmake +0 -0
  1399. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/terraingenConfig.cmake.in +0 -0
  1400. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/benchmark.cmake +0 -0
  1401. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/googletest.cmake +0 -0
  1402. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/mesh_formats.cmake +0 -0
  1403. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/miniz.cmake +0 -0
  1404. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/nanobind.cmake +0 -0
  1405. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/nvrtc.cmake +0 -0
  1406. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/slang.cmake +0 -0
  1407. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/volk.cmake +0 -0
  1408. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/cmake/third_party/vulkan_headers.cmake +0 -0
  1409. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/Makefile +0 -0
  1410. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/README.md +0 -0
  1411. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/api/cpp.md +0 -0
  1412. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/api/python.md +0 -0
  1413. {terraingenpy-0.2.0.dev90/docs/_src/reference → terraingenpy-0.2.0.dev111/docs/_src}/changelog.md +0 -0
  1414. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/concepts/configuration.md +0 -0
  1415. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/concepts/evaluation.md +0 -0
  1416. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/concepts/gpu.md +0 -0
  1417. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/concepts/index.md +0 -0
  1418. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/concepts/layers.md +0 -0
  1419. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/concepts/sources.md +0 -0
  1420. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/concepts/surfaces.md +0 -0
  1421. {terraingenpy-0.2.0.dev90/docs/_src/guides → terraingenpy-0.2.0.dev111/docs/_src}/contributing.md +0 -0
  1422. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/base-maps.md +0 -0
  1423. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/blast-zones.md +0 -0
  1424. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/crater-rays.md +0 -0
  1425. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/index.md +0 -0
  1426. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/photometry.md +0 -0
  1427. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/reflectance-zones.md +0 -0
  1428. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/rocks.md +0 -0
  1429. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/slopes.md +0 -0
  1430. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/albedo/splotches.md +0 -0
  1431. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/boulders/burial-and-exposure.md +0 -0
  1432. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/boulders/fragmentation.md +0 -0
  1433. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/boulders/index.md +0 -0
  1434. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/boulders/lists-and-meshes.md +0 -0
  1435. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/boulders/placement.md +0 -0
  1436. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/boulders/shapes.md +0 -0
  1437. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/boulders/size-distributions.md +0 -0
  1438. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/ages.md +0 -0
  1439. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/crater-lists.md +0 -0
  1440. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/degradation.md +0 -0
  1441. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/index.md +0 -0
  1442. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/irregularity.md +0 -0
  1443. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/placement-and-blending.md +0 -0
  1444. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/populations.md +0 -0
  1445. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/profiles.md +0 -0
  1446. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/secondaries-and-rays.md +0 -0
  1447. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/craters/texture-and-slopes.md +0 -0
  1448. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/chronology.md +0 -0
  1449. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/combining.md +0 -0
  1450. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/equilibrium.md +0 -0
  1451. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/index.md +0 -0
  1452. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/production.md +0 -0
  1453. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/sampling.md +0 -0
  1454. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/size-frequency.md +0 -0
  1455. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/distributions/value-distributions.md +0 -0
  1456. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/geology/bedforms.md +0 -0
  1457. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/geology/dunes.md +0 -0
  1458. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/geology/index.md +0 -0
  1459. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/geology/pavement.md +0 -0
  1460. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/geology/sand.md +0 -0
  1461. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/geology/strata.md +0 -0
  1462. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/index.md +0 -0
  1463. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/outputs.md +0 -0
  1464. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/relief/index.md +0 -0
  1465. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/relief/noise.md +0 -0
  1466. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/relief/roughness.md +0 -0
  1467. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/relief/spectral-continuation.md +0 -0
  1468. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/features/relief/upsampling.md +0 -0
  1469. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/gallery/index.md +0 -0
  1470. {terraingenpy-0.2.0.dev90/docs/_src/guides → terraingenpy-0.2.0.dev111/docs/_src/guides/tools}/gui.md +0 -0
  1471. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/blast_zones.jpg +0 -0
  1472. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/crater_rays.jpg +0 -0
  1473. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/oblique_impacts.jpg +0 -0
  1474. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/reflectance_zones.jpg +0 -0
  1475. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/rocks.jpg +0 -0
  1476. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/slopes.jpg +0 -0
  1477. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/splotches.jpg +0 -0
  1478. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/albedo/synthetic_base.jpg +0 -0
  1479. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/clustering.jpg +0 -0
  1480. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/crater_ejecta_aging.jpg +0 -0
  1481. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/crater_ejecta_coverage.jpg +0 -0
  1482. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/crater_ejecta_decay.jpg +0 -0
  1483. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/crater_ejecta_floor.jpg +0 -0
  1484. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/crater_ejecta_profiles.jpg +0 -0
  1485. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/crater_ejecta_reach.jpg +0 -0
  1486. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/crater_ejecta_regolith.jpg +0 -0
  1487. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/density_map.jpg +0 -0
  1488. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/fillets.jpg +0 -0
  1489. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_axes.jpg +0 -0
  1490. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_fractures.jpg +0 -0
  1491. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_fragments.jpg +0 -0
  1492. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_noise.jpg +0 -0
  1493. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_rounding.jpg +0 -0
  1494. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_settle.jpg +0 -0
  1495. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_solids.jpg +0 -0
  1496. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_styles.jpg +0 -0
  1497. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_variety.jpg +0 -0
  1498. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/models_weathering.jpg +0 -0
  1499. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/patches.jpg +0 -0
  1500. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/pose_burial.jpg +0 -0
  1501. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/pose_burial_by_wear.jpg +0 -0
  1502. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/pose_height_ratio.jpg +0 -0
  1503. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/size_distributions.jpg +0 -0
  1504. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/slope_map.jpg +0 -0
  1505. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/boulders/slopes.jpg +0 -0
  1506. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/ages.jpg +0 -0
  1507. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/aristarchus.jpg +0 -0
  1508. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/blend_shapes.jpg +0 -0
  1509. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/catalog_completeness.jpg +0 -0
  1510. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/complex_craters.jpg +0 -0
  1511. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/complex_profiles.jpg +0 -0
  1512. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/copernicus.jpg +0 -0
  1513. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/datum.jpg +0 -0
  1514. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/datum_profiles.jpg +0 -0
  1515. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/default_field.jpg +0 -0
  1516. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/degradation_by_age.jpg +0 -0
  1517. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/degradation_by_diffusion.jpg +0 -0
  1518. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/degradation_by_freshness.jpg +0 -0
  1519. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/density_map.jpg +0 -0
  1520. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/density_map_areal_fraction.jpg +0 -0
  1521. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/density_map_count.jpg +0 -0
  1522. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/density_map_scale.jpg +0 -0
  1523. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/depth_ratio.jpg +0 -0
  1524. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/elongation.jpg +0 -0
  1525. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/elongation_and_roughness.jpg +0 -0
  1526. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/freshness_vs_diffusion.jpg +0 -0
  1527. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/freshness_vs_diffusion_maps.jpg +0 -0
  1528. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/interior_replacement.jpg +0 -0
  1529. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/irregularity.jpg +0 -0
  1530. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/irregularity_harmonics.jpg +0 -0
  1531. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/irregularity_models.jpg +0 -0
  1532. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/irregularity_spectral_slope.jpg +0 -0
  1533. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/manual_depth.jpg +0 -0
  1534. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/max_craters.jpg +0 -0
  1535. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks.jpg +0 -0
  1536. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks_elongation.jpg +0 -0
  1537. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks_massifs.jpg +0 -0
  1538. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks_roughness.jpg +0 -0
  1539. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks_seeds.jpg +0 -0
  1540. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks_sharpness.jpg +0 -0
  1541. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks_size.jpg +0 -0
  1542. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/peaks_spread.jpg +0 -0
  1543. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/populations.jpg +0 -0
  1544. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/profiles.jpg +0 -0
  1545. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/radial_marks.jpg +0 -0
  1546. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/resolution_fade.jpg +0 -0
  1547. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/rim_models.jpg +0 -0
  1548. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/rim_smoothing.jpg +0 -0
  1549. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/secondaries.jpg +0 -0
  1550. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/secondary_shapes.jpg +0 -0
  1551. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/slope_floor_offset.jpg +0 -0
  1552. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/slope_hillside.jpg +0 -0
  1553. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/slope_response.jpg +0 -0
  1554. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/slope_upslope_rim.jpg +0 -0
  1555. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/slope_wear.jpg +0 -0
  1556. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/source_resolved.jpg +0 -0
  1557. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/spacing_both.jpg +0 -0
  1558. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/spacing_ratio.jpg +0 -0
  1559. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/spacing_separation.jpg +0 -0
  1560. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces.jpg +0 -0
  1561. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_arcs.jpg +0 -0
  1562. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_bench_slope.jpg +0 -0
  1563. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_benches.jpg +0 -0
  1564. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_blocks.jpg +0 -0
  1565. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_freshness.jpg +0 -0
  1566. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_gaps.jpg +0 -0
  1567. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_onset.jpg +0 -0
  1568. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_rim_variation.jpg +0 -0
  1569. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_scarps.jpg +0 -0
  1570. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/terraces_seeds.jpg +0 -0
  1571. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/texture_ejecta.jpg +0 -0
  1572. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/texture_gullies.jpg +0 -0
  1573. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/texture_mantling.jpg +0 -0
  1574. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/texture_noise.jpg +0 -0
  1575. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/texture_rim_noise.jpg +0 -0
  1576. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/theophilus.jpg +0 -0
  1577. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/craters/tycho.jpg +0 -0
  1578. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/dem/craters_added.jpg +0 -0
  1579. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/dem/globe.jpg +0 -0
  1580. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/dem/noise_added.jpg +0 -0
  1581. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/dem/upsampling.jpg +0 -0
  1582. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/chronology.jpg +0 -0
  1583. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/combining.jpg +0 -0
  1584. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/crater_densities.jpg +0 -0
  1585. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/literature_boulders.jpg +0 -0
  1586. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/literature_craters.jpg +0 -0
  1587. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/piecewise.jpg +0 -0
  1588. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/power_laws.jpg +0 -0
  1589. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/sampling.jpg +0 -0
  1590. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/distributions/value_distributions.jpg +0 -0
  1591. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/bedforms_ripples.jpg +0 -0
  1592. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/bedforms_tars.jpg +0 -0
  1593. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/dune_shapes.jpg +0 -0
  1594. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/dunes_barchan_winds.jpg +0 -0
  1595. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/dunes_crest_lines.jpg +0 -0
  1596. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/dunes_grainflows.jpg +0 -0
  1597. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/dunes_ripples.jpg +0 -0
  1598. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/exposure.jpg +0 -0
  1599. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/pavement.jpg +0 -0
  1600. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/sand_fill.jpg +0 -0
  1601. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/sand_shadows.jpg +0 -0
  1602. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/geology/strata.jpg +0 -0
  1603. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/layers/masked.jpg +0 -0
  1604. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/layers/masked_craters_boulders.jpg +0 -0
  1605. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/layers/masked_polygon.jpg +0 -0
  1606. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/layers/masked_polygon_craters_boulders.jpg +0 -0
  1607. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/layers/scale_and_clamp.jpg +0 -0
  1608. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/outputs/materials.jpg +0 -0
  1609. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/planets/ellipsoid_craters.jpg +0 -0
  1610. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/planets/ellipsoid_projection.jpg +0 -0
  1611. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/planets/mars_scene.jpg +0 -0
  1612. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/planets/moon_scene.jpg +0 -0
  1613. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/queries/rover_traverse.jpg +0 -0
  1614. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_blending.jpg +0 -0
  1615. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_gain.jpg +0 -0
  1616. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_lacunarity.jpg +0 -0
  1617. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_octaves.jpg +0 -0
  1618. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_perlin.jpg +0 -0
  1619. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_simplex.jpg +0 -0
  1620. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_value.jpg +0 -0
  1621. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_warp.jpg +0 -0
  1622. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/noise_worley.jpg +0 -0
  1623. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/roughness_lunar.jpg +0 -0
  1624. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/spectral_continuation.jpg +0 -0
  1625. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/upsampling.jpg +0 -0
  1626. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/upsampling_diamond_square.jpg +0 -0
  1627. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/relief/upsampling_synthetic.jpg +0 -0
  1628. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gallery/sources/chain.jpg +0 -0
  1629. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/gdomes_viper_rover.jpg +0 -0
  1630. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/hero_mk1_sn101_connecting_ridge.jpg +0 -0
  1631. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/hero_mk1_sn101_connecting_ridge_split.jpg +0 -0
  1632. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/render_connecting_ridge_crater.jpg +0 -0
  1633. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/images/render_connecting_ridge_ground.jpg +0 -0
  1634. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/_src/reference/bibliography.md +0 -0
  1635. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/overrides/js/katex.js +0 -0
  1636. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/overrides/partials/header.html +0 -0
  1637. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/overrides/partials/languages/custom.html +0 -0
  1638. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/docs/requirements.txt +0 -0
  1639. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/albedo/blast_zones.h +0 -0
  1640. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/albedo/crater_albedo.h +0 -0
  1641. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/albedo/crater_albedo_options.h +0 -0
  1642. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/albedo/photometry.h +0 -0
  1643. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/albedo/slope_albedo.h +0 -0
  1644. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/equilibrium.h +0 -0
  1645. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/ivanov.h +0 -0
  1646. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/minimum.h +0 -0
  1647. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/moore.h +0 -0
  1648. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/neukum.h +0 -0
  1649. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/power_law.h +0 -0
  1650. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/sp8023.h +0 -0
  1651. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/summed.h +0 -0
  1652. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/synthterrain.h +0 -0
  1653. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/distribution/viper.h +0 -0
  1654. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/gpu/backend.h +0 -0
  1655. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/gpu/program.h +0 -0
  1656. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/boulders/boulder_abundance.h +0 -0
  1657. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/boulders/boulder_models.h +0 -0
  1658. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/boulders/boulder_placer.h +0 -0
  1659. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/ages/age_model.h +0 -0
  1660. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/ages/freshness_ages.h +0 -0
  1661. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/band_buckets.h +0 -0
  1662. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/degradation/degradation_model.h +0 -0
  1663. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/degradation/freshness_degradation.h +0 -0
  1664. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/degradation/state.h +0 -0
  1665. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/generation/spacing.h +0 -0
  1666. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/profiles/complex.h +0 -0
  1667. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/profiles/martin_parkes_dunstan.h +0 -0
  1668. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/profiles/profile.h +0 -0
  1669. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/rays.h +0 -0
  1670. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/shaping/attributes.h +0 -0
  1671. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/craters/shaping/morphometry.h +0 -0
  1672. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/fade.h +0 -0
  1673. {terraingenpy-0.2.0.dev90/terraingen/sources → terraingenpy-0.2.0.dev111/include/terraingen/layers}/field.h +0 -0
  1674. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/ground.h +0 -0
  1675. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/kernels/cell.h +0 -0
  1676. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/material.h +0 -0
  1677. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/sample_block.h +0 -0
  1678. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/sand_shadow.h +0 -0
  1679. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/spectral_continuation.h +0 -0
  1680. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/layers/transforms.h +0 -0
  1681. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/mesh/mesh.h +0 -0
  1682. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/noise/hash.h +0 -0
  1683. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/noise/structure_function.h +0 -0
  1684. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/noise/value.h +0 -0
  1685. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/pipeline/body_mesh.h +0 -0
  1686. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/pipeline/mesh_build.h +0 -0
  1687. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/random/philox.h +0 -0
  1688. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/random/samplers.h +0 -0
  1689. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/random/stream.h +0 -0
  1690. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/random/streams.h +0 -0
  1691. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/raster/geo_transform.h +0 -0
  1692. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/sources/terrain_base.h +0 -0
  1693. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/util/build_info.h +0 -0
  1694. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/util/geometry.h +0 -0
  1695. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/util/log.h +0 -0
  1696. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/util/parallel.h +0 -0
  1697. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/util/plane_fit.h +0 -0
  1698. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/util/radial_shape.h +0 -0
  1699. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111/include}/terraingen/util/special_functions.h +0 -0
  1700. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/arrays.h +0 -0
  1701. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/bindings.h +0 -0
  1702. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/casters.h +0 -0
  1703. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/chain_seams.cpp +0 -0
  1704. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/common.h +0 -0
  1705. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/crater_models.cpp +0 -0
  1706. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/distribution.cpp +0 -0
  1707. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/gpu.cpp +0 -0
  1708. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/mesh.cpp +0 -0
  1709. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/module.cpp +0 -0
  1710. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/objects.h +0 -0
  1711. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/random.cpp +0 -0
  1712. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/report.cpp +0 -0
  1713. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/src/util.cpp +0 -0
  1714. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111}/python/terraingen/__init__.py +0 -0
  1715. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/albedo/CMakeLists.txt +0 -0
  1716. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/albedo/bands.h +0 -0
  1717. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/albedo/photometry.cpp +0 -0
  1718. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/albedo/zone_shadows.h +0 -0
  1719. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/config/CMakeLists.txt +0 -0
  1720. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/config/fields/checks.h +0 -0
  1721. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/CMakeLists.txt +0 -0
  1722. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/composition.h +0 -0
  1723. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/equilibrium.cpp +0 -0
  1724. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/ivanov.cpp +0 -0
  1725. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/moore.cpp +0 -0
  1726. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/neukum.cpp +0 -0
  1727. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/production_surface.cpp +0 -0
  1728. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/sp8023.cpp +0 -0
  1729. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/synthterrain.cpp +0 -0
  1730. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/distribution/viper.cpp +0 -0
  1731. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/gpu/CMakeLists.txt +0 -0
  1732. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/gpu/device.h +0 -0
  1733. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/gpu/kernel.h +0 -0
  1734. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/gpu/kernel.slang +0 -0
  1735. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/anchored_plane.cpp +0 -0
  1736. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/boulders/boulder.cpp +0 -0
  1737. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/boulders/boulder_clusters.h +0 -0
  1738. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/boulders/boulder_fragments.cpp +0 -0
  1739. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/boulders/boulder_pose.cpp +0 -0
  1740. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/boulders/ejecta_index.cpp +0 -0
  1741. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/craters/degradation/diffusivities.cpp +0 -0
  1742. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/craters/degradation/freshness_degradation.cpp +0 -0
  1743. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/craters/profiles/fassett_thomson.cpp +0 -0
  1744. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/craters/profiles/martin_parkes_dunstan.cpp +0 -0
  1745. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/craters/rays.cpp +0 -0
  1746. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/craters/shaping/crater_kernel.h +0 -0
  1747. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/fade.cpp +0 -0
  1748. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/ground.cpp +0 -0
  1749. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/lattice.h +0 -0
  1750. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/material.cpp +0 -0
  1751. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/sample_block.cpp +0 -0
  1752. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/layers/transforms.cpp +0 -0
  1753. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/mesh/CMakeLists.txt +0 -0
  1754. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/mesh/polyhedra.cpp +0 -0
  1755. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/noise/structure_function.cpp +0 -0
  1756. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/pipeline/CMakeLists.txt +0 -0
  1757. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/random/CMakeLists.txt +0 -0
  1758. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/random/samplers.cpp +0 -0
  1759. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/random/stream.cpp +0 -0
  1760. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/raster/CMakeLists.txt +0 -0
  1761. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/raster/geotiff/tiff_codecs.h +0 -0
  1762. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/build_info.cpp.in +0 -0
  1763. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/checks.h +0 -0
  1764. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/cube_faces.h +0 -0
  1765. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/fft.h +0 -0
  1766. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/overloaded.h +0 -0
  1767. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/parallel.cpp +0 -0
  1768. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/plane_fit.cpp +0 -0
  1769. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/special_functions.cpp +0 -0
  1770. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/version.cpp +0 -0
  1771. {terraingenpy-0.2.0.dev90/terraingen → terraingenpy-0.2.0.dev111/src}/util/version.h.in +0 -0
  1772. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/benchmark/bench_boulders.cpp +0 -0
  1773. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/benchmark/bench_craters.cpp +0 -0
  1774. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/benchmark/bench_ground_reads.cpp +0 -0
  1775. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/benchmark/bench_point_queries.cpp +0 -0
  1776. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/golden/CMakeLists.txt +0 -0
  1777. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/integration/CMakeLists.txt +0 -0
  1778. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/integration/package/CMakeLists.txt +0 -0
  1779. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/integration/package/test_debian_packages.cmake +0 -0
  1780. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/python/test_crater_models.py +0 -0
  1781. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/python/test_distributions.py +0 -0
  1782. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/python/test_gpu.py +0 -0
  1783. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/python/test_meshes.py +0 -0
  1784. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/python/test_random.py +0 -0
  1785. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/python/test_stubs.py +0 -0
  1786. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/python/test_util.py +0 -0
  1787. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/CMakeLists.txt +0 -0
  1788. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/distribution/crater_references_test.cpp +0 -0
  1789. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/distribution/size_frequency_test.cpp +0 -0
  1790. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/layers/boulders/boulder_layer_test.cpp +0 -0
  1791. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/layers/craters/ages/ages_test.cpp +0 -0
  1792. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/layers/craters/population_test.cpp +0 -0
  1793. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/layers/roughness_test.cpp +0 -0
  1794. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/statistical/random/random_test.cpp +0 -0
  1795. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/boulder_records.h +0 -0
  1796. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/gdal_fixtures.h +0 -0
  1797. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/generate_geotiff_fixtures.py +0 -0
  1798. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/geotiff_fixtures.inc +0 -0
  1799. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/golombek_rapp.h +0 -0
  1800. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/log_capture.h +0 -0
  1801. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/lunar_craters.h +0 -0
  1802. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/mesh_checks.h +0 -0
  1803. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/mesh_measures.h +0 -0
  1804. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/raster_equality.h +0 -0
  1805. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/sfd_sampling.h +0 -0
  1806. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/statistics.h +0 -0
  1807. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/support/temp_path.h +0 -0
  1808. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/CMakeLists.txt +0 -0
  1809. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/albedo/CMakeLists.txt +0 -0
  1810. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/albedo/blast_zones_test.cpp +0 -0
  1811. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/albedo/crater_albedo_test.cpp +0 -0
  1812. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/albedo/photometry_test.cpp +0 -0
  1813. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/albedo/rock_albedo_test.cpp +0 -0
  1814. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/albedo/slope_albedo_test.cpp +0 -0
  1815. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/albedo/splotches_test.cpp +0 -0
  1816. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/config/CMakeLists.txt +0 -0
  1817. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/CMakeLists.txt +0 -0
  1818. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/equilibrium_test.cpp +0 -0
  1819. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/golombek_rapp_test.cpp +0 -0
  1820. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/ivanov_test.cpp +0 -0
  1821. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/log_polynomial_test.cpp +0 -0
  1822. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/minimum_test.cpp +0 -0
  1823. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/moore_test.cpp +0 -0
  1824. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/neukum_test.cpp +0 -0
  1825. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/piecewise_power_law_test.cpp +0 -0
  1826. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/piecewise_uniform_test.cpp +0 -0
  1827. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/power_law_test.cpp +0 -0
  1828. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/production_surface_test.cpp +0 -0
  1829. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/size_frequency_test.cpp +0 -0
  1830. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/sp8023_test.cpp +0 -0
  1831. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/spliced_test.cpp +0 -0
  1832. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/summed_test.cpp +0 -0
  1833. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/synthterrain_test.cpp +0 -0
  1834. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/tabulated_test.cpp +0 -0
  1835. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/distribution/viper_test.cpp +0 -0
  1836. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/gpu/CMakeLists.txt +0 -0
  1837. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/gpu/kernels/hash_conformance.slang +0 -0
  1838. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/anchored_plane_test.cpp +0 -0
  1839. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/bedforms_test.cpp +0 -0
  1840. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/boulders/boulder_layer_test.cpp +0 -0
  1841. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/boulders/boulder_list_test.cpp +0 -0
  1842. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/boulders/boulder_models_test.cpp +0 -0
  1843. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/boulders/boulder_shape_test.cpp +0 -0
  1844. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/boulders/ejecta_index_test.cpp +0 -0
  1845. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/boulders/manual_boulder_test.cpp +0 -0
  1846. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/ages/age_model_test.cpp +0 -0
  1847. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/ages/freshness_ages_test.cpp +0 -0
  1848. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/ages/steady_state_test.cpp +0 -0
  1849. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/band_buckets_test.cpp +0 -0
  1850. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/degradation/degradation_model_test.cpp +0 -0
  1851. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/degradation/diffusion_test.cpp +0 -0
  1852. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/degradation/freshness_degradation_test.cpp +0 -0
  1853. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/generation/spacing_test.cpp +0 -0
  1854. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/profiles/complex_test.cpp +0 -0
  1855. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/profiles/fassett_thomson_test.cpp +0 -0
  1856. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/profiles/martin_parkes_dunstan_test.cpp +0 -0
  1857. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/secondaries_test.cpp +0 -0
  1858. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/shaping/attributes_test.cpp +0 -0
  1859. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/shaping/crater_kernel_test.cpp +0 -0
  1860. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/shaping/datum_test.cpp +0 -0
  1861. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/shaping/irregularity_test.cpp +0 -0
  1862. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/shaping/morphometry_test.cpp +0 -0
  1863. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/shaping/slope_test.cpp +0 -0
  1864. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/craters/sphere_test.cpp +0 -0
  1865. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/density_map_test.cpp +0 -0
  1866. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/dunes_test.cpp +0 -0
  1867. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/evaluation_cache_test.cpp +0 -0
  1868. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/exposure_test.cpp +0 -0
  1869. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/fade_test.cpp +0 -0
  1870. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/ground_test.cpp +0 -0
  1871. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/layer_test.cpp +0 -0
  1872. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/masked_test.cpp +0 -0
  1873. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/pavement_test.cpp +0 -0
  1874. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/roughness_test.cpp +0 -0
  1875. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/sample_block_test.cpp +0 -0
  1876. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/sand_fill_test.cpp +0 -0
  1877. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/sand_shadow_test.cpp +0 -0
  1878. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/strata_test.cpp +0 -0
  1879. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/layers/transforms_test.cpp +0 -0
  1880. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/mesh/CMakeLists.txt +0 -0
  1881. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/mesh/io/icq_test.cpp +0 -0
  1882. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/mesh/mesh_test.cpp +0 -0
  1883. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/mesh/polyhedra_test.cpp +0 -0
  1884. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/mesh/shape_model_test.cpp +0 -0
  1885. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/noise/fractal_test.cpp +0 -0
  1886. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/noise/hash_test.cpp +0 -0
  1887. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/noise/simplex_test.cpp +0 -0
  1888. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/noise/structure_function_test.cpp +0 -0
  1889. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/noise/value_test.cpp +0 -0
  1890. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/noise/worley_test.cpp +0 -0
  1891. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/pipeline/CMakeLists.txt +0 -0
  1892. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/pipeline/ground_reads_test.cpp +0 -0
  1893. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/pipeline/mesh_build_test.cpp +0 -0
  1894. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/random/CMakeLists.txt +0 -0
  1895. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/random/philox_test.cpp +0 -0
  1896. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/random/samplers_test.cpp +0 -0
  1897. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/random/stream_test.cpp +0 -0
  1898. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/random/value_distribution_test.cpp +0 -0
  1899. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/raster/CMakeLists.txt +0 -0
  1900. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/raster/geo_transform_test.cpp +0 -0
  1901. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/raster/grid_test.cpp +0 -0
  1902. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/raster/variogram_test.cpp +0 -0
  1903. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/sources/flat_source_test.cpp +0 -0
  1904. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/sources/terrain_base_test.cpp +0 -0
  1905. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/CMakeLists.txt +0 -0
  1906. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/bits_test.cpp +0 -0
  1907. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/geometry_test.cpp +0 -0
  1908. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/log_test.cpp +0 -0
  1909. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/parallel_test.cpp +0 -0
  1910. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/plane_fit_test.cpp +0 -0
  1911. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/radial_shape_test.cpp +0 -0
  1912. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/span_test.cpp +0 -0
  1913. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/special_functions_test.cpp +0 -0
  1914. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/tests/unit/util/version_test.cpp +0 -0
  1915. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/README.md +0 -0
  1916. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/cgltf/LICENSE +0 -0
  1917. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/cgltf/cgltf.h +0 -0
  1918. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/cgltf/cgltf_write.h +0 -0
  1919. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/miniz/LICENSE +0 -0
  1920. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/miniz/miniz.c +0 -0
  1921. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/miniz/miniz.h +0 -0
  1922. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/nlohmann/LICENSE.MIT +0 -0
  1923. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/nlohmann/json.hpp +0 -0
  1924. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/tinyobjloader/LICENSE +0 -0
  1925. {terraingenpy-0.2.0.dev90 → terraingenpy-0.2.0.dev111}/third_party/tinyobjloader/tiny_obj_loader.h +0 -0
@@ -0,0 +1,66 @@
1
+ # Vendored code in third_party/ directories stays byte-identical to upstream.
2
+ exclude: (^|/)third_party/
3
+
4
+ repos:
5
+ - repo: https://github.com/pre-commit/pre-commit-hooks
6
+ rev: v6.0.0
7
+ hooks:
8
+ - id: trailing-whitespace
9
+ - id: end-of-file-fixer
10
+ - id: check-added-large-files
11
+ - id: check-merge-conflict
12
+ - id: check-case-conflict
13
+ - id: mixed-line-ending
14
+ args: ["--fix=lf"]
15
+
16
+ - repo: https://github.com/pre-commit/mirrors-clang-format
17
+ rev: v22.1.8
18
+ hooks:
19
+ - id: clang-format
20
+ types_or: [c++, c]
21
+ exclude: (^|/)third_party/
22
+
23
+ - repo: https://github.com/pocc/pre-commit-hooks
24
+ rev: v1.3.5
25
+ hooks:
26
+ - id: cppcheck
27
+ exclude: (^|/)third_party/
28
+ additional_dependencies: ["cppcheck==1.5.1"]
29
+ args:
30
+ - "--language=c++"
31
+ - "--std=c++17"
32
+ - "--enable=warning,performance,portability"
33
+ - "--suppress=missingInclude"
34
+ - "--include=include/terraingen/util/portable.h"
35
+ - "-U__SLANG__"
36
+ - "--suppress=passedByValue:include/terraingen/noise/*"
37
+ - "--suppress=normalCheckLevelMaxBranches"
38
+ - "--suppress=floatConversionOverflow:python/src/noise.cpp"
39
+ - "--suppress=floatConversionOverflow:python/src/mesh.cpp"
40
+ - "--suppress=assignBoolToPointer:python/src/*"
41
+ - "--suppress=syntaxError:src/gpu/metal.cpp"
42
+ - "--suppress=returnByReference:include/terraingen/raster/raster.h"
43
+ - "--error-exitcode=1"
44
+
45
+ - repo: https://github.com/astral-sh/ruff-pre-commit
46
+ rev: v0.17.1
47
+ hooks:
48
+ - id: ruff-check
49
+ args: ["--fix"]
50
+ - id: ruff-format
51
+
52
+ - repo: local
53
+ hooks:
54
+ - id: license-header
55
+ name: license header
56
+ description: Source files start with the SPDX license identifier.
57
+ language: pygrep
58
+ entry: '\A(#!.*\n)?(//|#) SPDX-License-Identifier: BSD-3-Clause\n'
59
+ args: [--multiline, --negate]
60
+ files: (\.(h|cpp|slang|inc|in|py|cmake|sh)|(^|/)CMakeLists\.txt)$
61
+
62
+ - repo: https://github.com/cheshirekow/cmake-format-precommit
63
+ rev: v0.6.13
64
+ hooks:
65
+ - id: cmake-format
66
+ additional_dependencies: ["pyyaml>=5.1"]
@@ -0,0 +1,356 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+
12
+ - Batched source queries: `Source::HeightsAt(points, heights, spacing)` (Python `Source.heights_at`) gives every point's height in one call, to the bits of `HeightAt`, and point queries of a generator use it; `Source::Fill(grid, heights, spacing, threads)` (Python `Source.fill(grid, array)`) fills a caller's buffer in place.
13
+ - `Source::PostSpacingAt` (Python `post_spacing_at`): the spacing of the posts behind a height, measured or generated; `ResolutionAt` now gives only what measured data resolves.
14
+ - `ApplyLayers(generator, first, heights, options)` (Python `apply_layers`): applies a generator's layers from `first` on to heights a caller kept, so a simulation that replaces one layer re-runs only that layer and those after it.
15
+ - `Raster` can borrow a caller's buffer (`Raster(width, height, cells)`, `Borrows`); `FillHeights` and `Source::Fill` into a buffer now write into it with no copy.
16
+ - `SourceGrid(generator)`, `RasterStats::stddev`, `LocalFrame::Components`, `ForEachCell`, `GeneratedOutputs::outputGrids`, and required keys and list lengths in the configuration schema (`required`, `min_length`, `max_length`, `lengths`).
17
+ - `ShapeModelSource` (Python `ShapeModelSource(body, upsampler=None)`, config source `{"type": "shape_model", "upsampling": ...}`): a shape-model body's own labels refined by any upsampler, as a DEM's cells are, cubic by default. Each ICQ face is a lattice of posts in degrees, 90 / Q apart, read across its edges from the neighboring faces and blended with them within half a label of the edges, so kernel upsamplers and diamond-square leave no seams; diamond-square displaces each face differently and fits its roughness per face. Its heights are the refined radius less the body's bilinear one, 0 on every label, and layers read it as measured data (`source_resolves_px`). It needs a shape-model body.
18
+ - Crater replacement (`Crater::replace`, `Crater::Replace()`, `CraterList::Replace` and `AnyReplace`, config `"replace": true` on a manual crater, Python `Crater(..., replace=True)` and `CraterList.replace`): a replacing crater swaps whatever the terrain holds there, such as a crater a DEM holds blurred, for a sharp crater of its diameter and depth. It is cut into its own plane datum, fitted on a ring from where the replacement ends out `fit_width_radii` (1) radii further, so neither the old bowl nor its rim pulls it down, whatever datum and `interior_replacement` the other craters have; it replaces in full to `start_radii` (1) and blends out by `end_radii`, the profile's reach unless set (`CraterReplacement`, `CraterApplyOptions::replacement`, config `"replacement"` under `apply`, `FitReplacementDatum`, `ReplacementMargin`, `ValidateCraterReplacement`). Point queries of a replacing crater need the ground, as datums do. A replacing crater stands in for a crater the terrain held, so crater selections (`CraterSelection::Includes`) take it as generated: it gets the irregular outline, secondaries and crater albedo generated craters get, even where `manual` is off.
19
+ - Inherited craters (`InheritedCraters`, `CraterLayerOptions::inherited`, config `"replace_inherited_craters": {"path", "min_source_px", "max_source_px"}`, Python `InheritedCraters`): craters of a coarser level, such as a coarser run's crater list over the heights it wrote that the layer's source now upsamples, or a catalog of a DEM's craters, stamped again sharp as replacing craters with their IDs, ages and realized depths where the source resolves them (from `min_source_px`, by default the layer's `source_resolves_px`, up to `max_source_px`). Generated craters fill the gaps beneath and stop where the inherited ones stand in, so none is drawn twice. Listed rim heights are kept where the profile takes one (`TakesRimHeight`: not under a diffused or Fassett-Thomson simple profile, which tie the rim to the depth).
20
+ - `ReadCraterList` (`read_crater_list`): reads a crater list as `WriteCraterList` writes it, or a catalog in the same form, CSV or JSON; with attributes, its `depth_ratio` and `rim_height` become each crater's depth and rim, so a coarse run's craters read back as realized. Crater lists gain a `replace` column.
21
+ - Slump terraces on the walls of large craters (`CraterTerraces`, `CraterApplyOptions::terraces`, config `"terraces"` under a crater layer's `apply`, Python `CraterTerraces`): between the floor edge and the rim crest the wall steps into benches under 5 degrees and scarps near `scarp_slope_deg` (35), from 1 bench at `onset_diameter_m` (20 km, where half of fresh lunar mare craters are terraced) to `max_benches` from `full_diameter_m` (65 km). Steps split the wall's height, and each bench stands where its step keeps its mean height, so slumped blocks rise above the unterraced wall at their toes and drop below it under their headscarps, keeping the wall's volume; walls too steep for a bench keep their slope. Each scarp scallops around the rim between inward cusps and wobbles, each bench covers its own arcs of the wall, its slump blocks step in or out (`block_offset`) and some go missing (`block_gaps`), and the rim crest of a terraced crater scallops into a polygon. Terraces soften as a crater wears and are gone below `min_freshness`; the floor edge is the complex profile's floor diameter, else Pike's 0.187 D^1.249 km. Crater layers turn them on (`DefaultCraterApply`); `CraterApplyOptions{}` leaves them off.
22
+ - Central peaks built from massifs (`CraterPeaks`, `CraterApplyOptions::peaks`, config `"peaks"` under a crater layer's `apply`, Python `CraterPeaks`): in place of the complex profile's round dome, `min_massifs` to `max_massifs` mountains strung across the floor `spread_radii` peak radii from the center, each up to `elongation` long and strung along a chain or scattered around the center (`chain_spread_deg`), `sharpness` sharp (0 domes, 1 spires), `lopsidedness` lopsided and up to `height_variation` lower than the main one, their outlines warped (`warp`) and their slopes carved into spurs and gullies by ridged noise (`roughness`, `roughness_wavelength`). The profile's peak height and base set their size, scaled by `height_scale` and `width_scale` for peaks off the fitted laws; they lower with it as the crater wears and worn peaks lose their roughness; tabulated and diffused profiles keep the dome. Crater layers turn them on (`DefaultCraterApply`); `CraterApplyOptions{}` leaves them off. The gallery's `craters/copernicus` figure recreates Copernicus with terraces and peaks.
23
+ - Python `ValueDistribution.sample(u1, u2)`, `draw(stream, count=None)` (a NumPy array of `count` draws when given), `lowest()` and `highest()`, as in C++.
24
+ - Python bindings for `FitDeviogram` (`fit_deviogram`, `DeviogramFit`), `ValidateConfig` (`validate_config`, `ConfigSummary`; `TerrainGenConfig.validate` returns the summary), `WriteCraterList`, `WriteBoulderList` and `WriteBoulderModels` (`write_crater_list`, `write_boulder_list`, `write_boulder_models`, `ListFormat`), `FragmentBoulderShape` (`fragment_boulder_shape`, `BoulderFragment`, `BoulderCracks`), `SecondaryDensity` and `SecondaryRayField`, `DescribeCraters` (`describe_craters`, `CraterShapeModels`, `CraterModels.shape`, `CraterFeatures.attributes`) and `BlastZoneMeanShare` (`blast_zone_mean_share`).
25
+ - `RasterGrid::Centered(center, size, pixelSize)` and `RasterGrid::Covering(box, pixelSize)`: the north-up grid covering a box, snapped outward to whole cells as configuration outputs snap their extents (`SnappedCells`, `kGridSnapTolerance`).
26
+ - Seam matching for source chains (`ChainSeams`, `ChainSeamMode`, `SourceChain(sources, seams)`, `SourceChain::Seams`, `ValidateChainSeams`, `SeamReach`, `SeamLattice`, `kSeamReachDecays`; config `"seams"` on a chain source with `"mode"`, `"width_m"` and `"decay_length_m"`; Python `ChainSeams`, `ChainSeamMode`, `SourceChain(sources, seams=...)`, `validate_chain_seams`, `seam_reach`, `seam_lattice`, `SEAM_REACH_DECAYS`): where a source fills the gaps of those before it, `none` (the default) switches outright as before, `feather` adds the height difference at the nearest edge post and fades it to 0 across `width`, `height` spreads the edge's height difference into the gap by solving (Laplacian - 1/L^2) d = 0, so the later source keeps its relief and heights meet (C0), and `slope` solves (Laplacian - 1/L^2)^2 d = 0 so slopes meet as well (C1). A hole takes the whole shift; beyond a source's edge it fades out over the decay length L and is 0 from 3 L on. The correction is solved once per connected gap region, on first use, on the posts of the source before the gap, by conjugate gradients with multigrid V-cycles, and read between posts by Catmull-Rom interpolation, so points, tiles and grids agree to the bit. Chains of more sources are matched at each handover, and on a body the configuration's meters become degrees along a meridian.
27
+ - `ManualCrater(x, y, diameter, depth, rimHeight)` (`manual_crater`) and a `CraterList` built from a list of craters, `CraterList{a, b, c}`.
28
+ - `BoulderList` (Python `BoulderList`): boulders stored one column per field, as `CraterList` stores craters, built from `Boulder` records (`Append`, `BoulderList{a, b, c}`) and read back with `At`.
29
+ - `BuildGenerator(config, source)` (`build_generator(config, source=...)`): a configuration's layers built on a source the caller gives, such as an embedder's DEM, which they read as measured data (`source_resolves_px`, crater datums); the configuration gives no source of its own.
30
+ - Point queries keep fitted crater datums between calls, so craters with a datum are fitted once and later queries near them run as fast as craters without one (`BM_HeightAtDatum` about 1k to 340k point queries per second). `HeightsAt` and `HeightAt` share a cache kept per generator, matched by its surface, source and layers and dropped once one of them is freed; pass an `EvaluationCache` (`cache=` in Python) to manage one yourself.
31
+ - Polygon regions for masked layers (`RegionShape::Polygon(points, holes)`, Python `RegionShape.polygon(points, holes=[])`, config `"shape": {"type": "polygon", "points": [[x, y], ...], "holes": [[[x, y], ...], ...]}`): a simple polygon in surface coordinates (x east, y north; longitude and latitude on a body), concave or with holes, closed from its last point back to its first. The feather fades out from the nearest edge, holes counting as outside, and `ValidateRegionShape` rejects outlines or holes with fewer than 3 points, points that are not finite, zero-length edges (including a repeated first point) or no area. Python `RegionShape.points` and `RegionShape.holes` read them back.
32
+ - DEMs in longitude and latitude on a body: `GeoTiffSource` reads a GeoTIFF in a geographic CRS (crops and cell sizes in degrees), and a `RasterSource` or `GeoTiffSource` whose geographic columns span 360 degrees wraps in longitude, so a file from 0 to 360 E also serves 180 W to 0 with no seam (Python `RasterSource(..., keys=...)`). `ValidateGenerator` rejects a source in longitude and latitude on a plane and a projected source on a body.
33
+
34
+ ### Changed
35
+
36
+ - `TerrainGenConfig` is an opaque, immutable value: the spec structs are private, so configurations are made by `ParseConfig` and `LoadConfig` and changed in their JSON. `BuildSurface` takes a configuration, and `LayerType` and `BuildCraterModels` are no longer public.
37
+ - `ValidateConfig` and `BuildGenerator` are one pass that checks each part as it builds it: `ValidateConfig` builds the terrain, so it also reads what building reads, and some errors come in another order or at a finer path, such as a list of the wrong length at the list's key or a missing key reported as required.
38
+ - The configuration key `estimate_from_base` is `estimate_from_source`.
39
+ - `ResampleMethod::CatmullRom` is gone, as it was the same kernel as `Cubic`; configurations still take `"catmull_rom"`, read as `"cubic"`, and Python's `ResampleMethod.CATMULL_ROM` is gone.
40
+ - `EvaluateMaterials` takes a spacing and threads in place of `EvaluationOptions`, whose backend it ignored; Python's `GeneratedOutputs.placed_craters` and `placed_boulders` are gone in favor of `placed_craters` and `placed_boulders`.
41
+ - `Raster::IsMissing` counts infinities as missing too, and `HasData` is gone.
42
+ - `field.h` (`SurfaceField`, `RasterField`) moved from `sources` to `layers`; `util/arithmetic.h` merged into `util/bits.h`, and `util/fft.h` is private.
43
+ - Removed: `RasterSource`'s shared-raster constructor and `Options`, the thread-less `Upsampler::Fill`, `detail::MidpointRefiner`, `LayerTimer`, the `Raster` overloads of `ResolvedSpacing` and `PixelWindowsIn`, the span overload of `PlacedCraters` and `LruCache::Evictions`.
44
+ - A configuration with a `shape_model` body and no source starts from the shape model upsampled by cubic interpolation (`ShapeModelSource`, `EffectiveSource`), rather than from the default synthetic noise over the bilinear shape; give a source to replace it.
45
+ - Noise has two types instead of three: the one-fractal `NoiseLayer` struct is now the flat `Fractal`, which holds the `FractalParams` fields itself with `enabled`, `blend`, `warpAmplitude` and `warpWavelength`, and the terrain layer `NoiseRelief` (`NoiseReliefOptions`) is now `NoiseLayer` (`NoiseLayerOptions`, with `fractals`), taking a list of fractals or one. `SyntheticTerrainParams` and `ValidateSyntheticTerrain` are gone, and `SyntheticSource` takes the fractals directly (`fractals`). The stack helpers follow: `NoiseLayers` is `FractalStack`, `kMaxNoiseLayers` is `kMaxFractals`, `LayerBlend` is `FractalBlend`, and `NoiseLayersAt`, `ValidateNoiseLayer(s)` and `EvaluateNoiseLayer(s)` are `FractalStackAt`, `ValidateFractal(s)` and `EvaluateFractal(s)`. In Python, `NoiseLayer(FractalParams(...))` becomes `Fractal(...)`, `NoiseRelief([...])` becomes `NoiseLayer([...])`, and `NoiseLayer(seed=..., wavelength=..., amplitude=...)` makes a layer of one fractal. The JSON configuration is unchanged.
46
+ - `RegionShape::DistanceOutside` (`distance_outside`) is a signed distance: negative inside a rectangle, circle or polygon, by the distance to its nearest edge, where it was 0; outside it is unchanged. Masked layer weights and the features a region holds are unchanged.
47
+ - A configuration without a source starts from rolling ground rather than flat: a synthetic source of one fBm noise layer, 400 m in wavelength and 12 m in amplitude, seed 2 (`DefaultBaseNoise`), on which default craters and boulders look natural at a meter per pixel. A synthetic source without a `stack` takes the same layer; `"stack": []` gives flat ground at its elevation.
48
+ - `CraterApplyOptions::interiorReplacement` (`interior_replacement`) defaults to 0 rather than 1: craters cut into a datum keep the older relief on their floor and walls, and a clean cut takes `interior_replacement` 1. The default datum stays `none`, so default terrain is unchanged; the example configs that set a datum now ask for a clean cut.
49
+ - Every configuration key in meters ends in `_m`, as keys in degrees, pixels and Gyr already end in `_deg`, `_px` and `_gyr`: 61 keys gained it, among them `baseline_m`, `bed_thickness_m`, `core_radius_m`, `cover_thickness_m`, `crack_depth_m`, `crack_width_m`, `depth_m`, `diameter_m`, `dust_patch_m`, `edge_rounding_m`, `exposure_spacing_m`, `field_size_m`, `floor_patch_m`, `height_m`, `large_diameter_m`, `mature_depth_m`, `max_crater_diameter_m`, `max_diameter_m`, `max_lobe_length_m`, `max_lobe_width_m`, `max_range_m`, `max_scarp_length_m`, `max_scarp_width_m`, `max_step_m`, `max_thickness_m`, `max_wavelength_m`, `mid_diameter_m`, `min_crater_diameter_m`, `min_diameter_m`, `min_lobe_length_m`, `min_lobe_width_m`, `min_range_m`, `min_scarp_length_m`, `min_scarp_width_m`, `min_wavelength_m`, `min_width_m`, `octave_rms_m`, `pixel_size_m`, `plate_size_m`, `radii_m`, `radius_m`, `reference_diameter_m`, `rim_height_m`, `small_diameter_m`, `start_m`, `thickness_m`, `warp_amplitude_m`, `warp_wavelength_m`, `wavelength_m`, `width_m`, and the terrain noise `amplitude_m`, `spacing_m`, `feather_m`, `reach_m`, `offset_m` and `scale_m` where those are meters; heightmap `tile_size` is `tile_size_px`. Albedo noise layers keep `amplitude`, which is a relative contrast or degrees there, and conversion factors keep `diameter_unit` and `meters_per_unit` (unit m/unit). Python names are unchanged, as they drop `_m`.
50
+ - Every layer gives its resolution fade as craters and boulders do, `"fade_px": [start, end]` in output pixels and `"fade_shape"`: roughness, dune, ripple, grainflow, pavement, sand shadow, bedform and spectral continuation layers and albedo detail, crater albedo and splotches took a `"fade"` object of `start_samples`, `end_samples` and `shape`. In Python every fade is one `ResolutionFade`, `options.fade`, as in C++; `fade_px` and `fade_shape` on `CraterApplyOptions` and `BoulderLayerOptions` are gone.
51
+ - Layers that read the ground beneath them at many points per sample (sand fill, pavement and bedforms on an exposure field, any `FormulaLayer`) read it up front, once per block of samples, in one batched pass through the layers beneath (`MapReadingGround`, `PrefetchedGround`), rather than evaluating the whole stack beneath once per point read; stacked ground-reading layers no longer multiply each other's cost. Heights are unchanged to the bit, on grids and at points (`BM_EvaluateGroundReaders`).
52
+ - `SandFillLayer::ThicknessAt(x, y, spacing, ground)` takes the ground last, as `SandShadowLayer::ThicknessAt` and the other point queries do (it took it first).
53
+ - Worn craters round out and lower their ejecta as they wear: a crater keeps its rough rim wobble in proportion to its current over its fresh rim height, each harmonic of order k by that share to the power k / 2, so worn rims lose their short wiggles first rather than showing them as lumps along a rounded rim (`KernelWornOutlineShare`; as diffusion already blurred them); and Martin, Parkes and Dunstan ejecta thickness scales with the rim height, so worn craters no longer dip below the ground in a moat outside the rim.
54
+ - `FassettThomsonProfile` exteriors are tapered as Martin, Parkes and Dunstan's are, by 1 - u^2 from where the exterior starts to 1.5 radii, so their slope also falls to 0 at the reach rather than the crater being cut off while still sloping (`FassettThomsonExterior`); every Fassett and Thomson crater's exterior changes, its rim join does not.
55
+ - `MartinParkesDunstanProfile` craters join the ground without slope breaks: the ejecta outside the rim is tapered by 1 - x^2 (x the distance beyond the rim in radii), so its slope falls to 0 at the 2 R reach rather than the profile being cut off while still sloping, and a worn crater's rounded rim is a cubic matching the ejecta's height and slope where they meet, which kinked before (`MartinParkesDunstanExterior`). In hillshades the rings at the rim join and at 2 R are gone. Every Martin, Parkes and Dunstan crater's exterior changes; its crest, rim height and interior do not.
56
+ - Every height and albedo layer takes a `TerrainBase{surface, source}` (Python `TerrainBase`, `base=`) as its last argument in place of separate surface and source arguments, so one base built for a terrain is passed to each of its layers; a `Surface` or a source alone converts to one. `CraterLayerOptions::surface` is gone (the crater layer takes its surface from the base), `NoiseRelief` and `SyntheticAlbedo` measure noise from the base source's reference point in place of an `origin` argument, and `NoiseRelief` takes `NoiseReliefOptions{layers, sourceResolvesPixels}` (`Options()` replaces `Layers()` and `SourceResolvesPixels()`). `SecondaryCraterLayer` rejects a base on another surface than its primaries'.
57
+ - Layers on `FormulaLayer` (roughness, bedforms, dunes, strata, pavement, sand fill, function layers) report their surface (`Layer::LayerSurface`, Python `layer_surface`), so `ValidateGenerator` rejects them on another surface than the terrain's; scale and clamp layers work on any.
58
+ - Python `BoulderLayerOptions` nests its parts as the C++ struct does: `sizes` (`BoulderSizes`: `coverage`, `q_constant`, `q_coverage_coefficient`, `distribution`, `min_diameter`, `max_diameter`), `bedrock` (`BoulderBedrock`: `exposure`, `abundance`, `mean_size`), `pose` (`BoulderPose`) and `rendering` (`BoulderRendering`: `relief`, `model_threshold`, `relief_range`, `shapes`, `shape_prototypes`), which were flat properties named for the configuration keys (`coverage`, `qa`, `qb`, `bedrock_abundance`, `min_burial`, `relief`, ...); `cache_boulders` is bound. Configurations keep their flat keys.
59
+ - `BoulderModelThreshold::minSamples` and `maxSamples` are `minPixels` and `maxPixels`; Python and configurations name them `min_px` and `max_px`.
60
+ - `DuneOptions::ripples` and `grainflows` are optional, unset for none (Python `None`); they were on with a 0 `wavelength` or `cover` meaning none. `DuneRipples` defaults to the 2.1 m, 0.2 m large ripples of Mars's Bagnold dunes and requires a positive wavelength, and `DuneGrainflows` defaults to a `cover` of 1. Configurations give ripples and grainflows as before.
61
+ - `Crater::depth` and `rimHeight` are `std::optional<double>`, unset where the models give them (they were NaN); Python `Crater.depth` and `rim_height` are `None` when unset. `CraterList` columns keep NaN for unset values.
62
+ - A crater layer's `ages` (`CraterLayerSpec::ages`) is optional: unset gives steady-state ages on the production surface and equilibrium its density is the minimum of (`config::LayerAges`, `config::MatchingAges`), so a density capped by Trask no longer needs its ages repeated. The default ages were always Hartmann, which made any Trask-capped density without ages fail validation.
63
+ - Size-frequency constructors take the data, then the kind, then the range: `LogPolynomialSfd(coefficients, kind, range, ...)` (was range before kind; Python `LogPolynomialSfd(coefficients, kind, min_diameter, max_diameter)`). `SplicedSfd(pieces, maxDiameter, tolerance)` and `PiecewisePowerLawSfd(segments, kind, maxDiameter, joins)` are valid from their first piece's start, so they take only the largest diameter (they took a `DiameterRange` whose minimum had to repeat it); `SfdJoins{allowDiscontinuities, tolerance}` (Python `SfdJoins`, `joins=`) replaces the bare `bool` and tolerance.
64
+ - `SyntheticAlbedoOptions::hue` and `hueNoise` are `hueDegrees` and `hueNoiseDegrees`, as `SyntheticAlbedoSpec`'s are; Python and configuration keys keep `hue_deg` and `hue_noise_deg`, as does `hsv_to_rgb(hue_deg, ...)`.
65
+ - Rough crater rims fade toward a round floor: the profile follows an outline's rough wobble less the nearer it is read to the center, none there and all of it at the rim, each harmonic of order k by the share to the power k / 2 so short wiggles stay near the rim (`KernelOutlineScaleAt`, `KernelOutlineShare`). At high roughness, rim kinks no longer run as straight radial seams through the wall to the center; every irregular crater's inner wall changes, its rim and outline do not.
66
+ - A crater layer given no profile, under a degradation that requires none, shapes its craters with Martin, Parkes and Dunstan's profile (`MatchedProfile`), as `DefaultCraterModels` and configurations do; it threw before.
67
+ - Python option fields are named for their C++ members with a `_m` unit suffix dropped (`min_diameter`, `ground_spacing`). Angles and sample counts keep the configuration's `_deg` and `_px` (`yaw_deg`, `max_slope_deg`, `source_resolves_px`), as placed boulders, outlines and other records do, where C++ spells them `Degrees` and `Pixels`.
68
+ - Public angles are in degrees, named for it, matching the configuration's `*_deg` keys: `CraterIrregularity::headingDegrees` and `headingSpreadDegrees`, `CraterSlopeResponse::fullSlopeDegrees`, `ObliqueImpacts::headingDegrees`, `BoulderPose::maxLeanDegrees`, `maxTiltDegrees` and `maxSlopeDegrees`, `BoulderVentifacts::windAzimuthDegrees`, `minAngleDegrees`, `maxAngleDegrees` and `secondWindAzimuthDegrees`, `DuneOptions::windAzimuthDegrees`, `azimuthSpreadDegrees`, `slipFaceAngleDegrees`, `stossSlopeDegrees` and `flankSlopeDegrees`, `PavementOptions::maxTiltDegrees`, `StrataOptions::dipDegrees` and `dipAzimuthDegrees`, `SandShadowOptions::windAzimuthDegrees` and `flankAngleDegrees`, and `BedformOptions::windAzimuthDegrees` and `azimuthSpreadDegrees` (all were radians). Placed boulders and other outputs keep radians.
69
+ - Names that clashed with others: `BoulderClusters::spacing` is `centerSpacing` (key `center_spacing_m`), `DuneOptions::spacing` is `latticeSpacing` (key `lattice_spacing_m`, was `spacing`), `BoulderRendering::models` is `modelThreshold` (key `model_threshold`) and `BoulderReliefRange::models` is `includeModels` (key `include_models`).
70
+ - `SyntheticSource` takes its `pixelSize` in meters on a body too, as `FlatSource` does (it took the surface's units, degrees on a body).
71
+ - `ValidateGenerator`, and so every evaluation, rejects a layer built for another surface than the terrain's (`Layer::LayerSurface`) and a layer whose inputs, such as a boulder layer's crater layers or a sand shadow layer's boulder layer, are missing from the terrain's layers or come after it (`Layer::Dependencies`).
72
+ - `LoadConfig` remembers the configuration's folder in `TerrainGenConfig::directory`, which `ValidateConfig`, `BuildGenerator`, `BuildAlbedo` and `GenerateFromConfig` resolve relative paths against when given no folder (`ConfigDirectory`).
73
+ - `WriteGeoTiff(path, raster, generator)` writes in the terrain's projection (`TerrainGeoKeys`), and `WriteMesh(path, mesh)` writes a `TriangleMesh` alone.
74
+ - `ManualBoulder` is built by name: `ManualBoulder(x, y, diameter)` with chainable setters (`.Height(1.1).Burial(0.2).YawDegrees(30.0).Rest(BoulderRest::Side)`), every field it leaves to be drawn a `std::optional` instead of NaN (and `id` instead of 0), its angles in degrees (`yawDegrees`, `leanDegrees`, `tiltDegrees`, `tiltAzimuthDegrees`, as the configuration's `*_deg` keys), and a new `model` that makes it a 3D model, or keeps it relief, whatever the layer's size threshold.
75
+ - `ManualCrater(x, y, diameter)` takes no depth or rim height, whose position clashed with `Crater{x, y, diameter, ageGyr}`; set them, and the age, by name with `Crater`'s chainable `.AgeGyr()`, `.Depth()` and `.RimHeight()` (Python `manual_crater(x, y, diameter)`, then its attributes).
76
+ - Named construction: `ValueDistribution::Constant`, `Uniform`, `Normal`, `LogNormal`, `Piecewise` and `.Clamped(min, max)` (Python `ValueDistribution.normal(...)` and so on), `EvaluationOptions{}.Spacing(s).Threads(n).On(backend)`, `NoiseLayer::Fbm(seed, wavelength, amplitude)`, and `NoiseRelief(NoiseLayer)` for one layer.
77
+ - Off and unset are `std::optional` where a sentinel stood for them: `BoulderLayerOptions::fragmentation` is optional (none break unset; was off until `splitWear` dropped below 1, `BoulderFragmentation::Enabled` is gone, and `splitWear` defaults to 0.5); `BoulderEjecta::minCraterDiameter` is optional (was 0 for none) and `MinCraterDiameter()` is `ThrowingDiameter()`, unset when no crater throws blocks; `CraterGenerationOptions::maxCraters` and the configuration's `max_craters` are optional (was 0 for no cap); `ComplexCraterShape::peakFitMaxDiameter` is optional (was 0 for every size).
78
+ - Crater shaping seeds (`irregularity`, `noise`, `texture` and `slope`) are optional and, unset, follow the crater layer's `seed` (`SeededCraterApply`), so a new layer seed reshapes the outlines, noise, texture and floor offsets too; they were 0 whatever the layer's seed. Craters with these features on change unless their seeds are set.
79
+ - `CraterSlopeResponse::enabled` is `asymmetric` (configuration key `asymmetric`, Python `asymmetric`), as it turns on only the asymmetry: the wear `criticalGradient` gives applies either way.
80
+ - Settings that would be lost are rejected instead: `BoulderLayer::Manual` (Python `BoulderLayer.manual`) throws for options whose `manual` is not empty, which it replaced; `BuildBoulderOptions` throws for a `BoulderLayerSpec` whose `boulders.sizes.distribution` or `boulders.ejecta.distribution` is not the default, which `sizes` and `ejecta_sizes` replaced; and a raster source spec's `read.upsampler`, which `upsampling` replaced, must stay unset.
81
+ - Crater ages and surfaces are given once: a crater layer whose `CraterModels::ages` is null draws the ages its degradation wears by (`DegradationModel::AgeModel`, `FreshnessDegradation`'s), `EquilibriumSurface{production, equilibrium, ageGyr, chronology}` (Python `EquilibriumSurface`) gives a surface's `Density()` and steady-state `Ages()` from one set of models, `EquilibriumDiffusionAges(profile, fresh, steadyAges)` and `MatchedDiffusionDegradation` match diffusion to steady-state ages in one call, and a configuration whose steady-state ages name another production function, chronology, age or equilibrium than its density's production surface and equilibrium is rejected at `ages`.
82
+ - `SecondaryCraterLayer(primaries, options)` (Python `SecondaryCraterLayer(primaries, options)`) shapes secondaries as the primaries are, and a secondary layer on primaries following a density map throws unless its options are among the primaries' `CraterLayerOptions::secondaries`, which the map counts.
83
+ - Crater layers built in code default as a configuration's do: `DefaultCraterModels()` (`default_crater_models`) gives the configuration's default density, ages, profile and degradation, `CraterLayerOptions` generates from 2.5 m (was 4 m) and shapes with `DefaultCraterApply()` (irregular outlines on, as configurations always had; it moves from `config.h` to `shaping/apply_options.h`), and `CraterLayer`'s models default to `DefaultCraterModels()`. The density and ages may be null for a layer that generates no craters.
84
+ - Roughness, bedform, dune and boulder options built in code default as a configuration's do: roughness octaves up to 16 m (was 4 m), bedforms 4 m apart, 0.4 m high over 90% of the ground (were 1 m, 0.1 m and none), barchans 50 m wide from 15 m in 129 m cells (were 400 m, 200 m and 800 m), and boulder sizes between craters and around them from the nominal SP-8023 intercrater blocks up to their largest, about 5.86 m (`DefaultBoulderSizes`; were Golombek-Rapp sizes up to 4 m). `DefaultBoulders`, `DefaultRoughness`, `DefaultBedforms` and `DefaultDunes` are gone; `PlaceBoulderModel` settles by default, as the layer does.
85
+ - The Golombek-Rapp terms `BoulderSizes::coverage`, `qConstant`, `qCoverageCoefficient` and `BoulderEjecta::coverage` are optional (`Coverage()`, `QConstant()`, `QCoverageCoefficient()` give them or their defaults), and `ValidateBoulderLayerOptions` rejects one set beside the size distribution that leaves it unused; Golombek-Rapp sizes need `sizes.distribution` (Python `distribution`) set to null, which Python now accepts.
86
+ - `CraterLayer::Manual(craters, models, apply, surface)` (Python `CraterLayer.manual(craters, models=None, apply=None)`) takes its craters first, with the models defaulting to `DefaultCraterModels()` and the shaping to `DefaultCraterApply()`.
87
+ - Crater layers take their profile from a degradation model that requires one (`DegradationModel::RequiredProfile`, `MatchedProfile`): `DiffusionDegradation` gives its `DiffusedProfile`, so `CraterModels::profile` (Python `profile=`) may be left null, and a different profile is rejected. The diffusion terrains of the `craters_degradation` and `ages_models` examples were shaped with the plain Fassett-Thomson profile and now are diffused.
88
+ - `BuildAlbedo` throws a `ConfigError` naming the layer when the generator's layers are not the ones the configuration builds, as after changing a built generator, instead of reading past them.
89
+ - Albedo noise layers in a configuration must give their `amplitude`; unset it was 100, which saturated the albedo.
90
+ - `BoulderFeatures::boulders`, `BoulderLayer::Boulders` and `WriteBoulderList` hold or take a `BoulderList` instead of `std::vector<Boulder>`; Python `BoulderLayer.boulders(region)` returns a `BoulderList` like C++ (its `.table` gives the NumPy columns it returned before).
91
+ - `NoiseRelief` takes its noise layers as `std::vector<NoiseLayer>` and returns them from `Layers()`, as the Python binding always did (it took `SyntheticTerrainParams` and had `Params()`).
92
+ - Python `RasterGrid.centered(center, size, pixel_size)` takes the C++ arguments, a center and a size in world units, instead of cell counts (`centered(width, height, pixel_size, center)`).
93
+ - `config::SnappedGrid`, `config::SnappedCells` and `config::kExtentSnapTolerance` give way to `RasterGrid::Covering`, `SnappedCells` and `kGridSnapTolerance` in `raster/grid.h`.
94
+
95
+ - Point queries on a body find the cells around them directly from the neighbors of the cell holding the point, instead of sampling the region: about 1.8x faster on a sphere, within 1.2x of a plane.
96
+ - Generated cells keep their craters indexed by y, so a point query visits only the craters in its rows instead of copying every crater of the cells around it: point queries about 2x faster on a plane and 1.5x on a sphere.
97
+
98
+ - `terraingen schema` prints the configuration schema (`ConfigSchema`); the catalog of types with their defaults stays available as Python `config_catalog()`.
99
+ - Every number in a configuration must be finite, and such errors name the number itself, such as `layers[1].manual[0].x`.
100
+ - `terraingen/config/report.h` is now `terraingen/pipeline/report.h`; `WriteCraterList`, `WriteBoulderList`, `WriteBoulderModels` and `ListFormat` move to `terraingen/pipeline/feature_lists.h`, and `PlacedCraters` and `PlacedBoulders` to `terraingen/pipeline/generator.h` (`pipeline/features.h` is gone).
101
+ - C++ renames: `NoiseLayerConfig` to `NoiseStackLayerSpec`, `SyntheticAlbedoSpec::Params` to `Options`, `estimateFromBase` to `estimateFromSource` and the config key `estimate_from_base` to `estimate_from_source`; `CheckConfigRanges` and `ValidateAlbedo` move into `terraingen::config`.
102
+ - `TerrainGenConfig` compares equal when its JSON does; the nested specs no longer have `operator==`.
103
+ - Headers moved: `sources/synthetic_terrain.h` into `sources/synthetic_source.h`; `layers/bisection.h` to `util/bisection.h`; `Plane` and `PlaneFit` to `util/plane_fit.h`; the power spectrum fit (`EstimatePowerLawSpectrum`, `PowerLawSpectrum`) to `raster/spectrum.h`; the Perlin structure functions to `noise/structure_function.h`; `NoiseLayersAt` to `noise/surface_noise.h`; the crater albedo options to `albedo/crater_albedo_options.h`; `CutAtPlane` (was boulder-internal) to `mesh/mesh.h`; crater `ages/freshness.h` to `ages/freshness_ages.h`, `degradation/freshness.h` to `degradation/freshness_degradation.h` and `shaping/explicit_state.h` to `shaping/resolved_state.h`.
104
+ - Crater profiles (Fassett and Thomson, Martin-Parkes-Dunstan, complex, diffused) evaluate the same float formulas on the CPU as on the GPU, so their heights match the kernel; `FassettThomsonProfile::Rim` and `DiffusedProfile::Cells` give way to `Kernel()`.
105
+ - Crater outlines (`CraterOutline::Scale`, `MarkShift`, `CraterProfileDistance`), diffused morphometry and the kilometer power laws (`KilometerPowerLaw::At`) evaluate the crater kernel's float formulas on the CPU too, so no double twin remains; `KernelOutline` holds an outline in the kernel's form for many points. Outline distances, fresh complex and Martian morphometry and diffusion depths change at float rounding.
106
+ - Crater datums without a ground sampler read the raster with `SampleRaster`; bedforms place their fields on the surface cells (`MakeCells`) on planes and bodies alike; spectral continuation impulses draw from lattice streams. These change generated heights slightly.
107
+ - `ValidateNoiseLayers` (`validate_noise_layers`) checks a noise stack for synthetic sources, noise relief and synthetic albedo alike.
108
+ - A default `SyntheticTerrainParams` holds no layers and is flat, matching an empty `stack` in a configuration (it held one Perlin fBm layer); `ValidateSyntheticTerrain` accepts an empty stack, and only `NoiseRelief` still needs a layer.
109
+ - Raster albedo measures the map's roughness and Hurst exponent with the raster variogram fit, and crater zones and splotches share one overlay of changes; albedo detail, zone and splotch values change slightly, and swarm splotches, crater zones and the crater albedo grid split into shorter steps.
110
+ - Crater and boulder list outputs ending in `.json` in any case (`.JSON`) are written as JSON.
111
+ - `EstimatePowerLawSpectrum` (`estimate_power_law_spectrum`) reports when it clamps the fitted slope to [2, 4] (`PowerLawSpectrum::clipped`, Python `PowerLawSpectrum.clipped`). The range stays [2, 4], Hurst exponents 0 to 1 by beta = 2 H + 2: the window is already detrended by its plane and Hann-tapered, and steeper fits come from windows a few large craters dominate or from smoothed gridded DEMs, not from relief a continuation should carry on.
112
+
113
+ ### Removed
114
+
115
+ - `examples/` (the JSON configurations, C++ programs and Python scripts), the `TERRAINGEN_BUILD_EXAMPLES` option, the example tests and the example configurations installed with the Python wheel; the documentation's gallery and tested snippets show the library instead.
116
+ - APIs the library itself never used, in C++ and Python alike: `GaussianBlur` (`gaussian_blur`), `Resample` and `ResampleTo` (`resample`, `resample_to`), `SampleTruncatedPowerLaw`, `SampleExponential`, `SampleNormal` and `TabulatedDistribution`, `RandomStream::NextFloat` and `NextDoubleOpenBelow`, the mesh `Volume`, `SurfaceArea` and `Transformed` (`volume`, `surface_area`, `transformed`), `Icosphere` (`icosphere`; subdivide the icosahedron base solid onto the unit sphere instead), and the `WriteGeoTiff` overload taking band pointers.
117
+ - C++ declarations only tests used: `ResampleWindow`, `SampleRasterWindow`, `SampleAtCenters`, `RequireIncreasing`, `ResolveThreads`, `StandardErrorLogSink`, `Variogram`, `LruCache::Capacity`, the `PixelWindowIn` overload taking a raster, `kSqrt2`, `kEulerGamma` and `TERRAINGEN_VERSION_STRING`; `KernelWeight`, `ParseGdalBandScaling`, `RotationQuaternion` and `GeoKeys::ShortKey` (now `ShortGeoKey`) moved to `detail`.
118
+ - `DescribeSource` and Python `TerrainGenConfig.source_grid` (use `ValidateConfig(...).source`), `LayerAt` and `LayerTimer::Callback`.
119
+ - `OpticalMaturityOrigin` (Python `OpticalMaturityOrigin`): its reflectance is now `kOpticalMaturityOriginReflectance` (`OPTICAL_MATURITY_ORIGIN_REFLECTANCE`, 0.08) and its ratio had no use left.
120
+ - `FillSyntheticTerrain` and `GenerateSyntheticTerrain` (`fill_synthetic_terrain`, `generate_synthetic_terrain`; use `SyntheticSource(params).Fill`), `OpticalMaturity`, `SyntheticSource::Elevation`, `KernelUpsampler::Method`, `GolombekRappSfd::Coverage` and `Q`, `BlastZoneAlbedo::Zones`, `DiamondSquareUpsampler::Levels`, `RasterPosts::Window` and `Placement`, `GeoTiffSource::Scaling`.
121
+ - `UnresolvedCraterLimit` (`unresolved_crater_limit`; use `SourceResolvedLimit`), `CraterBlend::Weight`, `RimSmoothing::Weight`, `EjectaThicknessShare`, `CraterLayer::Attributes` and `SecondaryCraterLayer::Attributes`, `ApplyCraterTo`, `CraterCellCache::Size` and `Evictions`, `SecondaryDensity::Diameter`.
122
+ - `AddBoulder`, `BoulderLayer::DensityAt`, `BoulderMesh`, `BandFrequencies`, `EdgeDistanceAt`, `ReliefAt`, `BedPositionAt`; `DomeHeight`, `NormalizedBoulderShape`, `TargetPsd`, `TerracedAt`, `EstimateBaseRoughness`, `RadialPowerSpectrum` and the five boulder sub-validators are internal.
123
+
124
+ ### Fixed
125
+
126
+ - Boulder fillets no longer leave a level bench where they meet the boulder: the fillet stood at its full height all the way in to the boulder's radius, so between there and where the rock rose above it the heights were flat. It now meets the rock where the rock stands as high as the fillet (`FilletContact`; on an uncut dome `DomeFilletContact`, `sqrt(1 - height_share^2)` radii out), in every direction around shapes and models, and along each direction on domes cut by ventifact facets, and gives way to the rock inside. `FilletHeight` (Python `fillet_height`) is 0 within the contact and takes the contact as an optional fourth argument; Python adds `FilletContact` and `dome_fillet_contact`.
127
+ - Boulder layers measure unresolved cover, and rock albedo shades, at spacings where the fade reaches the largest boulder: `ForEachLogSimpsonNode` ends exactly at its bounds, so a size distribution is no longer evaluated just past its largest diameter (default boulders threw at 2 m spacing).
128
+ - `DiamondSquareUpsampler` no longer roughens a DEM's plains with the relief of its craters and massifs. Its roughness was the RMS of each post minus the mean of its neighbors over one 512 x 512 sample from the middle of the posts, so a few large features set it, and for a global DEM the sample was far from the area refined: on LOLA LDEM_8 around Copernicus it fitted a 166 m scale from far-side highlands and added 10 to 15 degree slopes across the mare at 500 m. An unset scale is now fitted window by window (`DiamondSquareOptions::fitWindow`, config `"fit_window_px"`, Python `fit_window`; 32 posts, centered every 16, each node's scale bilinear between the windows around it), so each region's detail follows its own roughness (about 6 to 15 m on the mare there, 90 m on the crater), as Rosenburg et al. (2011) map lunar roughness in overlapping windows; `fitWindow` 0 fits one scale as before. Scales and fractal dimensions are estimated by medians rather than RMS (`EstimateMidpointRoughness`, new `EstimateMidpointScale`, Python `estimate_midpoint_scale`): 1.4826 times the median absolute residual, which is the RMS for Gaussian relief, and the slope of the median absolute height differences at lags of 1 to 8 posts. A fitted upsampler with a windowed scale leaves `Options().scale` unset, and one given a fractal dimension needs no `FitTo`; points, tiles and grids still agree to the bit.
129
+
130
+ ## [0.2.0] - 2026-10-23
131
+
132
+ Sources replace the base: DEMs are upsampled rather than resampled, synthetic sources generate heights from noise, and layers leave out what the source already resolves. Outputs set their own pixel size and extent, `GenerateFromConfig` returns everything it computes, and the core types are renamed. Configurations and code written for 0.1.0 need the changes under [Migrating from 0.1.0](#migrating-from-010).
133
+
134
+ ### Added
135
+
136
+ - Sources in configurations (`source`) of type `raster`, `chain` or `synthetic`; without one the terrain starts from a flat synthetic source at 0 m.
137
+ - `SyntheticSource` (source `synthetic`): heights from a noise stack plus `elevation_m` over an unbounded plane or the whole body, evaluated at every point, or sampled at posts `pixel_size_m` apart and upsampled like a DEM; an empty stack is flat.
138
+ - `RasterSource`, heights from a raster in memory, shared rather than copied and upsampled as a GeoTIFF source is; `GeoTiffSource` is a `RasterSource` of its band.
139
+ - Upsampling on sources (`Upsampler`, config `upsampling`): how a source's posts become heights between them and at any finer sample spacing, deterministically, so points and grids at one spacing agree; kernels `nearest`, `bilinear`, `cubic` (the default), `catmull_rom`, `lanczos3` and `cubic_bspline`.
140
+ - Diamond-square upsampling (`DiamondSquareUpsampler`, `"upsampling": {"type": "diamond_square"}`): random midpoint displacement of a source's posts to finer spacings, as PANGU expands DEMs (Martin et al. 2014), keeping every coarser node, with bilinear or Catmull-Rom (`interp`) refinement and the scale and fractal dimension estimated from the posts when not given.
141
+ - `RegisterUpsampler` (Python `register_upsampler`) names upsampler types of your own, C++ or Python subclasses of `Upsampler`, for configurations to use with their settings.
142
+ - Windowed GeoTIFF reads that decode only the strips or tiles a window meets, and `crop` (`min_x`, `min_y`, `max_x`, `max_y` in CRS units) on raster sources to read only the window needed while giving the same heights there as the whole file.
143
+ - `effective_pixel_size_m` on raster sources (`effectivePixelSize`), the cell size a DEM upsampled or smoothed before it was saved truly resolves.
144
+ - `Source::ResolutionAt`, the cell size of the data behind each height, and `UnresolvedCraterLimit`, a completeness limit that leaves the craters a DEM already resolves to it; `MinimumField` combines it with a catalog's limit.
145
+ - `source_resolves_px` on craters, secondaries, boulders, noise, dunes and bedforms: features at least that many source cells across, by diameter, wavelength or dune width, are already in the source, so only smaller ones are added at each point, each raster of a chain giving its own limit; ignored on synthetic sources, `null` adds them all. In C++ `sourceResolvesPixels` on the layer options, applied when the layer is given its `source`, with `SourceResolvedLimit` and `LayerResolvedLimit` (Python `source_resolved_limit`).
146
+ - Spectral continuation layer (`spectral_continuation`, `SpectralContinuationLayer`): detail finer than a DEM that continues its fitted power-law spectrum to shorter wavelengths as sparse Gabor noise, tapered in at the DEM's Nyquist wavelength so resolved scales gain nothing, with grids and points in agreement.
147
+ - Roughness and noise layers that estimate their settings from the source with `estimate_from_source`: the Hurst exponent and RMS height difference of its variogram, extrapolated to the roughness baseline or matched at each noise layer's wavelength; explicit values override the estimates. The estimators are public: `EstimateSourceRoughness`, `EstimateBaseRoughness`, `EstimatePowerLawSpectrum`, `RadialPowerSpectrum`, `EstimateMidpointRoughness` and `raster/variogram.h` (Python `estimate_source_roughness` and the rest).
148
+ - Lanczos (three lobes), Catmull-Rom and cubic B-spline kernels for `Resample`, `SampleRaster` and `ResampleMethod`.
149
+ - Output areas: `pixel_size_m` and `extent_m` (`extent_deg` on a body) as `{"center": [x, y], "size": [w, h]}` or `{"min": [x, y], "max": [x, y]}`, defaulting to a raster or chain source's extent and cell size; the grid starts at the extent's min corner, is snapped outward to whole cells and sampled at cell centers (`OutputAreaSpec`, `ExtentSpec`, `config::SnappedGrid`).
150
+ - Optional output paths: without a `path` the result is returned and nothing is written. `GenerateFromConfig` returns everything the outputs ask for, each computed once: `GeneratedGrid` holds the grid, heights, albedo, materials, photometry, placed craters and boulders and terrain mesh, `GeneratedOutputs` the body mesh or ICQ model, the report, `Grid()` and `Find()`; Python `GeneratedGrid` values are views without a copy.
151
+ - `terrain_mesh` outputs take `cutouts` (`{"min": [x, y], "max": [x, y]}` boxes), a `skirt_m` and a frame `site_deg` as [lon, lat].
152
+ - Terrain reports: output type `report` (`ReportOutput`) with an optional `path`, returned as `GeneratedOutputs::report` and written as JSON by `WriteOutputs`; per grid (`GridReport`) height and slope statistics, craters per power-of-2 diameter bin against the first crater layer's density and boulder counts and cover, with per-layer timings, backend, threads, layer seeds and version (`ReportGrid`, `ReportToJson`, `TerrainReport`, `LayerTimer`; Python `report_grid`, `report_to_json`, `TerrainReport.to_dict`).
153
+ - `GetMeshSize` and `FillMesh` (Python `get_mesh_size`, `fill_mesh`) size and write a height mesh into caller buffers laid out as Chrono's ChVector3d and ChVector3i arrays or NumPy (N, 3) float64 and (M, 3) int32 arrays, with no copy; `FillHeights` (Python `fill_heights`) evaluates into a caller buffer; `TriangleMesh.positions` and `TriangleMesh.triangles` are NumPy views without a copy.
154
+ - Piecewise uniform size-frequency distributions (`piecewise_uniform`): counts per diameter band, given absolutely or as shares of a total.
155
+ - Piecewise value distributions, uniform within bins drawn by weight, and `freshness` crater ages that draw each crater's freshness from a value distribution.
156
+ - Radial wall marks on craters, ridges and grooves down the wall that are strongest where it is steepest.
157
+ - Craters on slopes: floors offset downslope and rims and ejecta lowered upslope (Plescia et al. 2019), and faster wear toward a critical gradient (Roering et al. 1999).
158
+ - Manual craters with an explicit rim-to-floor depth and rim height in place of what the degradation model and age give; diffusion profiles solve for the age that reaches the depth.
159
+ - Thomas cluster process for boulder clusters, with Poisson-scattered centers whose clusters add where they overlap.
160
+ - Boulders limited to a maximum slope, optionally rolling down steeper ground to gather at its foot.
161
+ - Manual boulders that fix any of their height, burial, yaw, lean, tilt, rest, wear and shape seed; unset fields are drawn as for generated boulders, and fixed ones are neither re-settled nor broken.
162
+ - Manual-only layers: boulder layers with `generate_random` off place only their `manual` boulders, and `CraterLayer::Manual` and `BoulderLayer::Manual` (Python `CraterLayer.manual`, `BoulderLayer.manual`) make layers of only the given craters or boulders.
163
+ - Density maps from GeoTIFFs or constants: a scale, a count in a diameter range, or an areal fraction such as rock abundance, which set crater and boulder densities point by point.
164
+ - Size slope maps that bend boulder sizes into a local power law, from an exponent or a mean diameter map.
165
+ - Crater and boulder catalogs with a completeness limit, above which they stand in for generated features.
166
+ - Rock albedo (`rocks`): boulders brighter than the regolith (Holt 1981; Marshal et al. 2023), and a speckle of the share of each sample covered by boulders too small to resolve.
167
+ - Slope albedo (`slopes`): steep ground kept immature by mass wasting, its optical maturity rising with slope beyond 20 degrees (Ikeda et al. 2022; Lucey et al. 2014).
168
+ - Crater shaping and datum fitting on the GPU on spheres, ellipsoids and shape models, not only on planes.
169
+ - `fade_px` and `fade_shape` on crater `apply` and boulder layers: the resolution fade as its start and end output samples and its curve.
170
+ - Configurations are checked against every field's documented range, and errors name the exact field, such as `layers[2].reach`.
171
+ - Configuration reference in the documentation, generated from the schema at build time, and machine-readable value ranges in the schema.
172
+ - Python options classes document every field with its description and unit, and gain `validate()` and a readable `repr`.
173
+
174
+ ### Changed
175
+
176
+ - Breaking: the configuration's `base` is now `source`, and the region layer is now `masked`; old keys and types are rejected.
177
+ - Breaking: raster sources upsample instead of resampling: a raster source's grid is always its file's, and evaluating it over a finer grid gives finer cells; `RasterSourceOptions` and `GeoTiffSourceOptions` take an `upsampler` and an `effectivePixelSize`.
178
+ - Breaking: outputs give their area as `pixel_size_m` and `extent_m` in place of `region` (`width`, `height`, `pixel_size`, `centre_x`, `centre_y`) and of `spacing` on crater lists, boulder lists and boulder models; both are required without a raster or chain source.
179
+ - Breaking: on a raster or chain source, craters, secondaries, dunes and bedforms leave out by default what is at least 4 source cells across (`source_resolves_px`); set it to `null` for the 0.1.0 output.
180
+ - Breaking: every angle key in configurations and the Python options classes is in degrees and ends in `_deg`, azimuths counter-clockwise from +x (local east), and the rest of the Python API follows with `_deg` names and arguments; the C++ library keeps radians.
181
+ - Breaking: crater and boulder size keys carry their units (`_m`, `_px`), in configurations and the Python options classes alike, and crater layers' `generate` is now `generate_random`; the old keys are rejected.
182
+ - Breaking: core types and functions are renamed with no aliases, `Terrain` to `TerrainGenerator`, `GenerateTerrain` to `GenerateFromConfig`, `TerrainConfig` to `TerrainGenConfig`, `HeightMesh` to `BuildMesh`, `RegionLayer` to `MaskedLayer` and the rest in the table below, and Python names follow C++ names one to one.
183
+ - Breaking: sources take the sample spacing: `Source::Fill(heights, spacing)` and `Source::HeightAt(x, y, spacing)`, and Python `Source` subclasses define `height_at(x, y, spacing)` and `fill(heights, spacing)`; a source without bounds gives a grid without cells (`BoundedGrid`), and `Evaluate(generator)` needs a grid for it.
184
+ - The library, Python bindings, tests and examples are C++17 (0.1.0 needed C++20); public headers take `Span` in place of `std::span`.
185
+ - Defaults give a plausible lunar terrain at 1 m per pixel in which every height layer shows: craters from a production surface capped below the Trask equilibrium with steady-state ages, diffusion and irregular outlines, Martin, Parkes and Dunstan profiles, nominal NASA SP-8023 intercrater boulders (0.4% cover by rocks of 1 m and more), noise relief scaled to its wavelength, and visible roughness, bedforms and dunes.
186
+ - A boulder `coverage`, `qa`, `qb` or `ejecta.coverage` that no Golombek-Rapp sizes use is an error that names `"sizes": {"type": "golombek_rapp"}`.
187
+ - Boulder lists and models hold every boulder of the layer's diameter range; only the heightmap leaves out boulders too small to resolve.
188
+ - Boulder ejecta come from every crater layer before the boulder layer, not only the last one.
189
+ - Boulder models settle onto a stable face by default instead of balancing on an edge or corner.
190
+ - Density maps that count every feature take out the secondaries and blocks thrown from a layer's craters, and boulder patches and bedrock keep a map's mean, so nothing is counted twice.
191
+ - The `matched` diffusivity wears each crater to Fassett et al.'s visibility cutoff at the end of its equilibrium lifetime, for the layer's own profile.
192
+ - Crater shaping has one implementation, the kernel, on every surface; craters on bodies and custom profiles may differ from 0.1.0 in the last digits.
193
+ - Random streams and hashes are unified, so boulder, albedo, dune, bedform and pavement outputs for a given seed differ from 0.1.0; their statistics are unchanged.
194
+ - Every evaluation defaults to all threads, including `HeightAt` and `HeightsAt`.
195
+ - The `materials` module is folded into `pipeline` (material maps, `terraingen/pipeline/materials.h`) and `albedo` (Hapke photometry, `terraingen/albedo/photometry.h`), and `NoiseLayersAt` moves to `terraingen/sources/synthetic_terrain.h`.
196
+ - Python: `ExposureField.exposure` takes `(x, y, spacing=0.0, generator=None, layers=0)` like the other ground queries, unbounded options read as `None` instead of infinity, `write_outputs` returns paths and a subclass missing a required method raises `TypeError`.
197
+ - Written configurations leave out lists that are empty by default.
198
+ - Faster craters and boulders: ground reads for crater slopes and datums and beneath boulders are batched and spatially ordered, outputs over one area share the boulders placed for the first, boulder models are placed in parallel and ejecta craters found through a spatial index; the hero demo went from 433 s to about 10 s.
199
+ - Logs: generation logs each grid as it is evaluated with the time of every layer, the albedo and the materials and ends with each step's total and share; crater and boulder summaries log at debug level, boulders under boulders rather than craters, and `terraingen` ends with one line counting the files written.
200
+
201
+ ### Removed
202
+
203
+ - Tile schemes, tiles and the tile cache (`TileScheme`, `TileKey`, `EvaluateTile`, `EvaluateTiles`, `TileCache`, in C++ and Python): level of detail belongs to the renderer, and any grid evaluated alone already equals the same cells of a larger one; the point query examples move to a `queries` category.
204
+ - Resampling and low-passing raster sources: `pixelSize`, `resampling` and `lowPass` on `GeoTiffSourceOptions` and the config keys `pixel_size`, `resampling` and `low_pass` on raster sources; upsampling over a finer grid replaces them.
205
+ - `DetailLayer` and the `dem_detail` layer, which only restored the detail a low-passed source removed.
206
+ - `GridRegionSpec`, `config::RegionGrid` and `config::FeatureOutput`; an output's area is an `OutputAreaSpec`.
207
+ - Python `crater_blend_weight` (use `CraterBlend.weight`), `CraterAgeModel.lifetime_gyr` (use `lifetime_at`) and the flat selection aliases on crater irregularity, crater albedo and secondary options (use `selection`).
208
+
209
+ ### Fixed
210
+
211
+ - Freshness degradation never makes a crater deeper than fresh: basins shallower than the cutoff keep their fresh shape.
212
+ - Small craters inside larger ones on sloping ground no longer stand as raised mounds: datums are fitted to the slope-shaped relief that is applied.
213
+ - Secondary craters run on the GPU backend the terrain asks for instead of always on the CPU.
214
+ - A crater layer after a boulder layer no longer refits crater datums for every batch of ground reads.
215
+ - Tilted boulders are no longer cut off at grid edges and in point queries.
216
+ - Zero-area output areas and crater sizes below the models' range are rejected with a clear error instead of failing during generation.
217
+ - The library builds without warnings under Clang and MSVC.
218
+
219
+ ### Migrating from 0.1.0
220
+
221
+ Old keys and names are rejected rather than aliased. Angle keys are in degrees; sizes in meters unless they end in `_px`.
222
+
223
+ **Configuration, top level and sources**
224
+
225
+ | 0.1.0 | 0.2.0 |
226
+ | --- | --- |
227
+ | `base` | `source` (types `raster`, `chain`, `synthetic`) |
228
+ | `base.pixel_size`, `base.resampling` | `source.upsampling`; set the output's `pixel_size_m` for finer cells |
229
+ | `base.low_pass` | removed; `effective_pixel_size_m` for a DEM smoothed before it was saved |
230
+ | layer `dem_detail` | removed; use `source.upsampling` or a `spectral_continuation` layer |
231
+ | `body.metres_per_unit` (`shape_model`) | `body.meters_per_unit` |
232
+
233
+ **Configuration, outputs**
234
+
235
+ | 0.1.0 | 0.2.0 |
236
+ | --- | --- |
237
+ | `region.pixel_size` | `pixel_size_m` |
238
+ | `region.width`, `height`, `centre_x`, `centre_y` | `extent_m: {"center": [x, y], "size": [width * pixel_size, height * pixel_size]}` (`extent_deg` on a body) |
239
+ | `spacing` on `crater_list`, `boulder_list`, `boulder_models` | `pixel_size_m` |
240
+ | `path` required | `path` optional |
241
+ | `crease_angle` (`boulder_models`) | `crease_angle_deg` |
242
+
243
+ **Configuration, layers**
244
+
245
+ | 0.1.0 | 0.2.0 |
246
+ | --- | --- |
247
+ | layer `region` | layer `masked` |
248
+ | craters `generate` | `generate_random` |
249
+ | craters `min_diameter`, `max_diameter` | `min_diameter_m`, `max_diameter_m` |
250
+ | craters `apply.fade` {`start_samples`, `end_samples`, `shape`} | `apply.fade_px` [start, end], `apply.fade_shape` |
251
+ | crater `irregularity.heading`, `heading_spread` | `heading_deg`, `heading_spread_deg` |
252
+ | craters `apply.datum` `"centre_height"` | `"center_height"` |
253
+ | secondaries `min_diameter`, `max_diameter`, `min_primary_diameter`, `max_primary_diameter` | the same with `_m` |
254
+ | secondaries `width_degrees`, `min_half_angle_degrees` | `width_deg`, `min_half_angle_deg` |
255
+ | boulders `min_diameter`, `max_diameter` | `min_diameter_m`, `max_diameter_m` |
256
+ | boulders `fade` {`start_samples`, `end_samples`, `shape`} | `fade_px` [start, end], `fade_shape` |
257
+ | boulders `exposure_spacing` | `ground_spacing_m` |
258
+ | boulders `max_lean`, `max_tilt` | `max_lean_deg`, `max_tilt_deg` |
259
+ | boulders `patches.size`, `clusters.spacing`, `clusters.radius` | `patches.size_m`, `clusters.spacing_m`, `clusters.radius_m` |
260
+ | boulders `ejecta.min_crater_diameter`, `ejecta.regolith_thickness` | `ejecta.min_crater_diameter_m`, `ejecta.regolith_thickness_m` |
261
+ | boulders `fragmentation.min_diameter`, `relief_range.min_diameter`, `relief_range.max_diameter` | the same with `_m` |
262
+ | boulders `models.min_diameter`, `models.max_diameter`, `models.min_samples`, `models.max_samples` | `models.min_diameter_m`, `models.max_diameter_m`, `models.min_px`, `models.max_px` |
263
+ | manual boulders `yaw`, `lean`, `tilt`, `tilt_azimuth` | `yaw_deg`, `lean_deg`, `tilt_deg`, `tilt_azimuth_deg` |
264
+ | ventifacts `wind_azimuth`, `second_wind_azimuth`, `min_angle`, `max_angle` | the same with `_deg` |
265
+ | dunes `wind_azimuth`, `azimuth_spread`, `slip_face_angle`, `stoss_slope`, `flank_slope` | the same with `_deg` |
266
+ | bedforms `wind_azimuth`, `azimuth_spread` | `wind_azimuth_deg`, `azimuth_spread_deg` |
267
+ | strata `dip`, `dip_azimuth` | `dip_deg`, `dip_azimuth_deg` |
268
+ | pavement `max_tilt` | `max_tilt_deg` |
269
+ | sand shadow `wind_azimuth`, `flank_angle` | `wind_azimuth_deg`, `flank_angle_deg` |
270
+ | albedo `hue`, `hue_noise`, `heading` | `hue_deg`, `hue_noise_deg`, `heading_deg` |
271
+ | albedo `*_degrees` (`width_degrees`, `streak_width_degrees`, `jet_angle_degrees`, `steep_slope_degrees` and the rest) | `*_deg` |
272
+ | materials `roughness` | `roughness_deg` |
273
+
274
+ **C++ API**
275
+
276
+ | 0.1.0 | 0.2.0 |
277
+ | --- | --- |
278
+ | `Terrain` (`pipeline/terrain.h`) | `TerrainGenerator` (`pipeline/generator.h`) |
279
+ | `EvaluateAt`, `EvaluatePoints` | `HeightAt`, `HeightsAt` |
280
+ | `ValidateTerrain`, `BuildTerrain` | `ValidateGenerator`, `BuildGenerator` |
281
+ | `GenerateTerrain`, `GeneratedTerrain` (`.terrain`) | `GenerateFromConfig`, `GeneratedOutputs` (`.generator`) |
282
+ | `TerrainConfig` | `TerrainGenConfig` |
283
+ | `ConfigSummary::base` | `ConfigSummary::source` |
284
+ | `HeightMesh`, `HeightMeshOptions` (`pipeline/height_mesh.h`) | `BuildMesh`, `BuildMeshOptions` (`pipeline/mesh_build.h`) |
285
+ | `RegionLayer` (`layers/region.h`), `RegionShape::centre` | `MaskedLayer` (`layers/masked.h`), `RegionShape::center` |
286
+ | `Source::Fill(heights)`, `Source::HeightAt(x, y)` | `Source::Fill(heights, spacing)`, `Source::HeightAt(x, y, spacing)` |
287
+ | `GeoTiffSourceOptions::pixelSize`, `resampling`, `lowPass` | `upsampler`, `effectivePixelSize`; evaluate over a finer grid |
288
+ | `CraterLayerOptions::generate` | `CraterLayerOptions::generateRandom` |
289
+ | `BoulderLayerOptions::exposureSpacing` | `BoulderLayerOptions::groundSpacing` |
290
+ | `DetailLayer`, `TileScheme`, `TileKey`, `TileCache`, `EvaluateTile`, `EvaluateTiles` | removed |
291
+ | `GridRegionSpec`, `config::RegionGrid`, `config::FeatureOutput` | `OutputAreaSpec`, `ExtentSpec`, `config::SnappedGrid` |
292
+ | `terraingen/materials/` | `terraingen/pipeline/materials.h`, `terraingen/albedo/photometry.h` |
293
+ | `NoiseLayersAt` in `layers/noise_relief.h` | `sources/synthetic_terrain.h` |
294
+ | `KilometrePowerLaw`, `PowerLawCoefficientFromKilometres` | `KilometerPowerLaw`, `PowerLawCoefficientFromKilometers` |
295
+ | `CraterDatum::CentreHeight` | `CraterDatum::CenterHeight` |
296
+ | `CubeSphereCells::Neighbours`, `SampleAtCentres` | `CubeSphereCells::Neighbors`, `SampleAtCenters` |
297
+ | `MeshMaterial::colour`, `FeatureCell::centre`, `BoulderFragment::centre` | `MeshMaterial::color`, `FeatureCell::center`, `BoulderFragment::center` |
298
+ | `ShapeModelSurfaceSpec::metresPerUnit` | `ShapeModelSurfaceSpec::metersPerUnit` |
299
+ | `TERRAINGEN_API_VERSION` 1 | 2 |
300
+
301
+ **Python API**
302
+
303
+ | 0.1.0 | 0.2.0 |
304
+ | --- | --- |
305
+ | `Terrain` | `TerrainGenerator` |
306
+ | `evaluate_at`, `evaluate_points` | `height_at`, `heights_at` |
307
+ | `build_terrain`, `generate_terrain`, `GeneratedTerrain` | `build_generator`, `generate_from_config`, `GeneratedOutputs` |
308
+ | `Config`, `Config.from_json`, `Config.load`, `Config.to_json` | `TerrainGenConfig`, `parse_config`, `load_config`, `config_to_json` |
309
+ | `Config.base_grid` | `TerrainGenConfig.source_grid` |
310
+ | `height_mesh` | `build_mesh` |
311
+ | `RegionLayer` | `MaskedLayer` |
312
+ | keyword `terrain=` | `generator=` (and `generated=` for `write_outputs`) |
313
+ | `Source.height_at(x, y)`, `Source.fill(heights)` | `height_at(x, y, spacing)`, `fill(heights, spacing)` |
314
+ | `GeoTiffSource(pixel_size=, resampling=, low_pass=)` | `GeoTiffSource(upsampler=, effective_pixel_size=, crop=)` |
315
+ | `version`, `api_version`, `build_info` | `get_version`, `get_api_version`, `get_build_info` |
316
+ | `boulder_fillet_height`, `perlin_noise3` | `fillet_height`, `perlin_noise3_precise` |
317
+ | `TriangleMesh.subdivided` | `TriangleMesh.subdivide` |
318
+ | `Raster.nodata`, `GeoTiffInfo.nodata` | `Raster.no_data`, `GeoTiffInfo.no_data` |
319
+ | `ValueDistributionKind` | `ValueDistribution.Kind` |
320
+ | `CraterGenerationOptions.min_diameter`, `max_diameter` | `d_min`, `d_max` |
321
+ | `CraterFeatures.write` | `CraterFeatures.write_list` |
322
+ | `cell_of`, `point_of`, `level_for`, `outline_of` | `cell_at`, `coordinates`, `resolving_level`, `irregular_outline` |
323
+ | `min_diameter_for_count`, `singer_range_for_size` | `count_limit_diameter`, `singer_max_range` |
324
+ | `SplotchOptions`, `SlopeMaturityOptions` | `SplotchAlbedoOptions`, `SlopeAlbedoOptions` |
325
+ | angles in radians (`SyntheticAlbedo(hue=)`, `hsv_to_rgb(hue)`, `RigidTransform.rotation_x(angle)`, `Boulder.yaw`, ...) | degrees with `_deg` names (`hue_deg=`, `angle_deg`, `Boulder.yaw_deg`, ...) |
326
+ | `crater_blend_weight`, `CraterAgeModel.lifetime_gyr` | `CraterBlend.weight`, `lifetime_at` |
327
+ | `KilometrePowerLaw`, `power_law_coefficient_from_kilometres` | `KilometerPowerLaw`, `power_law_coefficient_from_kilometers` |
328
+ | `CraterDatum.CENTRE_HEIGHT` | `CraterDatum.CENTER_HEIGHT` |
329
+ | `CubeSphereCells.neighbours` | `CubeSphereCells.neighbors` |
330
+ | `RasterGrid.centred(centre=)` | `RasterGrid.centered(center=)` |
331
+ | keyword `centre=` (`FlatSource`, `Surface.offset`, `Surface.locate`), `metres=` (`Surface.expand`) | `center=`, `meters=` |
332
+ | `MeshMaterial(colour=)`, `MeshMaterial.colour` | `MeshMaterial(color=)`, `MeshMaterial.color` |
333
+ | `read_icq(metres_per_unit=)`, `write_icq(metres_per_unit=)` | `meters_per_unit=` |
334
+ | `TileScheme`, `TileKey`, `TileCache`, `evaluate_tile`, `evaluate_tiles` | removed |
335
+
336
+ ## [0.1.0] - 2026-10-18
337
+
338
+ Initial release.
339
+
340
+ ### Added
341
+
342
+ - C++20 library with Python bindings (`terraingenpy` on PyPI) for generating terrain from scratch or adding detail to existing DEMs.
343
+ - Craters and boulders from published size-frequency distributions, with crater ages, profiles, degradation, irregularity, secondaries and ejecta.
344
+ - Procedural 3D boulder models, and small boulders baked into the heightmap.
345
+ - Synthetic albedo with crater ejecta and rays that fade with age.
346
+ - Geologic features: dunes and ripples, layered strata, fractured bedrock, ventifacts and sand pooled in lows or behind boulders.
347
+ - Planes, spheres and ellipsoids, whole-body meshes, tiles and point queries.
348
+ - Deterministic output for a seed on any grid, tile or thread count.
349
+ - GPU acceleration on Vulkan, CUDA and Metal, detected at run time.
350
+ - `terraingen` command-line interface driven by JSON configurations.
351
+ - Examples in C++, Python and JSON.
352
+ - Release archives for Linux, macOS and Windows, Debian packages, and a Docker image.
353
+
354
+ [Unreleased]: https://github.com/alexmaietta/terraingen/compare/v0.2.0...HEAD
355
+ [0.2.0]: https://github.com/alexmaietta/terraingen/compare/v0.1.0...v0.2.0
356
+ [0.1.0]: https://github.com/alexmaietta/terraingen/releases/tag/v0.1.0