/* file: kinematic_pair.swift 	 generated: Mon Jan  3 16:32:52 2022 */

/* This file was generated by the EXPRESS to Swift translator "exp2swift", 
    derived from STEPcode (formerly NIST's SCL).
 exp2swift version: v.1.0.1, derived from stepcode v0.8 as of 2019/11/23 
 WARNING: You probably don't want to edit it since your modifications 
    will be lost if exp2swift is used to regenerate it.
 */

 
import SwiftSDAIcore

extension AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF {
//MARK: -ENTITY DEFINITION in EXPRESS
/*

  ENTITY kinematic_pair
    ABSTRACT SUPERTYPE OF ( 
        ONEOF ( 
            high_order_kinematic_pair, 
            low_order_kinematic_pair_with_motion_coupling, 
            low_order_kinematic_pair ) 
        ANDOR
        actuated_kinematic_pair )
    SUBTYPE OF ( geometric_representation_item, item_defined_transformation );
      joint                           : kinematic_joint;
      SELF\item_defined_transformation.transform_item_1 : rigid_placement;
      SELF\item_defined_transformation.transform_item_2 : rigid_placement;
    DERIVE
      associated_link_representations_1 : SET [1 : ?] OF kinematic_link_representation := 
                                          sort_link_associations( link_representation_associations, TRUE );
      associated_link_representations_2 : SET [1 : ?] OF kinematic_link_representation := 
                                          sort_link_associations( link_representation_associations, FALSE );
      SELF\item_defined_transformation.name : label := SELF\representation_item.name;
    INVERSE
      link_representation_associations : SET [1 : ?] OF pair_representation_relationship FOR 
                                            transformation_operator -- defined in ENTITY: pair_representation_relationship;
  END_ENTITY; -- kinematic_pair (line:18753 file:ap242ed2_mim_lf_v1.101.TY.exp)

*/


//MARK: - ALL DEFINED ATTRIBUTES
/*
  SUPER- ENTITY(1)	representation_item
    ATTR:  name,	TYPE: label -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUPER- ENTITY(2)	geometric_representation_item
    ATTR:  dim,	TYPE: dimension_count -- DERIVED
      := dimension_of( SELF )


  SUPER- ENTITY(3)	item_defined_transformation
    ATTR:  name,	TYPE: label -- EXPLICIT (DYNAMIC)	(AMBIGUOUS/MASKED)
      -- possibly overriden by
          ENTITY: kinematic_pair,	TYPE: label	(as DERIVED)

    ATTR:  description,	TYPE: OPTIONAL text -- EXPLICIT

    ATTR:  transform_item_1,	TYPE: representation_item -- EXPLICIT
      -- possibly overriden by
      *** ENTITY: kinematic_pair,	TYPE: rigid_placement
          ENTITY: link_motion_transformation,	TYPE: rigid_placement
          ENTITY: transformation_with_derived_angle,	TYPE: angle_direction_reference_with_a2p3d_select

    ATTR:  transform_item_2,	TYPE: representation_item -- EXPLICIT
      -- possibly overriden by
      *** ENTITY: kinematic_pair,	TYPE: rigid_placement
          ENTITY: link_motion_transformation,	TYPE: kinematic_path
          ENTITY: transformation_with_derived_angle,	TYPE: axis2_placement_3d


  ENTITY(SELF)	kinematic_pair
    ATTR:  joint,	TYPE: kinematic_joint -- EXPLICIT

    REDCR: transform_item_1,	TYPE: rigid_placement -- EXPLICIT
      -- OVERRIDING ENTITY: item_defined_transformation

    REDCR: transform_item_2,	TYPE: rigid_placement -- EXPLICIT
      -- OVERRIDING ENTITY: item_defined_transformation

    ATTR:  associated_link_representations_1,	TYPE: SET [1 : ?] OF kinematic_link_representation -- DERIVED
      := sort_link_associations( link_representation_associations, TRUE )

    ATTR:  associated_link_representations_2,	TYPE: SET [1 : ?] OF kinematic_link_representation -- DERIVED
      := sort_link_associations( link_representation_associations, FALSE )

    REDCR: name,	TYPE: label -- DERIVED (DYNAMIC)	(MASKING)
      := SELF\representation_item.name
      -- OVERRIDING ENTITY: item_defined_transformation

    ATTR:  link_representation_associations,	TYPE: SET [1 : ?] OF pair_representation_relationship -- INVERSE
      FOR transformation_operator;


  SUB- ENTITY(5)	gear_pair_with_range
    ATTR:  lower_limit_actual_rotation_1,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  upper_limit_actual_rotation_1,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT


  SUB- ENTITY(6)	gear_pair
    ATTR:  radius_first_link,	TYPE: length_measure -- EXPLICIT

    ATTR:  radius_second_link,	TYPE: length_measure -- EXPLICIT

    ATTR:  bevel,	TYPE: plane_angle_measure -- EXPLICIT

    ATTR:  helical_angle,	TYPE: plane_angle_measure -- EXPLICIT

    ATTR:  gear_ratio,	TYPE: REAL -- EXPLICIT


  SUB- ENTITY(7)	linear_flexible_and_pinion_pair
    ATTR:  pinion_radius,	TYPE: length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(8)	rack_and_pinion_pair_with_range
    ATTR:  lower_limit_rack_displacement,	TYPE: OPTIONAL length_measure -- EXPLICIT

    ATTR:  upper_limit_rack_displacement,	TYPE: OPTIONAL length_measure -- EXPLICIT


  SUB- ENTITY(9)	rack_and_pinion_pair
    ATTR:  pinion_radius,	TYPE: length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(10)	screw_pair_with_range
    ATTR:  lower_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(11)	screw_pair
    ATTR:  pitch,	TYPE: length_measure -- EXPLICIT


  SUB- ENTITY(12)	low_order_kinematic_pair_with_motion_coupling
    (no local attributes)

  SUB- ENTITY(13)	actuated_kinematic_pair
    ATTR:  t_x,	TYPE: OPTIONAL actuated_direction -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  t_y,	TYPE: OPTIONAL actuated_direction -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  t_z,	TYPE: OPTIONAL actuated_direction -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  r_x,	TYPE: OPTIONAL actuated_direction -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  r_y,	TYPE: OPTIONAL actuated_direction -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  r_z,	TYPE: OPTIONAL actuated_direction -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(14)	point_on_planar_curve_pair_with_range
    ATTR:  range_on_pair_curve,	TYPE: trimmed_curve -- EXPLICIT

    ATTR:  lower_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_pitch,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_pitch,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(15)	point_on_planar_curve_pair
    ATTR:  pair_curve,	TYPE: curve -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  orientation,	TYPE: BOOLEAN -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(16)	sliding_curve_pair
    (no local attributes)

  SUB- ENTITY(17)	rolling_curve_pair
    (no local attributes)

  SUB- ENTITY(18)	planar_curve_pair_range
    ATTR:  range_on_curve_1,	TYPE: trimmed_curve -- EXPLICIT

    ATTR:  range_on_curve_2,	TYPE: trimmed_curve -- EXPLICIT


  SUB- ENTITY(19)	planar_curve_pair
    ATTR:  curve_1,	TYPE: curve -- EXPLICIT

    ATTR:  curve_2,	TYPE: curve -- EXPLICIT

    ATTR:  orientation,	TYPE: BOOLEAN -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(20)	linear_flexible_and_planar_curve_pair
    ATTR:  pair_curve,	TYPE: curve -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  orientation,	TYPE: BOOLEAN -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(21)	point_on_surface_pair_with_range
    ATTR:  range_on_pair_surface,	TYPE: rectangular_trimmed_surface -- EXPLICIT

    ATTR:  lower_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_pitch,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_pitch,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(22)	point_on_surface_pair
    ATTR:  pair_surface,	TYPE: surface -- EXPLICIT


  SUB- ENTITY(23)	surface_pair_with_range
    ATTR:  range_on_surface_1,	TYPE: rectangular_trimmed_surface -- EXPLICIT

    ATTR:  range_on_surface_2,	TYPE: rectangular_trimmed_surface -- EXPLICIT

    ATTR:  lower_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(24)	rolling_surface_pair
    (no local attributes)

  SUB- ENTITY(25)	sliding_surface_pair
    (no local attributes)

  SUB- ENTITY(26)	surface_pair
    ATTR:  surface_1,	TYPE: surface -- EXPLICIT

    ATTR:  surface_2,	TYPE: surface -- EXPLICIT

    ATTR:  orientation,	TYPE: BOOLEAN -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(27)	high_order_kinematic_pair
    (no local attributes)

  SUB- ENTITY(28)	planar_pair_with_range
    ATTR:  lower_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_actual_translation_x,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_translation_x,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_actual_translation_y,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_translation_y,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(29)	planar_pair
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(30)	revolute_pair_with_range
    ATTR:  lower_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(31)	revolute_pair
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(32)	cylindrical_pair_with_range
    ATTR:  lower_limit_actual_translation,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_translation,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(33)	cylindrical_pair
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(34)	spherical_pair_with_range
    ATTR:  lower_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_pitch,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_pitch,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(35)	spherical_pair
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(36)	fully_constrained_pair
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(37)	low_order_kinematic_pair_with_range
    ATTR:  lower_limit_actual_rotation_x,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  upper_limit_actual_rotation_x,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  lower_limit_actual_rotation_y,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  upper_limit_actual_rotation_y,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  lower_limit_actual_rotation_z,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  upper_limit_actual_rotation_z,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  lower_limit_actual_translation_x,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_translation_x,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_actual_translation_y,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_translation_y,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_actual_translation_z,	TYPE: OPTIONAL length_measure -- EXPLICIT

    ATTR:  upper_limit_actual_translation_z,	TYPE: OPTIONAL length_measure -- EXPLICIT


  SUB- ENTITY(38)	homokinetic_pair
    (no local attributes)

  SUB- ENTITY(39)	universal_pair_with_range
    ATTR:  lower_limit_first_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  upper_limit_first_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  lower_limit_second_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    ATTR:  upper_limit_second_rotation,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT


  SUB- ENTITY(40)	universal_pair
    ATTR:  input_skew_angle,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT

    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    ATTR:  skew_angle,	TYPE: plane_angle_measure -- DERIVED
      := NVL( input_skew_angle, 0 )


  SUB- ENTITY(41)	spherical_pair_with_pin_and_range
    ATTR:  lower_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_yaw,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  lower_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_roll,	TYPE: OPTIONAL plane_angle_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(42)	spherical_pair_with_pin
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(43)	unconstrained_pair
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(44)	prismatic_pair_with_range
    ATTR:  lower_limit_actual_translation,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)

    ATTR:  upper_limit_actual_translation,	TYPE: OPTIONAL length_measure -- EXPLICIT	(AMBIGUOUS/MASKED)


  SUB- ENTITY(45)	prismatic_pair
    REDCR: t_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := TRUE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: t_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_x,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_y,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair

    REDCR: r_z,	TYPE: BOOLEAN -- DERIVED (DYNAMIC)	(AMBIGUOUS/MASKED)
      := FALSE
      -- OVERRIDING ENTITY: low_order_kinematic_pair


  SUB- ENTITY(46)	low_order_kinematic_pair
    ATTR:  t_x,	TYPE: BOOLEAN -- EXPLICIT (DYNAMIC)	(AMBIGUOUS/MASKED)
      -- possibly overriden by
          ENTITY: planar_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: revolute_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: cylindrical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: fully_constrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: universal_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: unconstrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: prismatic_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair_with_pin,	TYPE: BOOLEAN	(as DERIVED)

    ATTR:  t_y,	TYPE: BOOLEAN -- EXPLICIT (DYNAMIC)	(AMBIGUOUS/MASKED)
      -- possibly overriden by
          ENTITY: planar_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: revolute_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: cylindrical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: fully_constrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: universal_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: unconstrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: prismatic_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair_with_pin,	TYPE: BOOLEAN	(as DERIVED)

    ATTR:  t_z,	TYPE: BOOLEAN -- EXPLICIT (DYNAMIC)	(AMBIGUOUS/MASKED)
      -- possibly overriden by
          ENTITY: planar_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: revolute_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: cylindrical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: fully_constrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: universal_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: unconstrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: prismatic_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair_with_pin,	TYPE: BOOLEAN	(as DERIVED)

    ATTR:  r_x,	TYPE: BOOLEAN -- EXPLICIT (DYNAMIC)	(AMBIGUOUS/MASKED)
      -- possibly overriden by
          ENTITY: planar_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: revolute_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: cylindrical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: fully_constrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: universal_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: unconstrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: prismatic_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair_with_pin,	TYPE: BOOLEAN	(as DERIVED)

    ATTR:  r_y,	TYPE: BOOLEAN -- EXPLICIT (DYNAMIC)	(AMBIGUOUS/MASKED)
      -- possibly overriden by
          ENTITY: planar_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: revolute_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: cylindrical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: fully_constrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: universal_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: unconstrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: prismatic_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair_with_pin,	TYPE: BOOLEAN	(as DERIVED)

    ATTR:  r_z,	TYPE: BOOLEAN -- EXPLICIT (DYNAMIC)	(AMBIGUOUS/MASKED)
      -- possibly overriden by
          ENTITY: planar_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: revolute_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: cylindrical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: fully_constrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: universal_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: unconstrained_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: prismatic_pair,	TYPE: BOOLEAN	(as DERIVED)
          ENTITY: spherical_pair_with_pin,	TYPE: BOOLEAN	(as DERIVED)


*/


//MARK: - Partial Entity
  public final class _kinematic_pair : SDAI.PartialEntity {
    public override class var entityReferenceType: SDAI.EntityReference.Type {
      eKINEMATIC_PAIR.self
    }

