Skip to content

Commit bcc346b

Browse files
authored
Merge pull request #1576 from stan-dev/wiener-defective-cdfs
Add wiener unnormalized cdfs
2 parents dbd423e + 962a569 commit bcc346b

File tree

58 files changed

+40250
-19
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+40250
-19
lines changed

src/stan_math_signatures/Generate.ml

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -274,22 +274,7 @@ let distributions =
274274
; (full_lpdf, "von_mises", [DVReal; DVReal; DVReal], SoA)
275275
; (full_lpdf, "weibull", [DVReal; DVReal; DVReal], SoA)
276276
; ([Lpdf], "wiener", [DVReal; DVReal; DVReal; DVReal; DVReal], SoA)
277-
(* new wiener_lpdfs -- c++ is fully vectorized, but this style of
278-
implementation in the typechecker is too expensive to enumerate, so we
279-
provide only the full scalar and full vector case *)
280-
; ([Lpdf], "wiener", [DReal; DReal; DReal; DReal; DReal; DReal], AoS)
281-
; ( [Lpdf]
282-
, "wiener"
283-
, [DReal; DReal; DReal; DReal; DReal; DReal; DReal; DReal]
284-
, AoS )
285-
; ( [Lpdf]
286-
, "wiener"
287-
, [DVector; DVector; DVector; DVector; DVector; DVector]
288-
, AoS )
289-
; ( [Lpdf]
290-
, "wiener"
291-
, [DVector; DVector; DVector; DVector; DVector; DVector; DVector; DVector]
292-
, AoS ); ([Lpdf], "wishart_cholesky", [DMatrix; DReal; DMatrix], SoA)
277+
; ([Lpdf], "wishart_cholesky", [DMatrix; DReal; DMatrix], SoA)
293278
; ([Lpdf], "wishart", [DMatrix; DReal; DMatrix], SoA) ]
294279

295280
let basic_vectorized = UnaryVectorized IntsToReals
@@ -2540,6 +2525,23 @@ let () =
25402525
add_unqualified ("variance", ReturnType UReal, [UVector], SoA);
25412526
add_unqualified ("variance", ReturnType UReal, [URowVector], SoA);
25422527
add_unqualified ("variance", ReturnType UReal, [UMatrix], SoA);
2528+
(* new wiener distribution functions -- c++ is fully vectorized, but this
2529+
style of implementation in the typechecker is too expensive to enumerate,
2530+
so we provide only the full scalar and full vector cases *)
2531+
let build_wiener_function name args =
2532+
add_qualified (name, ReturnType UReal, args, AoS) in
2533+
let build_wiener_functions name num_args =
2534+
List.iter [UnsizedType.UReal; UVector] ~f:(fun t ->
2535+
List.iter num_args ~f:(fun n ->
2536+
let normal =
2537+
List.init n ~f:(Fn.const (UnsizedType.AutoDiffable, t)) in
2538+
build_wiener_function name normal;
2539+
(* grad precision as last argument *)
2540+
build_wiener_function name (normal @ [(DataOnly, UnsizedType.UReal)])))
2541+
in
2542+
build_wiener_functions "wiener_lpdf" [6; 8];
2543+
build_wiener_functions "wiener_lcdf_unnorm" [5; 8];
2544+
build_wiener_functions "wiener_lccdf_unnorm" [5; 8];
25432545
add_unqualified
25442546
("wishart_cholesky_rng", ReturnType UMatrix, [UReal; UMatrix], AoS);
25452547
add_unqualified ("wishart_rng", ReturnType UMatrix, [UReal; UMatrix], AoS);

src/stanc/CLI.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -454,9 +454,9 @@ let commands =
454454
; tty_colors
455455
; flags }))
456456

457-
let exit_ok = 0
457+
let exit_ok = Cmd.Exit.ok
458458
let exit_err = 1
459-
let exit_ice = 125
459+
let exit_ice = Cmd.Exit.internal_error
460460

461461
let info =
462462
let doc = "compile Stan programs to C++" in
@@ -485,7 +485,7 @@ let info =
485485
Cmd.Exit.
486486
[ info ~doc:"on success." exit_ok
487487
; info ~doc:"on compilation failure." exit_err
488-
; info ~doc:"on command line parsing errors." 124
488+
; info ~doc:"on command line parsing errors." cli_error
489489
; info ~doc:"on internal compiler errors. Please file a bug!" exit_ice ]
490490
in
491491
Cmd.info "%%NAME%%"

test/integration/good/function-signatures/distributions/univariate/continuous/wiener/wiener_4_lccdf_def_args.stan

Lines changed: 754 additions & 0 deletions
Large diffs are not rendered by default.

test/integration/good/function-signatures/distributions/univariate/continuous/wiener/wiener_4_lccdf_def_args_prec.stan

