let import_function ~topify_arith_origin ~with_alarms info f e1 e2 =
    try
      let v1 = project_ival e1 in
      let v2 = project_ival e2 in
      inject_ival (f v1 v2)
    with Not_based_on_null  ->
      (match with_alarms.imprecision_tracing with
       | Aignore -> ()
       | Acall f -> f ()
       | Alog _ ->
           match e1,e2 with
           | Map _, Map _ ->
             Kernel.warning ~once:true ~current:true
               "Operation %a %s %a incurs a loss of precision"
               pretty e1
               info
               pretty e2
           | _ -> ());
      join (topify_arith_origin e1) (topify_arith_origin e2)