    //ATTRIBUTES
    /// EXPLICIT ATTRIBUTE 
    public internal(set) var _joint: eKINEMATIC_JOINT // PLAIN EXPLICIT ATTRIBUTE

    /* override var _transform_item_1: sRIGID_PLACEMENT	//EXPLICIT REDEFINITION(eITEM_DEFINED_TRANSFORMATION) */

    /* override var _transform_item_2: sRIGID_PLACEMENT	//EXPLICIT REDEFINITION(eITEM_DEFINED_TRANSFORMATION) */

    /// DERIVE ATTRIBUTE
    internal func _associated_link_representations_1__getter(SELF: eKINEMATIC_PAIR) -> (SDAI.SET<
      eKINEMATIC_LINK_REPRESENTATION>/*[1:nil]*/ )?  {

      let _TEMP1 = SORT_LINK_ASSOCIATIONS(
        APRR: SELF.LINK_REPRESENTATION_ASSOCIATIONS, 
        ONE_NOT_TWO: SDAI.BOOLEAN(SDAI.TRUE))
      return SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>(bound1: SDAI.UNWRAP(SDAI.INTEGER(1)), bound2: (nil as 
        SDAI.INTEGER?), /*SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>*/_TEMP1)
    }

    /// DERIVE ATTRIBUTE
    internal func _associated_link_representations_2__getter(SELF: eKINEMATIC_PAIR) -> (SDAI.SET<
      eKINEMATIC_LINK_REPRESENTATION>/*[1:nil]*/ )?  {

      let _TEMP1 = SORT_LINK_ASSOCIATIONS(
        APRR: SELF.LINK_REPRESENTATION_ASSOCIATIONS, 
        ONE_NOT_TWO: SDAI.BOOLEAN(SDAI.FALSE))
      return SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>(bound1: SDAI.UNWRAP(SDAI.INTEGER(1)), bound2: (nil as 
        SDAI.INTEGER?), /*SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>*/_TEMP1)
    }

