Source file function_description.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
open Ctypes

(* This Types_generated module is an instantiation of the Types
   functor defined in the type_description.ml file. It's generated by
   a C program that dune creates and runs behind the scenes. *)
module Types = Types_generated

module Functions (F : Ctypes.FOREIGN) = struct
  open F
  open Types

  (* let ml_z_mpz_init_set_z =
   *   foreign "ml_z_mpz_init_set_z" (MPZ.t @-> z @-> returning void)
   *
   * let ml_z_from_mpz = foreign "ml_z_from_mpz" (MPZ.t @-> returning z) *)

  let ca_init = foreign "ca_init" (ca_t @-> ca_ctx_t @-> returning void)
  let ca_clear = foreign "ca_clear" (ca_t @-> ca_ctx_t @-> returning void)

  let ca_set_si =
    foreign "ca_set_si" (ca_t @-> long @-> ca_ctx_t @-> returning void)

  let ca_set_fmpz =
    foreign "ca_set_fmpz"
      (ca_t @-> Flint.FMPZ.C.fmpz_t @-> ca_ctx_t @-> returning void)

  let ca_set_fmpq =
    foreign "ca_set_fmpq"
      (ca_t @-> Flint.FMPQ.C.fmpq_t @-> ca_ctx_t @-> returning void)

  let ca_ctx_init = foreign "ca_ctx_init" (ca_ctx_t @-> returning void)
  let ca_ctx_clear = foreign "ca_ctx_clear" (ca_ctx_t @-> returning void)

  let ca_equal_repr =
    foreign "ca_equal_repr" (ca_t @-> ca_t @-> ca_ctx_t @-> returning bool)

  let ca_cmp_repr =
    foreign "ca_cmp_repr" (ca_t @-> ca_t @-> ca_ctx_t @-> returning int)

  let ca_hash_repr =
    foreign "ca_hash_repr" (ca_t @-> ca_ctx_t @-> returning ulong)

  let ca_is_unknown =
    foreign "ca_is_unknown" (ca_t @-> ca_ctx_t @-> returning bool)

  let ca_is_special =
    foreign "ca_is_special" (ca_t @-> ca_ctx_t @-> returning bool)

  let ca_check_equal =
    foreign "ca_check_equal" (ca_t @-> ca_t @-> ca_ctx_t @-> returning truth_t)

  let ca_check_lt =
    foreign "ca_check_lt" (ca_t @-> ca_t @-> ca_ctx_t @-> returning truth_t)

  let ca_check_le =
    foreign "ca_check_le" (ca_t @-> ca_t @-> ca_ctx_t @-> returning truth_t)

  let ca_check_gt =
    foreign "ca_check_gt" (ca_t @-> ca_t @-> ca_ctx_t @-> returning truth_t)

  let ca_check_ge =
    foreign "ca_check_ge" (ca_t @-> ca_t @-> ca_ctx_t @-> returning truth_t)

  let ca_floor =
    foreign "ca_floor" (ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_ceil = foreign "ca_ceil" (ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_get_acb_accurate_parts =
    foreign "ca_get_acb_accurate_parts"
      (Arb.ACB.C.acb_t @-> ca_t @-> long @-> ca_ctx_t @-> returning void)

  let ca_sqrt = foreign "ca_sqrt" (ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_add =
    foreign "ca_add" (ca_t @-> ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_sub =
    foreign "ca_sub" (ca_t @-> ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_mul =
    foreign "ca_mul" (ca_t @-> ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_div =
    foreign "ca_div" (ca_t @-> ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_pow_si =
    foreign "ca_pow_si" (ca_t @-> ca_t @-> long @-> ca_ctx_t @-> returning void)

  let ca_pow_fmpq =
    foreign "ca_pow_fmpq"
      (ca_t @-> ca_t @-> Flint.FMPQ.C.fmpq_t @-> ca_ctx_t @-> returning void)

  let ca_neg = foreign "ca_neg" (ca_t @-> ca_t @-> ca_ctx_t @-> returning void)
  let ca_inv = foreign "ca_inv" (ca_t @-> ca_t @-> ca_ctx_t @-> returning void)
  let ca_abs = foreign "ca_abs" (ca_t @-> ca_t @-> ca_ctx_t @-> returning void)

  let ca_get_fmpq =
    foreign "ca_get_fmpq"
      (Flint.FMPQ.C.fmpq_t @-> ca_t @-> ca_ctx_t @-> returning bool)

  let ca_get_fmpz =
    foreign "ca_get_fmpz"
      (Flint.FMPZ.C.fmpz_t @-> ca_t @-> ca_ctx_t @-> returning bool)

  let ca_check_is_negative_real =
    foreign "ca_check_is_negative_real" (ca_t @-> ca_ctx_t @-> returning truth_t)

  let qqbar_init = foreign "qqbar_init" (qqbar_t @-> returning void)
  let qqbar_clear = foreign "qqbar_clear" (qqbar_t @-> returning void)

  let ca_get_qqbar =
    foreign "ca_get_qqbar" (qqbar_t @-> ca_t @-> ca_ctx_t @-> returning bool)

  let ca_set_qqbar =
    foreign "ca_set_qqbar" (ca_t @-> qqbar_t @-> ca_ctx_t @-> returning void)

  let flag_qqbar_roots =
    let cons_if i cst cst' l = if Int.logand i cst = 0 then l else cst' :: l in
    view int
      ~read:(fun i ->
        cons_if i qqbar_roots_irreducible QQBAR_ROOTS_IRREDUCIBLE
        @@ cons_if i qqbar_roots_unsorted QQBAR_ROOTS_UNSORTED
        @@ [])
      ~write:(fun l ->
        List.fold_left
          (fun acc -> function
            | QQBAR_ROOTS_IRREDUCIBLE -> Int.logor acc qqbar_roots_irreducible
            | QQBAR_ROOTS_UNSORTED -> Int.logor acc qqbar_roots_unsorted)
          0 l)

  let qqbar_roots_fmpz_poly =
    foreign "qqbar_roots_fmpz_poly"
      (qqbar_t @-> Flint.FMPZ_poly.C.fmpz_poly_t @-> flag_qqbar_roots
     @-> returning void)

  let qqbar_validate_existence_uniqueness =
    foreign "_qqbar_validate_existence_uniqueness"
      (Arb.ACB.C.acb_t @-> Flint.FMPZ_poly.C.fmpz_poly_t @-> Arb.ACB.C.acb_t
     @-> long @-> returning bool)

  let qqbar_set = foreign "qqbar_set" (qqbar_t @-> qqbar_t @-> returning void)
  let qqbar_swap = foreign "qqbar_swap" (qqbar_t @-> qqbar_t @-> returning void)

  let qqbar_equal =
    foreign "qqbar_equal" (qqbar_t @-> qqbar_t @-> returning bool)

  let qqbar_hash = foreign "qqbar_hash" (qqbar_t @-> returning ulong)

  let qqbar_cmp_root_order =
    foreign "qqbar_cmp_root_order" (qqbar_t @-> qqbar_t @-> returning int)

  let qqbar_is_real = foreign "qqbar_is_real" (qqbar_t @-> returning bool)
  let qqbar_is_zero = foreign "qqbar_is_zero" (qqbar_t @-> returning bool)
  let qqbar_is_one = foreign "qqbar_is_one" (qqbar_t @-> returning bool)
  let qqbar_print = foreign "qqbar_print" (qqbar_t @-> returning void)
end