FUNCTION derive_function_range

(* SCHEMA step_merged_ap_schema; *)
-- IN AP242
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 : nonnegative_integer := 0;
      n : nonnegative_integer := 0;
      temp : 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 'IMPORTED_POINT_FUNCTION' IN typenames THEN
         temp := dimension_of(func\imported_point_function.geometry);
         RETURN (one_tuples_of(make_uniform_product_space(the_reals, temp)));
      END_IF;
      IF 'IMPORTED_CURVE_FUNCTION' IN typenames THEN
         temp := dimension_of(func\imported_curve_function.geometry);
         RETURN (one_tuples_of(make_uniform_product_space(the_reals, temp)));
      END_IF;
      IF 'IMPORTED_SURFACE_FUNCTION' IN typenames THEN
         temp := dimension_of(func\imported_surface_function.geometry);
         RETURN (one_tuples_of(make_uniform_product_space(the_reals, temp)));
      END_IF;
      IF 'IMPORTED_VOLUME_FUNCTION' IN typenames THEN
         temp := dimension_of(func\imported_volume_function.geometry);
         RETURN (one_tuples_of(make_uniform_product_space(the_reals, temp)));
      END_IF;
      IF 'APPLICATION_DEFINED_FUNCTION' IN typenames THEN
         RETURN (func\application_defined_function.explicit_range);
      END_IF;
      RETURN (?);
END_FUNCTION;

Referenced By

Defintion derive_function_range is references by the following definitions:
DefinitionType
 maths_function ENTITY


[Top Level Definitions] [Exit]

Generated by STEP Tools® EXPRESS to HTML Converter
2017-01-19T11:17:24-05:00