    /// DERIVE ATTRIBUTE REDEFINITION(origin: eITEM_DEFINED_TRANSFORMATION)
    /// - attribute value provider protocol conformance wrapper
    internal func _name__getter(complex: SDAI.ComplexEntity) -> tLABEL {
      let SELF = complex.entityReference( eKINEMATIC_PAIR.self )!
      return SDAI.UNWRAP( tLABEL(SELF.NAME) )
    }
    /// DERIVE ATTRIBUTE REDEFINITION(origin: eITEM_DEFINED_TRANSFORMATION)
    /// - gut of derived attribute logic
    internal func _name__getter(SELF: eKINEMATIC_PAIR) -> tLABEL {

      let _TEMP1 = SELF.GROUP_REF(eREPRESENTATION_ITEM.self)
      let _TEMP2 = _TEMP1?.NAME
      let value = _TEMP2
      return SDAI.UNWRAP( value )
    }

    /// INVERSE AGGREGATE ATTRIBUTE
    /// observing _pair_representation_relationship ._transformation_operator
    internal var _link_representation_associations: SDAI.SET<ePAIR_REPRESENTATION_RELATIONSHIP> {
      return __link_representation_associations.map{ $0.reference }
    }
    private var __link_representation_associations = SDAI.SET<
      SDAI.UnownedWrap<ePAIR_REPRESENTATION_RELATIONSHIP>>(bound1: SDAI.UNWRAP(SDAI.INTEGER(1)), bound2: (nil as 
      SDAI.INTEGER?), SDAI.EMPLY_AGGREGATE) // unowned backing store
    /// INVERSE AGGREGATE ATTR SUPPORT(ADDER)
    internal func _link_representation_associations__observeAddedReference(in complex: SDAI.ComplexEntity) {
      guard let newSource = complex.entityReference(ePAIR_REPRESENTATION_RELATIONSHIP.self) else { return }
      self.__link_representation_associations.add(member: SDAI.UnownedWrap(newSource) )
    }
    /// INVERSE AGGREGATE ATTR SUPPORT(REMOVER)
    internal func _link_representation_associations__observeRemovedReference(in complex: SDAI.ComplexEntity) {
      guard let oldSource = complex.entityReference(ePAIR_REPRESENTATION_RELATIONSHIP.self) else { return }
      let success = self.__link_representation_associations.remove(member: SDAI.UnownedWrap(oldSource) )
      assert(success, "failed to remove inverse attribute element")
    }
    /// INVERSE AGGREGATE ATTR SUPPORT(LEAVING REFERENCE OWNER)
    internal func _link_representation_associations__observe(leavingReferencerOwner complex: SDAI.ComplexEntity) {
      guard let oldSource = complex.entityReference(ePAIR_REPRESENTATION_RELATIONSHIP.self) else { return }
      let success = self.__link_representation_associations.removeAll(member: SDAI.UnownedWrap(oldSource) )
      assert(success, "failed to remove inverse attribute elements")
    }

    public override var typeMembers: Set<SDAI.STRING> {
      var members = Set<SDAI.STRING>()
      members.insert(SDAI.STRING(Self.typeName))
      //SELECT data types (indirectly) referencing the current type as a member of the select list
      members.insert(SDAI.STRING(sMULTI_LANGUAGE_ATTRIBUTE_ITEM.typeName)) // -> Self
      members.insert(SDAI.STRING(sATTRIBUTE_LANGUAGE_ITEM.typeName)) // -> Self
      return members
    }


    //VALUE COMPARISON SUPPORT
    public override func hashAsValue(into hasher: inout Hasher, visited complexEntities: inout Set<SDAI.ComplexEntity>) {
      super.hashAsValue(into: &hasher, visited: &complexEntities)
      self._joint.value.hashAsValue(into: &hasher, visited: &complexEntities)
    }

    public override func isValueEqual(to rhs: SDAI.PartialEntity, visited comppairs: inout Set<SDAI.ComplexPair>) -> Bool {
      guard let rhs = rhs as? Self else { return false }
      if !super.isValueEqual(to: rhs, visited: &comppairs) { return false }
      if let comp = self._joint.value.isValueEqualOptionally(to: rhs._joint.value, visited: &comppairs)	{
        if !comp { return false }
      }
      else { return false }
      return true
    }

    public override func isValueEqualOptionally(to rhs: SDAI.PartialEntity, visited comppairs: inout Set<SDAI.ComplexPair>) -> Bool? {
      guard let rhs = rhs as? Self else { return false }
      var result: Bool? = true
      if let comp = super.isValueEqualOptionally(to: rhs, visited: &comppairs) {
        if !comp { return false }
      }
      else { result = nil }
      if let comp = self._joint.value.isValueEqualOptionally(to: rhs._joint.value, visited: &comppairs) {
        if !comp { return false }
      }
      else { result = nil }
      return result
    }


    //EXPRESS IMPLICIT PARTIAL ENTITY CONSTRUCTOR
    public init(JOINT: eKINEMATIC_JOINT) {
      self._joint = JOINT
      super.init(asAbstructSuperclass:())

    }

    //p21 PARTIAL ENTITY CONSTRUCTOR
    public required convenience init?(parameters: [P21Decode.ExchangeStructure.Parameter], exchangeStructure: P21Decode.ExchangeStructure) {
      let numParams = 1
      guard parameters.count == numParams
      else { exchangeStructure.error = "number of p21 parameters(\(parameters.count)) are different from expected(\(numParams)) for entity(\(Self.entityName)) constructor"; return nil }

      guard case .success(let p0) = exchangeStructure.recoverRequiredParameter(as: eKINEMATIC_JOINT.self, from: parameters[0])
      else { exchangeStructure.add(errorContext: "while recovering parameter #0 for entity(\(Self.entityName)) constructor"); return nil }

      self.init( JOINT: p0 )
    }
  }


//MARK: - Entity Reference

/** ENTITY reference
- EXPRESS:
```express
  ENTITY kinematic_pair
    ABSTRACT SUPERTYPE OF ( 
        ONEOF ( 
            high_order_kinematic_pair, 
            low_order_kinematic_pair_with_motion_coupling, 
            low_order_kinematic_pair ) 
        ANDOR
        actuated_kinematic_pair )
    SUBTYPE OF ( geometric_representation_item, item_defined_transformation );
      joint                           : kinematic_joint;
      SELF\item_defined_transformation.transform_item_1 : rigid_placement;
      SELF\item_defined_transformation.transform_item_2 : rigid_placement;
    DERIVE
      associated_link_representations_1 : SET [1 : ?] OF kinematic_link_representation := 
                                          sort_link_associations( link_representation_associations, TRUE );
      associated_link_representations_2 : SET [1 : ?] OF kinematic_link_representation := 
                                          sort_link_associations( link_representation_associations, FALSE );
      SELF\item_defined_transformation.name : label := SELF\representation_item.name;
    INVERSE
      link_representation_associations : SET [1 : ?] OF pair_representation_relationship FOR 
                                            transformation_operator -- defined in ENTITY: pair_representation_relationship;
  END_ENTITY; -- kinematic_pair (line:18753 file:ap242ed2_mim_lf_v1.101.TY.exp)

```
*/
  public final class eKINEMATIC_PAIR : SDAI.EntityReference {

    //MARK: PARTIAL ENTITY
    public override class var partialEntityType: SDAI.PartialEntity.Type {
      _kinematic_pair.self
    }
    public let partialEntity: _kinematic_pair