Lines changed: 754 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
data {
2+
int N;
3+
vector[N] d_vec;
4+
}
5+
transformed data {
6+
real transformed_data_real;
7+
transformed_data_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, d_vec);
8+
}
9+
parameters {
10+
vector[N] p_vec;
11+
}
12+
transformed parameters {
13+
real transformed_param_real;
14+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, d_vec, p_vec);
15+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, d_vec);
16+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, p_vec);
17+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, d_vec);
18+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, d_vec);
19+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, p_vec, d_vec);
20+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, d_vec, p_vec);
21+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, p_vec, p_vec);
22+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, p_vec, p_vec);
23+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, d_vec, p_vec);
24+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, d_vec);
25+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, p_vec);
26+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, p_vec);
27+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, p_vec);
28+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, p_vec);
29+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, d_vec);
30+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, d_vec);
31+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, p_vec);
32+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, d_vec);
33+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, d_vec);
34+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, d_vec, p_vec);
35+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, d_vec);
36+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, p_vec);
37+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, d_vec);
38+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, d_vec, p_vec);
39+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, p_vec);
40+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, p_vec, d_vec);
41+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, p_vec);
42+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, d_vec, d_vec);
43+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, p_vec, p_vec);
44+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, d_vec, d_vec);
45+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, d_vec);
46+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, d_vec);
47+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, d_vec);
48+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, d_vec);
49+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, d_vec);
50+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, d_vec, d_vec);
51+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, p_vec);
52+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, d_vec);
53+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, d_vec);
54+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, p_vec);
55+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, p_vec);
56+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, d_vec);
57+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, p_vec);
58+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, d_vec);
59+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, d_vec);
60+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, p_vec);
61+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, p_vec);
62+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, p_vec);
63+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, p_vec);
64+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, p_vec);
65+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, p_vec);
66+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, d_vec);
67+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, p_vec);
68+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, p_vec);
69+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, d_vec, d_vec);
70+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, p_vec);
71+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, d_vec);
72+
}
73+
model {
74+
p_vec ~ normal(0, 1);
75+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
data {
2+
int N;
3+
real d_real;
4+
vector[N] d_vec;
5+
}
6+
transformed data {
7+
real transformed_data_real;
8+
transformed_data_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, d_vec, d_real);
9+
}
10+
parameters {
11+
vector[N] p_vec;
12+
}
13+
transformed parameters {
14+
real transformed_param_real;
15+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, d_vec, p_vec, d_real);
16+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, d_vec, d_real);
17+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, p_vec, d_real);
18+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, d_vec, d_real);
19+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, d_vec, d_real);
20+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, p_vec, d_vec, d_real);
21+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, d_vec, p_vec, d_real);
22+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, p_vec, p_vec, d_real);
23+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, p_vec, p_vec, d_real);
24+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, d_vec, p_vec, d_real);
25+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, d_vec, d_real);
26+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, p_vec, d_real);
27+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, p_vec, d_real);
28+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, p_vec, d_real);
29+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, p_vec, d_real);
30+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, d_vec, d_real);
31+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, d_vec, d_real);
32+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, p_vec, d_real);
33+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, d_vec, d_real);
34+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, d_vec, d_real);
35+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, d_vec, p_vec, d_real);
36+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, d_vec, d_real);
37+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, p_vec, d_real);
38+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, d_vec, d_real);
39+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, d_vec, p_vec, d_real);
40+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, p_vec, d_real);
41+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, p_vec, d_vec, d_real);
42+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, p_vec, d_real);
43+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, d_vec, d_vec, d_real);
44+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, p_vec, p_vec, d_real);
45+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, d_vec, d_vec, d_real);
46+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, d_vec, d_real);
47+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, d_vec, d_real);
48+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, d_vec, d_vec, d_real);
49+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, d_vec, d_real);
50+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, d_vec, d_real);
51+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, d_vec, d_vec, d_real);
52+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, p_vec, d_real);
53+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, d_vec, d_real);
54+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, d_vec, d_real);
55+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, p_vec, p_vec, d_real);
56+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, p_vec, d_real);
57+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, d_vec, d_vec, d_vec, d_real);
58+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, p_vec, d_real);
59+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, d_vec, d_real);
60+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, d_vec, d_real);
61+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, p_vec, p_vec, d_real);
62+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, d_vec, d_vec, p_vec, d_real);
63+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, p_vec, d_real);
64+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, d_vec, d_vec, p_vec, d_real);
65+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, p_vec, d_real);
66+
transformed_param_real = wiener_lccdf_unnorm(p_vec, d_vec, p_vec, p_vec, p_vec, d_real);
67+
transformed_param_real = wiener_lccdf_unnorm(p_vec, p_vec, p_vec, p_vec, d_vec, d_real);
68+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, p_vec, d_real);
69+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, p_vec, d_vec, p_vec, d_real);
70+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, d_vec, d_vec, d_real);
71+
transformed_param_real = wiener_lccdf_unnorm(d_vec, d_vec, p_vec, p_vec, p_vec, d_real);
72+
transformed_param_real = wiener_lccdf_unnorm(d_vec, p_vec, d_vec, p_vec, d_vec, d_real);
73+
}
74+
model {
75+
p_vec ~ normal(0, 1);
76+
}

0 commit comments

Comments
 (0)