Automatic Differentiation
 
Loading...
Searching...
No Matches
logit.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_PRIM_FUN_LOGIT_HPP
2#define STAN_MATH_PRIM_FUN_LOGIT_HPP
3
9#include <cmath>
10
11namespace stan {
12namespace math {
13
46template <typename T, require_floating_point_t<T>* = nullptr>
47inline double logit(const T u) {
48 return std::log(u / (1 - u));
49}
50
57template <typename T, require_integral_t<T>* = nullptr>
58inline double logit(const T u) {
59 return logit(static_cast<double>(u));
60}
61
65struct logit_fun {
73 template <typename T>
74 static inline auto fun(T&& x) {
75 return logit(std::forward<T>(x));
76 }
77};
78
89template <typename Container, require_ad_container_t<Container>* = nullptr>
90inline auto logit(Container&& x) {
92 std::forward<Container>(x));
93}
94
106template <typename Container,
108inline auto logit(Container&& x) {
109 return make_holder(
110 [](auto&& v_ref) {
111 return apply_vector_unary<ref_type_t<Container>>::apply(
112 std::forward<decltype(v_ref)>(v_ref),
113 [](auto&& v) { return (v.array() / (1 - v.array())).log(); });
114 },
115 to_ref(std::forward<Container>(x)));
116}
117
118} // namespace math
119} // namespace stan
120
121#endif
require_t< container_type_check_base< is_container, base_type_t, TypeCheck, Check... > > require_container_bt
Require type satisfies is_container.
fvar< T > logit(const fvar< T > &x)
Definition logit.hpp:14
auto make_holder(F &&func, Args &&... args)
Calls given function with given arguments.
Definition holder.hpp:437
ref_type_t< T && > to_ref(T &&a)
This evaluates expensive Eigen expressions.
Definition to_ref.hpp:18
constexpr decltype(auto) apply(F &&f, Tuple &&t, PreArgs &&... pre_args)
Definition apply.hpp:51
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...
Base template class for vectorization of unary scalar functions defined by a template class F to a sc...
static auto fun(T &&x)
Return the log odds of the specified argument.
Definition logit.hpp:74
Structure to wrap logit() so it can be vectorized.
Definition logit.hpp:65