    //MARK: SUPERTYPES
    public let super_eREPRESENTATION_ITEM: eREPRESENTATION_ITEM 	// [1]
    public let super_eGEOMETRIC_REPRESENTATION_ITEM: eGEOMETRIC_REPRESENTATION_ITEM 	// [2]
    public let super_eITEM_DEFINED_TRANSFORMATION: eITEM_DEFINED_TRANSFORMATION 	// [3]
    public var super_eKINEMATIC_PAIR: eKINEMATIC_PAIR { return self } 	// [4]

    //MARK: SUBTYPES
    public var sub_eGEAR_PAIR_WITH_RANGE: eGEAR_PAIR_WITH_RANGE? {	// [5]
      return self.complexEntity.entityReference(eGEAR_PAIR_WITH_RANGE.self)
    }

    public var sub_eGEAR_PAIR: eGEAR_PAIR? {	// [6]
      return self.complexEntity.entityReference(eGEAR_PAIR.self)
    }

    public var sub_eLINEAR_FLEXIBLE_AND_PINION_PAIR: eLINEAR_FLEXIBLE_AND_PINION_PAIR? {	// [7]
      return self.complexEntity.entityReference(eLINEAR_FLEXIBLE_AND_PINION_PAIR.self)
    }

    public var sub_eRACK_AND_PINION_PAIR_WITH_RANGE: eRACK_AND_PINION_PAIR_WITH_RANGE? {	// [8]
      return self.complexEntity.entityReference(eRACK_AND_PINION_PAIR_WITH_RANGE.self)
    }

    public var sub_eRACK_AND_PINION_PAIR: eRACK_AND_PINION_PAIR? {	// [9]
      return self.complexEntity.entityReference(eRACK_AND_PINION_PAIR.self)
    }

    public var sub_eSCREW_PAIR_WITH_RANGE: eSCREW_PAIR_WITH_RANGE? {	// [10]
      return self.complexEntity.entityReference(eSCREW_PAIR_WITH_RANGE.self)
    }

    public var sub_eSCREW_PAIR: eSCREW_PAIR? {	// [11]
      return self.complexEntity.entityReference(eSCREW_PAIR.self)
    }

    public var sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_MOTION_COUPLING: eLOW_ORDER_KINEMATIC_PAIR_WITH_MOTION_COUPLING? {	// [12]
      return self.complexEntity.entityReference(eLOW_ORDER_KINEMATIC_PAIR_WITH_MOTION_COUPLING.self)
    }

    public var sub_eACTUATED_KINEMATIC_PAIR: eACTUATED_KINEMATIC_PAIR? {	// [13]
      return self.complexEntity.entityReference(eACTUATED_KINEMATIC_PAIR.self)
    }

    public var sub_ePOINT_ON_PLANAR_CURVE_PAIR_WITH_RANGE: ePOINT_ON_PLANAR_CURVE_PAIR_WITH_RANGE? {	// [14]
      return self.complexEntity.entityReference(ePOINT_ON_PLANAR_CURVE_PAIR_WITH_RANGE.self)
    }

    public var sub_ePOINT_ON_PLANAR_CURVE_PAIR: ePOINT_ON_PLANAR_CURVE_PAIR? {	// [15]
      return self.complexEntity.entityReference(ePOINT_ON_PLANAR_CURVE_PAIR.self)
    }

    public var sub_eSLIDING_CURVE_PAIR: eSLIDING_CURVE_PAIR? {	// [16]
      return self.complexEntity.entityReference(eSLIDING_CURVE_PAIR.self)
    }

    public var sub_eROLLING_CURVE_PAIR: eROLLING_CURVE_PAIR? {	// [17]
      return self.complexEntity.entityReference(eROLLING_CURVE_PAIR.self)
    }

    public var sub_ePLANAR_CURVE_PAIR_RANGE: ePLANAR_CURVE_PAIR_RANGE? {	// [18]
      return self.complexEntity.entityReference(ePLANAR_CURVE_PAIR_RANGE.self)
    }

    public var sub_ePLANAR_CURVE_PAIR: ePLANAR_CURVE_PAIR? {	// [19]
      return self.complexEntity.entityReference(ePLANAR_CURVE_PAIR.self)
    }

    public var sub_eLINEAR_FLEXIBLE_AND_PLANAR_CURVE_PAIR: eLINEAR_FLEXIBLE_AND_PLANAR_CURVE_PAIR? {	// [20]
      return self.complexEntity.entityReference(eLINEAR_FLEXIBLE_AND_PLANAR_CURVE_PAIR.self)
    }

    public var sub_ePOINT_ON_SURFACE_PAIR_WITH_RANGE: ePOINT_ON_SURFACE_PAIR_WITH_RANGE? {	// [21]
      return self.complexEntity.entityReference(ePOINT_ON_SURFACE_PAIR_WITH_RANGE.self)
    }

    public var sub_ePOINT_ON_SURFACE_PAIR: ePOINT_ON_SURFACE_PAIR? {	// [22]
      return self.complexEntity.entityReference(ePOINT_ON_SURFACE_PAIR.self)
    }

    public var sub_eSURFACE_PAIR_WITH_RANGE: eSURFACE_PAIR_WITH_RANGE? {	// [23]
      return self.complexEntity.entityReference(eSURFACE_PAIR_WITH_RANGE.self)
    }

    public var sub_eROLLING_SURFACE_PAIR: eROLLING_SURFACE_PAIR? {	// [24]
      return self.complexEntity.entityReference(eROLLING_SURFACE_PAIR.self)
    }

    public var sub_eSLIDING_SURFACE_PAIR: eSLIDING_SURFACE_PAIR? {	// [25]
      return self.complexEntity.entityReference(eSLIDING_SURFACE_PAIR.self)
    }

    public var sub_eSURFACE_PAIR: eSURFACE_PAIR? {	// [26]
      return self.complexEntity.entityReference(eSURFACE_PAIR.self)
    }

    public var sub_eHIGH_ORDER_KINEMATIC_PAIR: eHIGH_ORDER_KINEMATIC_PAIR? {	// [27]
      return self.complexEntity.entityReference(eHIGH_ORDER_KINEMATIC_PAIR.self)
    }

    public var sub_ePLANAR_PAIR_WITH_RANGE: ePLANAR_PAIR_WITH_RANGE? {	// [28]
      return self.complexEntity.entityReference(ePLANAR_PAIR_WITH_RANGE.self)
    }

    public var sub_ePLANAR_PAIR: ePLANAR_PAIR? {	// [29]
      return self.complexEntity.entityReference(ePLANAR_PAIR.self)
    }

    public var sub_eREVOLUTE_PAIR_WITH_RANGE: eREVOLUTE_PAIR_WITH_RANGE? {	// [30]
      return self.complexEntity.entityReference(eREVOLUTE_PAIR_WITH_RANGE.self)
    }

    public var sub_eREVOLUTE_PAIR: eREVOLUTE_PAIR? {	// [31]
      return self.complexEntity.entityReference(eREVOLUTE_PAIR.self)
    }

    public var sub_eCYLINDRICAL_PAIR_WITH_RANGE: eCYLINDRICAL_PAIR_WITH_RANGE? {	// [32]
      return self.complexEntity.entityReference(eCYLINDRICAL_PAIR_WITH_RANGE.self)
    }

    public var sub_eCYLINDRICAL_PAIR: eCYLINDRICAL_PAIR? {	// [33]
      return self.complexEntity.entityReference(eCYLINDRICAL_PAIR.self)
    }

    public var sub_eSPHERICAL_PAIR_WITH_RANGE: eSPHERICAL_PAIR_WITH_RANGE? {	// [34]
      return self.complexEntity.entityReference(eSPHERICAL_PAIR_WITH_RANGE.self)
    }

