|
FUNCTION derive_function_range (func : maths_function) : tuple_space; LOCAL typenames : SET OF STRING := stripped_typeof ( func ) ; tspace : tuple_space := make_listed_product_space ( [ ] ) ; m , n : nonnegative_integer := 0 ; END_LOCAL ; IF 'finite_function' IN typenames THEN RETURN ( derive_finite_function_range ( func \ finite_function . pairs ) ) ; END_IF ; IF 'constant_function' IN typenames THEN RETURN ( one_tuples_of ( make_finite_space ( [ func \ constant_function . sole_output ] ) ) ) ; END_IF ; IF 'selector_function' IN typenames THEN tspace := func . domain ; IF ( space_dimension ( tspace ) = 1 ) AND ( ( schema_prefix + 'tuple_space' ) IN TYPEOF ( tspace ) ) THEN tspace := factor1 ( tspace ) ; END_IF ; RETURN ( one_tuples_of ( factor_space ( tspace , func \ selector_function . selector ) ) ) ; END_IF ; IF 'elementary_function' IN typenames THEN RETURN ( derive_elementary_function_range ( func \ elementary_function . func_id ) ) ; END_IF ; IF 'restriction_function' IN typenames THEN RETURN ( one_tuples_of ( func \ restriction_function . operand ) ) ; END_IF ; IF 'repackaging_function' IN typenames THEN tspace := func \ repackaging_function . operand . range ; IF func \ repackaging_function . output_repack = ro_wrap_as_tuple THEN tspace := one_tuples_of ( tspace ) ; END_IF ; IF func \ repackaging_function . output_repack = ro_unwrap_tuple THEN tspace := factor1 ( tspace ) ; END_IF ; IF func \ repackaging_function . selected_output > 0 THEN tspace := one_tuples_of ( factor_space ( tspace , func \ repackaging_function . selected_output ) ) ; END_IF ; RETURN ( tspace ) ; END_IF ; IF 'reindexed_array_function' IN typenames THEN RETURN ( func \ unary_generic_expression . operand \ maths_function . range ) ; END_IF ; IF 'series_composed_function' IN typenames THEN RETURN ( func \ series_composed_function . operands [ SIZEOF ( func \ series_composed_function . operands ) ] . range ) ; END_IF ; IF 'parallel_composed_function' IN typenames THEN RETURN ( func \ parallel_composed_function . final_function . range ) ; END_IF ; IF 'explicit_table_function' IN typenames THEN IF 'listed_real_data' IN typenames THEN RETURN ( one_tuples_of ( the_reals ) ) ; END_IF ; IF 'listed_integer_data' IN typenames THEN RETURN ( one_tuples_of ( the_integers ) ) ; END_IF ; IF 'listed_logical_data' IN typenames THEN RETURN ( one_tuples_of ( the_logicals ) ) ; END_IF ; IF 'listed_string_data' IN typenames THEN RETURN ( one_tuples_of ( the_strings ) ) ; END_IF ; IF 'listed_complex_number_data' IN typenames THEN RETURN ( one_tuples_of ( the_complex_numbers ) ) ; END_IF ; IF 'listed_data' IN typenames THEN RETURN ( one_tuples_of ( func \ listed_data . value_range ) ) ; END_IF ; IF 'externally_listed_data' IN typenames THEN RETURN ( one_tuples_of ( func \ externally_listed_data . value_range ) ) ; END_IF ; IF 'linearized_table_function' IN typenames THEN RETURN ( func \ linearized_table_function . source . range ) ; END_IF ; IF 'basic_sparse_matrix' IN typenames THEN RETURN ( func \ basic_sparse_matrix . val . range ) ; END_IF ; RETURN ( ? ) ; END_IF ; IF 'homogeneous_linear_function' IN typenames THEN RETURN ( one_tuples_of ( make_uniform_product_space ( factor1 ( func \ homogeneous_linear_function . mat . range ) , func \ homogeneous_linear_function . mat \ explicit_table_function . shape [ 3 - func \ homogeneous_linear_function . sum_index ] ) ) ) ; END_IF ; IF 'general_linear_function' IN typenames THEN RETURN ( one_tuples_of ( make_uniform_product_space ( factor1 ( func \ general_linear_function . mat . range ) , func \ general_linear_function . mat \ explicit_table_function . shape [ 3 - func \ general_linear_function . sum_index ] ) ) ) ; END_IF ; IF 'b_spline_basis' IN typenames THEN RETURN ( one_tuples_of ( make_uniform_product_space ( the_reals , func \ b_spline_basis . num_basis ) ) ) ; END_IF ; IF 'b_spline_function' IN typenames THEN tspace := factor1 ( func \ b_spline_function . coef . domain ) ; m := SIZEOF ( func \ b_spline_function . basis ) ; n := space_dimension ( tspace ) ; IF m = n THEN RETURN ( one_tuples_of ( the_reals ) ) ; END_IF ; IF m = n - 1 THEN RETURN ( one_tuples_of ( make_uniform_product_space ( the_reals , factor_space ( tspace , n ) \ finite_integer_interval . size ) ) ) ; END_IF ; tspace := extract_factors ( tspace , m + 1 , n ) ; RETURN ( one_tuples_of ( make_function_space ( sc_equal , tspace , sc_subspace , number_superspace_of ( func \ b_spline_function . coef . range ) ) ) ) ; END_IF ; IF 'rationalize_function' IN typenames THEN tspace := factor1 ( func \ rationalize_function . fun . range ) ; n := space_dimension ( tspace ) ; RETURN ( one_tuples_of ( make_uniform_product_space ( number_superspace_of ( factor1 ( tspace ) ) , n - 1 ) ) ) ; END_IF ; IF 'partial_derivative_function' IN typenames THEN RETURN ( drop_numeric_constraints ( func \ partial_derivative_function . derivand . range ) ) ; END_IF ; IF 'definite_integral_function' IN typenames THEN RETURN ( drop_numeric_constraints ( func \ definite_integral_function . integrand . range ) ) ; END_IF ; IF 'abstracted_expression_function' IN typenames THEN RETURN ( one_tuples_of ( values_space_of ( func \ abstracted_expression_function . expr ) ) ) ; END_IF ; IF 'expression_denoted_function' IN typenames THEN RETURN ( values_space_of ( func \ expression_denoted_function . expr ) \ function_space . range_argument ) ; END_IF ; IF 'application_defined_function' IN typenames THEN RETURN ( func \ application_defined_function . explicit_range ) ; END_IF ; RETURN ( ? ) ; END_FUNCTION; -- derive_function_range |
|
public class FDerive_function_range public static Value run(SdaiContext _context, Value func) |