# 
# RiskScape™ Copyright New Zealand Institute for Earth Science Limited
# (Earth Sciences New Zealand) is distributed for research purposes only
# under the terms of AGPLv3.
# 
# RiskScape™ Copyright 2025 New Zealand Institute for Earth Science
# Limited (Earth Sciences New Zealand). All rights reserved. Source code
# available under the AGPLv3.
# 
# This program is free software: you can redistribute it and/or modify it under
#  the terms of the GNU Affero General Public License as published by the Free
#  Software Foundation, either version 3 of the License, or (at your option) any
#  later version.
# 
# This program is distributed for RESEARCH PURPOSES ONLY, in the hope that it will
# be useful for research and education initiatives.
# 
# If you are not a researcher, or you are a researcher who wishes to use this
# program on terms other than AGPLv3 (including those who wish to restrict the
# distribution of any source code created using this program), please contact:
# https://riskscape.org.nz
# 
# This program is distributed WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Affero General Public License for more details.  You should have received a copy
# of the GNU Affero General Public License along with this program.  If not, see
# <http://www.gnu.org/licenses/>.
# 
# By way of summary only, under the AGPLv3:
#     • Permissions of this strongest copyleft license are conditioned
#       on making available complete source code of licensed works and
#       modifications, which include larger works using a licensed work,
#       under the same license.
#     • Copyright and license notices must be preserved.
#     • Contributors provide an express grant of patent rights.
#     • When a modified version is used to provide a service over a
#       network, the complete source code of the modified version must be made
#       available.
# 
[function hello_world]
framework = expression
source = (who, number) -> map(range(1, number + 1), count -> 'Hello ' + who + ' x' + str(count))

[function is_residential_building]
framework = expression
description = Returns true if a given building may be a residential building or not. \
    Note that this is a best guess if the input data is missing a use category attribute
source = """
(building) -> building.Use_Cat = '' or building.Use_Cat = 'Residential' or building.Use_Cat = 'Fale'
"""

[model Exposed-Population]
framework = pipeline
pipeline = """
# generate a household population for the given exposure-layer
subpipeline('household_population.txt', parameters: { exposure: $exposure,
                                                      regional_population: $regional_population,
                                                      region_buffer_m: $region_buffer_m
                                                    })
 ->
# work out the household population exposed to the hazard
subpipeline('is_exposed.txt', parameters: { hazard: $hazard,
                                            min_depth: $min_depth,
                                            exposed_value: Est_HH_Population
                                          })
 ->
# report the exposed results by region
subpipeline('regional_report.txt', parameters: { report_depths: $report_depths,
                                                 aggregate: { 
                                                        count(exposed) as Exposed_buildings,
                                                        round(sum(exposed_value)) as Exposed_population
                                                 },
                                               })
"""
param.exposure = 'data/Buildings_SE_Upolu.shp'
param.regional_population = 'data/Samoa_population.shp'
region_buffer_m = 10000
param.hazard = 'data/MaxEnv_All_Scenarios_10m.tif'
param.min_depth = 0.0
report_depths = [1, 2, 3]