    public var sub_eSPHERICAL_PAIR: eSPHERICAL_PAIR? {	// [35]
      return self.complexEntity.entityReference(eSPHERICAL_PAIR.self)
    }

    public var sub_eFULLY_CONSTRAINED_PAIR: eFULLY_CONSTRAINED_PAIR? {	// [36]
      return self.complexEntity.entityReference(eFULLY_CONSTRAINED_PAIR.self)
    }

    public var sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE: eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE? {	// [37]
      return self.complexEntity.entityReference(eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE.self)
    }

    public var sub_eHOMOKINETIC_PAIR: eHOMOKINETIC_PAIR? {	// [38]
      return self.complexEntity.entityReference(eHOMOKINETIC_PAIR.self)
    }

    public var sub_eUNIVERSAL_PAIR_WITH_RANGE: eUNIVERSAL_PAIR_WITH_RANGE? {	// [39]
      return self.complexEntity.entityReference(eUNIVERSAL_PAIR_WITH_RANGE.self)
    }

    public var sub_eUNIVERSAL_PAIR: eUNIVERSAL_PAIR? {	// [40]
      return self.complexEntity.entityReference(eUNIVERSAL_PAIR.self)
    }

    public var sub_eSPHERICAL_PAIR_WITH_PIN_AND_RANGE: eSPHERICAL_PAIR_WITH_PIN_AND_RANGE? {	// [41]
      return self.complexEntity.entityReference(eSPHERICAL_PAIR_WITH_PIN_AND_RANGE.self)
    }

    public var sub_eSPHERICAL_PAIR_WITH_PIN: eSPHERICAL_PAIR_WITH_PIN? {	// [42]
      return self.complexEntity.entityReference(eSPHERICAL_PAIR_WITH_PIN.self)
    }

    public var sub_eUNCONSTRAINED_PAIR: eUNCONSTRAINED_PAIR? {	// [43]
      return self.complexEntity.entityReference(eUNCONSTRAINED_PAIR.self)
    }

    public var sub_ePRISMATIC_PAIR_WITH_RANGE: ePRISMATIC_PAIR_WITH_RANGE? {	// [44]
      return self.complexEntity.entityReference(ePRISMATIC_PAIR_WITH_RANGE.self)
    }

    public var sub_ePRISMATIC_PAIR: ePRISMATIC_PAIR? {	// [45]
      return self.complexEntity.entityReference(ePRISMATIC_PAIR.self)
    }

    public var sub_eLOW_ORDER_KINEMATIC_PAIR: eLOW_ORDER_KINEMATIC_PAIR? {	// [46]
      return self.complexEntity.entityReference(eLOW_ORDER_KINEMATIC_PAIR.self)
    }


    //MARK: ATTRIBUTES
    // LOWER_LIMIT_PITCH: (3 AMBIGUOUS REFs)

    // R_Y: (11 AMBIGUOUS REFs)

    // R_X: (11 AMBIGUOUS REFs)

    // PINION_RADIUS: (2 AMBIGUOUS REFs)

    // R_Z: (11 AMBIGUOUS REFs)

    // UPPER_LIMIT_ACTUAL_TRANSLATION_X: (2 AMBIGUOUS REFs)

    // UPPER_LIMIT_ACTUAL_TRANSLATION_Y: (2 AMBIGUOUS REFs)

    // ORIENTATION: (4 AMBIGUOUS REFs)

    // LOWER_LIMIT_ACTUAL_TRANSLATION_Y: (2 AMBIGUOUS REFs)

    // LOWER_LIMIT_ACTUAL_TRANSLATION_X: (2 AMBIGUOUS REFs)

    // UPPER_LIMIT_ROLL: (4 AMBIGUOUS REFs)

    // LOWER_LIMIT_YAW: (4 AMBIGUOUS REFs)

    // PAIR_CURVE: (2 AMBIGUOUS REFs)

    // LOWER_LIMIT_ACTUAL_ROTATION: (5 AMBIGUOUS REFs)

    // T_Z: (11 AMBIGUOUS REFs)

    // T_Y: (11 AMBIGUOUS REFs)

    // T_X: (11 AMBIGUOUS REFs)

    // UPPER_LIMIT_PITCH: (3 AMBIGUOUS REFs)

    // UPPER_LIMIT_YAW: (4 AMBIGUOUS REFs)

    // UPPER_LIMIT_ACTUAL_ROTATION: (5 AMBIGUOUS REFs)

    // LOWER_LIMIT_ROLL: (4 AMBIGUOUS REFs)

    // UPPER_LIMIT_ACTUAL_TRANSLATION: (2 AMBIGUOUS REFs)

    // LOWER_LIMIT_ACTUAL_TRANSLATION: (2 AMBIGUOUS REFs)

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eSURFACE_PAIR_WITH_RANGE`` )
    public var RANGE_ON_SURFACE_1: eRECTANGULAR_TRIMMED_SURFACE?  {
      get {
        return sub_eSURFACE_PAIR_WITH_RANGE?.partialEntity._range_on_surface_1
      }
      set(newValue) {
        guard let partial = sub_eSURFACE_PAIR_WITH_RANGE?.super_eSURFACE_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._range_on_surface_1 = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eSURFACE_PAIR_WITH_RANGE`` )
    public var RANGE_ON_SURFACE_2: eRECTANGULAR_TRIMMED_SURFACE?  {
      get {
        return sub_eSURFACE_PAIR_WITH_RANGE?.partialEntity._range_on_surface_2
      }
      set(newValue) {
        guard let partial = sub_eSURFACE_PAIR_WITH_RANGE?.super_eSURFACE_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._range_on_surface_2 = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``ePOINT_ON_PLANAR_CURVE_PAIR_WITH_RANGE`` )
    public var RANGE_ON_PAIR_CURVE: eTRIMMED_CURVE?  {
      get {
        return sub_ePOINT_ON_PLANAR_CURVE_PAIR_WITH_RANGE?.partialEntity._range_on_pair_curve
      }
      set(newValue) {
        guard let partial = sub_ePOINT_ON_PLANAR_CURVE_PAIR_WITH_RANGE?.super_ePOINT_ON_PLANAR_CURVE_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._range_on_pair_curve = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUPER( ``eITEM_DEFINED_TRANSFORMATION`` )
    public var DESCRIPTION: tTEXT?  {
      get {
        return super_eITEM_DEFINED_TRANSFORMATION.partialEntity._description
      }
      set(newValue) {
        let partial = super_eITEM_DEFINED_TRANSFORMATION.partialEntity
        partial._description = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``ePLANAR_CURVE_PAIR`` )
    public var CURVE_1: eCURVE?  {
      get {
        return sub_ePLANAR_CURVE_PAIR?.partialEntity._curve_1
      }
      set(newValue) {
        guard let partial = sub_ePLANAR_CURVE_PAIR?.super_ePLANAR_CURVE_PAIR.partialEntity else { return }
        partial._curve_1 = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``ePLANAR_CURVE_PAIR`` )
    public var CURVE_2: eCURVE?  {
      get {
        return sub_ePLANAR_CURVE_PAIR?.partialEntity._curve_2
      }
      set(newValue) {
        guard let partial = sub_ePLANAR_CURVE_PAIR?.super_ePLANAR_CURVE_PAIR.partialEntity else { return }
        partial._curve_2 = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``ePLANAR_CURVE_PAIR_RANGE`` )
    public var RANGE_ON_CURVE_2: eTRIMMED_CURVE?  {
      get {
        return sub_ePLANAR_CURVE_PAIR_RANGE?.partialEntity._range_on_curve_2
      }
      set(newValue) {
        guard let partial = sub_ePLANAR_CURVE_PAIR_RANGE?.super_ePLANAR_CURVE_PAIR_RANGE.partialEntity
          else { return }
        partial._range_on_curve_2 = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``ePLANAR_CURVE_PAIR_RANGE`` )
    public var RANGE_ON_CURVE_1: eTRIMMED_CURVE?  {
      get {
        return sub_ePLANAR_CURVE_PAIR_RANGE?.partialEntity._range_on_curve_1
      }
      set(newValue) {
        guard let partial = sub_ePLANAR_CURVE_PAIR_RANGE?.super_ePLANAR_CURVE_PAIR_RANGE.partialEntity
          else { return }
        partial._range_on_curve_1 = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eGEAR_PAIR`` )
    public var GEAR_RATIO: SDAI.REAL?  {
      get {
        return sub_eGEAR_PAIR?.partialEntity._gear_ratio
      }
      set(newValue) {
        guard let partial = sub_eGEAR_PAIR?.super_eGEAR_PAIR.partialEntity else { return }
        partial._gear_ratio = SDAI.UNWRAP(newValue)
      }
    }

    /// __INVERSE__ attribute
    /// observing ePAIR_REPRESENTATION_RELATIONSHIP .TRANSFORMATION_OPERATOR
    /// - origin: SELF( ``eKINEMATIC_PAIR`` )
    public var LINK_REPRESENTATION_ASSOCIATIONS: SDAI.SET<ePAIR_REPRESENTATION_RELATIONSHIP>/*[1:nil]*/  {
      get {
        return SDAI.UNWRAP( self.partialEntity._link_representation_associations )
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_ACTUAL_TRANSLATION_Z: tLENGTH_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._upper_limit_actual_translation_z
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._upper_limit_actual_translation_z = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eRACK_AND_PINION_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_RACK_DISPLACEMENT: tLENGTH_MEASURE?  {
      get {
        return sub_eRACK_AND_PINION_PAIR_WITH_RANGE?.partialEntity._lower_limit_rack_displacement
      }
      set(newValue) {
        guard let partial = sub_eRACK_AND_PINION_PAIR_WITH_RANGE?.super_eRACK_AND_PINION_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._lower_limit_rack_displacement = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eSCREW_PAIR`` )
    public var PITCH: tLENGTH_MEASURE?  {
      get {
        return sub_eSCREW_PAIR?.partialEntity._pitch
      }
      set(newValue) {
        guard let partial = sub_eSCREW_PAIR?.super_eSCREW_PAIR.partialEntity else { return }
        partial._pitch = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eGEAR_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_ACTUAL_ROTATION_1: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eGEAR_PAIR_WITH_RANGE?.partialEntity._upper_limit_actual_rotation_1
      }
      set(newValue) {
        guard let partial = sub_eGEAR_PAIR_WITH_RANGE?.super_eGEAR_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._upper_limit_actual_rotation_1 = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eGEAR_PAIR`` )
    public var BEVEL: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eGEAR_PAIR?.partialEntity._bevel
      }
      set(newValue) {
        guard let partial = sub_eGEAR_PAIR?.super_eGEAR_PAIR.partialEntity else { return }
        partial._bevel = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT REDEF__ attribute
    /// - origin: SELF( ``eKINEMATIC_PAIR`` )
    public var TRANSFORM_ITEM_1: sRIGID_PLACEMENT {
      get {
        return SDAI.UNWRAP( sRIGID_PLACEMENT( super_eITEM_DEFINED_TRANSFORMATION.partialEntity
          ._transform_item_1 ) )
      }
      set(newValue) {
        let partial = super_eITEM_DEFINED_TRANSFORMATION.partialEntity
        partial._transform_item_1 = SDAI.UNWRAP(
          eREPRESENTATION_ITEM(newValue))
      }
    }

    /// __EXPLICIT REDEF__ attribute
    /// - origin: SELF( ``eKINEMATIC_PAIR`` )
    public var TRANSFORM_ITEM_2: sRIGID_PLACEMENT {
      get {
        return SDAI.UNWRAP( sRIGID_PLACEMENT( super_eITEM_DEFINED_TRANSFORMATION.partialEntity
          ._transform_item_2 ) )
      }
      set(newValue) {
        let partial = super_eITEM_DEFINED_TRANSFORMATION.partialEntity
        partial._transform_item_2 = SDAI.UNWRAP(
          eREPRESENTATION_ITEM(newValue))
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eUNIVERSAL_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_SECOND_ROTATION: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eUNIVERSAL_PAIR_WITH_RANGE?.partialEntity._lower_limit_second_rotation
      }
      set(newValue) {
        guard let partial = sub_eUNIVERSAL_PAIR_WITH_RANGE?.super_eUNIVERSAL_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._lower_limit_second_rotation = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eGEAR_PAIR`` )
    public var RADIUS_SECOND_LINK: tLENGTH_MEASURE?  {
      get {
        return sub_eGEAR_PAIR?.partialEntity._radius_second_link
      }
      set(newValue) {
        guard let partial = sub_eGEAR_PAIR?.super_eGEAR_PAIR.partialEntity else { return }
        partial._radius_second_link = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eUNIVERSAL_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_FIRST_ROTATION: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eUNIVERSAL_PAIR_WITH_RANGE?.partialEntity._upper_limit_first_rotation
      }
      set(newValue) {
        guard let partial = sub_eUNIVERSAL_PAIR_WITH_RANGE?.super_eUNIVERSAL_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._upper_limit_first_rotation = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eGEAR_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_ACTUAL_ROTATION_1: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eGEAR_PAIR_WITH_RANGE?.partialEntity._lower_limit_actual_rotation_1
      }
      set(newValue) {
        guard let partial = sub_eGEAR_PAIR_WITH_RANGE?.super_eGEAR_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._lower_limit_actual_rotation_1 = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_ACTUAL_TRANSLATION_Z: tLENGTH_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._lower_limit_actual_translation_z
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._lower_limit_actual_translation_z = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eGEAR_PAIR`` )
    public var HELICAL_ANGLE: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eGEAR_PAIR?.partialEntity._helical_angle
      }
      set(newValue) {
        guard let partial = sub_eGEAR_PAIR?.super_eGEAR_PAIR.partialEntity else { return }
        partial._helical_angle = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``ePOINT_ON_SURFACE_PAIR`` )
    public var PAIR_SURFACE: eSURFACE?  {
      get {
        return sub_ePOINT_ON_SURFACE_PAIR?.partialEntity._pair_surface
      }
      set(newValue) {
        guard let partial = sub_ePOINT_ON_SURFACE_PAIR?.super_ePOINT_ON_SURFACE_PAIR.partialEntity
          else { return }
        partial._pair_surface = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eUNIVERSAL_PAIR`` )
    public var INPUT_SKEW_ANGLE: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eUNIVERSAL_PAIR?.partialEntity._input_skew_angle
      }
      set(newValue) {
        guard let partial = sub_eUNIVERSAL_PAIR?.super_eUNIVERSAL_PAIR.partialEntity else { return }
        partial._input_skew_angle = newValue
      }
    }

    /// __DERIVE__ attribute
    /// - origin: SUB( ``eUNIVERSAL_PAIR`` )
    public var SKEW_ANGLE: tPLANE_ANGLE_MEASURE?  {
      get {
        if let cached = cachedValue(derivedAttributeName:"SKEW_ANGLE") {
          return cached.value as! tPLANE_ANGLE_MEASURE? 
        }
        guard let origin = sub_eUNIVERSAL_PAIR else { return nil }
        let value = tPLANE_ANGLE_MEASURE(origin.partialEntity._skew_angle__getter(SELF: origin))
        updateCache(derivedAttributeName:"SKEW_ANGLE", value:value)
        return value
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_ACTUAL_ROTATION_Y: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._upper_limit_actual_rotation_y
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._upper_limit_actual_rotation_y = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_ACTUAL_ROTATION_X: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._upper_limit_actual_rotation_x
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._upper_limit_actual_rotation_x = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_ACTUAL_ROTATION_Z: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._upper_limit_actual_rotation_z
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._upper_limit_actual_rotation_z = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``ePOINT_ON_SURFACE_PAIR_WITH_RANGE`` )
    public var RANGE_ON_PAIR_SURFACE: eRECTANGULAR_TRIMMED_SURFACE?  {
      get {
        return sub_ePOINT_ON_SURFACE_PAIR_WITH_RANGE?.partialEntity._range_on_pair_surface
      }
      set(newValue) {
        guard let partial = sub_ePOINT_ON_SURFACE_PAIR_WITH_RANGE?.super_ePOINT_ON_SURFACE_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._range_on_pair_surface = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SELF( ``eKINEMATIC_PAIR`` )
    public var JOINT: eKINEMATIC_JOINT {
      get {
        return SDAI.UNWRAP( self.partialEntity._joint )
      }
      set(newValue) {
        let partial = self.partialEntity
        partial._joint = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eRACK_AND_PINION_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_RACK_DISPLACEMENT: tLENGTH_MEASURE?  {
      get {
        return sub_eRACK_AND_PINION_PAIR_WITH_RANGE?.partialEntity._upper_limit_rack_displacement
      }
      set(newValue) {
        guard let partial = sub_eRACK_AND_PINION_PAIR_WITH_RANGE?.super_eRACK_AND_PINION_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._upper_limit_rack_displacement = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_ACTUAL_ROTATION_X: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._lower_limit_actual_rotation_x
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._lower_limit_actual_rotation_x = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_ACTUAL_ROTATION_Y: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._lower_limit_actual_rotation_y
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._lower_limit_actual_rotation_y = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_ACTUAL_ROTATION_Z: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.partialEntity._lower_limit_actual_rotation_z
      }
      set(newValue) {
        guard let partial = sub_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE?.super_eLOW_ORDER_KINEMATIC_PAIR_WITH_RANGE
          .partialEntity else { return }
        partial._lower_limit_actual_rotation_z = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eUNIVERSAL_PAIR_WITH_RANGE`` )
    public var LOWER_LIMIT_FIRST_ROTATION: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eUNIVERSAL_PAIR_WITH_RANGE?.partialEntity._lower_limit_first_rotation
      }
      set(newValue) {
        guard let partial = sub_eUNIVERSAL_PAIR_WITH_RANGE?.super_eUNIVERSAL_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._lower_limit_first_rotation = newValue
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eGEAR_PAIR`` )
    public var RADIUS_FIRST_LINK: tLENGTH_MEASURE?  {
      get {
        return sub_eGEAR_PAIR?.partialEntity._radius_first_link
      }
      set(newValue) {
        guard let partial = sub_eGEAR_PAIR?.super_eGEAR_PAIR.partialEntity else { return }
        partial._radius_first_link = SDAI.UNWRAP(newValue)
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eSURFACE_PAIR`` )
    public var SURFACE_2: eSURFACE?  {
      get {
        return sub_eSURFACE_PAIR?.partialEntity._surface_2
      }
      set(newValue) {
        guard let partial = sub_eSURFACE_PAIR?.super_eSURFACE_PAIR.partialEntity else { return }
        partial._surface_2 = SDAI.UNWRAP(newValue)
      }
    }

    /// __DERIVE__ attribute
    /// - origin: SELF( ``eKINEMATIC_PAIR`` )
    public var ASSOCIATED_LINK_REPRESENTATIONS_1: (SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>/*[1:nil]*/ )?  {
      get {
        if let cached = cachedValue(derivedAttributeName:"ASSOCIATED_LINK_REPRESENTATIONS_1") {
          return cached.value as! (SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>/*[1:nil]*/ )? 
        }
        let origin = self
        let value = origin.partialEntity._associated_link_representations_1__getter(SELF: origin)
        updateCache(derivedAttributeName:"ASSOCIATED_LINK_REPRESENTATIONS_1", value:value)
        return value
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eSURFACE_PAIR`` )
    public var SURFACE_1: eSURFACE?  {
      get {
        return sub_eSURFACE_PAIR?.partialEntity._surface_1
      }
      set(newValue) {
        guard let partial = sub_eSURFACE_PAIR?.super_eSURFACE_PAIR.partialEntity else { return }
        partial._surface_1 = SDAI.UNWRAP(newValue)
      }
    }

    /// __DERIVE__ attribute
    /// - origin: SELF( ``eKINEMATIC_PAIR`` )
    public var ASSOCIATED_LINK_REPRESENTATIONS_2: (SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>/*[1:nil]*/ )?  {
      get {
        if let cached = cachedValue(derivedAttributeName:"ASSOCIATED_LINK_REPRESENTATIONS_2") {
          return cached.value as! (SDAI.SET<eKINEMATIC_LINK_REPRESENTATION>/*[1:nil]*/ )? 
        }
        let origin = self
        let value = origin.partialEntity._associated_link_representations_2__getter(SELF: origin)
        updateCache(derivedAttributeName:"ASSOCIATED_LINK_REPRESENTATIONS_2", value:value)
        return value
      }
    }

    /// __EXPLICIT__ attribute
    /// - origin: SUB( ``eUNIVERSAL_PAIR_WITH_RANGE`` )
    public var UPPER_LIMIT_SECOND_ROTATION: tPLANE_ANGLE_MEASURE?  {
      get {
        return sub_eUNIVERSAL_PAIR_WITH_RANGE?.partialEntity._upper_limit_second_rotation
      }
      set(newValue) {
        guard let partial = sub_eUNIVERSAL_PAIR_WITH_RANGE?.super_eUNIVERSAL_PAIR_WITH_RANGE.partialEntity
          else { return }
        partial._upper_limit_second_rotation = newValue
      }
    }

    /// __EXPLICIT REDEF(DERIVE)__ attribute
    /// - origin: SELF( ``eKINEMATIC_PAIR`` )
    public var NAME: tLABEL {
      get {
        if let cached = cachedValue(derivedAttributeName:"NAME") {
          return cached.value as! tLABEL
        }
        let origin = self
        let value = SDAI.UNWRAP( origin.partialEntity._name__getter(SELF: origin) )
        updateCache(derivedAttributeName:"NAME", value:value)
        return value
      }
    }

    /// __DERIVE__ attribute
    /// - origin: SUPER( ``eGEOMETRIC_REPRESENTATION_ITEM`` )
    public var DIM: tDIMENSION_COUNT?  {
      get {
        if let cached = cachedValue(derivedAttributeName:"DIM") {
          return cached.value as! tDIMENSION_COUNT? 
        }
        let origin = super_eGEOMETRIC_REPRESENTATION_ITEM
        let value = tDIMENSION_COUNT(origin.partialEntity._dim__getter(SELF: origin))
        updateCache(derivedAttributeName:"DIM", value:value)
        return value
      }
    }


    //MARK: INITIALIZERS
    public convenience init?(_ entityRef: SDAI.EntityReference?) {
      let complex = entityRef?.complexEntity
      self.init(complex: complex)
    }

    public required init?(complex complexEntity: SDAI.ComplexEntity?) {
      guard let partial = complexEntity?.partialEntityInstance(_kinematic_pair.self) else { return nil }
      self.partialEntity = partial

      guard let super1 = complexEntity?.entityReference(eREPRESENTATION_ITEM.self) else { return nil }
      self.super_eREPRESENTATION_ITEM = super1

      guard let super2 = complexEntity?.entityReference(eGEOMETRIC_REPRESENTATION_ITEM.self) else { return nil }
      self.super_eGEOMETRIC_REPRESENTATION_ITEM = super2

      guard let super3 = complexEntity?.entityReference(eITEM_DEFINED_TRANSFORMATION.self) else { return nil }
      self.super_eITEM_DEFINED_TRANSFORMATION = super3

      super.init(complex: complexEntity)
    }

    public required convenience init?<G: SDAIGenericType>(fromGeneric generic: G?) {
      guard let entityRef = generic?.entityReference else { return nil }
      self.init(complex: entityRef.complexEntity)
    }

    public convenience init?<S: SDAISelectType>(_ select: S?) { self.init(possiblyFrom: select) }
    public convenience init?(_ complex: SDAI.ComplexEntity?) { self.init(complex: complex) }


    //MARK: DICTIONARY DEFINITION
    public class override var entityDefinition: SDAIDictionarySchema.EntityDefinition { _entityDefinition }
    private static let _entityDefinition: SDAIDictionarySchema.EntityDefinition = createEntityDefinition()

    private static func createEntityDefinition() -> SDAIDictionarySchema.EntityDefinition {
      let entityDef = SDAIDictionarySchema.EntityDefinition(name: "KINEMATIC_PAIR", type: self, explicitAttributeCount: 1)

      //MARK: SUPERTYPE REGISTRATIONS
      entityDef.add(supertype: eREPRESENTATION_ITEM.self)
      entityDef.add(supertype: eGEOMETRIC_REPRESENTATION_ITEM.self)
      entityDef.add(supertype: eITEM_DEFINED_TRANSFORMATION.self)
      entityDef.add(supertype: eKINEMATIC_PAIR.self)

      //MARK: ATTRIBUTE REGISTRATIONS
      entityDef.addAttribute(name: "RANGE_ON_SURFACE_1", keyPath: \eKINEMATIC_PAIR.RANGE_ON_SURFACE_1, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "RANGE_ON_SURFACE_2", keyPath: \eKINEMATIC_PAIR.RANGE_ON_SURFACE_2, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "RANGE_ON_PAIR_CURVE", keyPath: \eKINEMATIC_PAIR.RANGE_ON_PAIR_CURVE, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "DESCRIPTION", keyPath: \eKINEMATIC_PAIR.DESCRIPTION, 
        kind: .explicitOptional, source: .superEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "CURVE_1", keyPath: \eKINEMATIC_PAIR.CURVE_1, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "CURVE_2", keyPath: \eKINEMATIC_PAIR.CURVE_2, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "RANGE_ON_CURVE_2", keyPath: \eKINEMATIC_PAIR.RANGE_ON_CURVE_2, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "RANGE_ON_CURVE_1", keyPath: \eKINEMATIC_PAIR.RANGE_ON_CURVE_1, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "GEAR_RATIO", keyPath: \eKINEMATIC_PAIR.GEAR_RATIO, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LINK_REPRESENTATION_ASSOCIATIONS", keyPath: \eKINEMATIC_PAIR.LINK_REPRESENTATION_ASSOCIATIONS, 
        kind: .inverse, source: .thisEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "UPPER_LIMIT_ACTUAL_TRANSLATION_Z", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_ACTUAL_TRANSLATION_Z, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LOWER_LIMIT_RACK_DISPLACEMENT", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_RACK_DISPLACEMENT, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "PITCH", keyPath: \eKINEMATIC_PAIR.PITCH, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "UPPER_LIMIT_ACTUAL_ROTATION_1", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_ACTUAL_ROTATION_1, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "BEVEL", keyPath: \eKINEMATIC_PAIR.BEVEL, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "TRANSFORM_ITEM_1", keyPath: \eKINEMATIC_PAIR.TRANSFORM_ITEM_1, 
        kind: .explicitRedeclaring, source: .thisEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "TRANSFORM_ITEM_2", keyPath: \eKINEMATIC_PAIR.TRANSFORM_ITEM_2, 
        kind: .explicitRedeclaring, source: .thisEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "LOWER_LIMIT_SECOND_ROTATION", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_SECOND_ROTATION, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "RADIUS_SECOND_LINK", keyPath: \eKINEMATIC_PAIR.RADIUS_SECOND_LINK, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "UPPER_LIMIT_FIRST_ROTATION", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_FIRST_ROTATION, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LOWER_LIMIT_ACTUAL_ROTATION_1", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_ACTUAL_ROTATION_1, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LOWER_LIMIT_ACTUAL_TRANSLATION_Z", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_ACTUAL_TRANSLATION_Z, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "HELICAL_ANGLE", keyPath: \eKINEMATIC_PAIR.HELICAL_ANGLE, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "PAIR_SURFACE", keyPath: \eKINEMATIC_PAIR.PAIR_SURFACE, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "INPUT_SKEW_ANGLE", keyPath: \eKINEMATIC_PAIR.INPUT_SKEW_ANGLE, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "SKEW_ANGLE", keyPath: \eKINEMATIC_PAIR.SKEW_ANGLE, 
        kind: .derived, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "UPPER_LIMIT_ACTUAL_ROTATION_Y", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_ACTUAL_ROTATION_Y, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "UPPER_LIMIT_ACTUAL_ROTATION_X", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_ACTUAL_ROTATION_X, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "UPPER_LIMIT_ACTUAL_ROTATION_Z", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_ACTUAL_ROTATION_Z, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "RANGE_ON_PAIR_SURFACE", keyPath: \eKINEMATIC_PAIR.RANGE_ON_PAIR_SURFACE, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "JOINT", keyPath: \eKINEMATIC_PAIR.JOINT, 
        kind: .explicit, source: .thisEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "UPPER_LIMIT_RACK_DISPLACEMENT", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_RACK_DISPLACEMENT, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LOWER_LIMIT_ACTUAL_ROTATION_X", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_ACTUAL_ROTATION_X, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LOWER_LIMIT_ACTUAL_ROTATION_Y", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_ACTUAL_ROTATION_Y, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LOWER_LIMIT_ACTUAL_ROTATION_Z", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_ACTUAL_ROTATION_Z, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "LOWER_LIMIT_FIRST_ROTATION", keyPath: \eKINEMATIC_PAIR.LOWER_LIMIT_FIRST_ROTATION, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "RADIUS_FIRST_LINK", keyPath: \eKINEMATIC_PAIR.RADIUS_FIRST_LINK, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "SURFACE_2", keyPath: \eKINEMATIC_PAIR.SURFACE_2, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "ASSOCIATED_LINK_REPRESENTATIONS_1", keyPath: \eKINEMATIC_PAIR.ASSOCIATED_LINK_REPRESENTATIONS_1, 
        kind: .derived, source: .thisEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "SURFACE_1", keyPath: \eKINEMATIC_PAIR.SURFACE_1, 
        kind: .explicit, source: .subEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "ASSOCIATED_LINK_REPRESENTATIONS_2", keyPath: \eKINEMATIC_PAIR.ASSOCIATED_LINK_REPRESENTATIONS_2, 
        kind: .derived, source: .thisEntity, mayYieldEntityReference: true)
      entityDef.addAttribute(name: "UPPER_LIMIT_SECOND_ROTATION", keyPath: \eKINEMATIC_PAIR.UPPER_LIMIT_SECOND_ROTATION, 
        kind: .explicitOptional, source: .subEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "NAME", keyPath: \eKINEMATIC_PAIR.NAME, 
        kind: .derivedRedeclaring, source: .thisEntity, mayYieldEntityReference: false)
      entityDef.addAttribute(name: "DIM", keyPath: \eKINEMATIC_PAIR.DIM, 
        kind: .derived, source: .superEntity, mayYieldEntityReference: false)

      return entityDef
    }

  }
}

//MARK: - partial Entity Dynamic Attribute Protocol Conformances
extension AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF._kinematic_pair :
  eITEM_DEFINED_TRANSFORMATION__NAME__provider {}
