@@ -83,12 +83,18 @@ def log_cdf_eq(x_normalized):
8383}
8484
8585
86+ def _scalar_if_array_all_equal (array : np .ndarray | float ) -> np .float64 | np .ndarray | float :
87+ if isinstance (array , np .ndarray ) and array .size != 0 and np .all (array == array [0 ]):
88+ return array [0 ]
89+ return array
90+
91+
8692def _calc_alpha_beta (
8793 mini : np .float64 | np .ndarray | float ,
8894 mode : np .float64 | np .ndarray | float ,
8995 maxi : np .float64 | np .ndarray | float ,
9096 lambd : np .float64 | np .ndarray | float ,
91- ) -> tuple [np .float64 | np .ndarray | float | int , np .float64 | np .ndarray | float | int ]:
97+ ) -> tuple [np .float64 | np .ndarray | float , np .float64 | np .ndarray | float ]:
9298 """Calculate alpha and beta parameters for the underlying beta distribution.
9399
94100 Args:
@@ -107,10 +113,9 @@ def _calc_alpha_beta(
107113 if DEBUG and any (isinstance (x , np .ndarray ) for x in (mini , mode , maxi , lambd )):
108114 sys .stderr .write ("CAB: unexpected arrays in method parameters\n " )
109115 if isinstance (alpha , np .ndarray ) and isinstance (beta , np .ndarray ):
110- if np .all (alpha == alpha [0 ]) and np .all (beta == beta [0 ]):
111- return alpha [0 ], beta [0 ]
112116 if DEBUG :
113117 sys .stderr .write (f"CAB: Unexpected arrays: alpha={ alpha } , beta={ beta } \n " )
118+ return _scalar_if_array_all_equal (alpha ), _scalar_if_array_all_equal (beta )
114119 return alpha , beta
115120
116121
@@ -130,6 +135,11 @@ def sf(x, mini, mode, maxi, lambd=4):
130135
131136
132137def ppf (q , mini , mode , maxi , lambd = 4 , * , fallback = None ):
138+ mini = _scalar_if_array_all_equal (mini )
139+ mode = _scalar_if_array_all_equal (mode )
140+ maxi = _scalar_if_array_all_equal (maxi )
141+ lambd = _scalar_if_array_all_equal (lambd )
142+
133143 alpha , beta = _calc_alpha_beta (mini , mode , maxi , lambd )
134144 _beta_ppf = mini + (maxi - mini ) * scipy .stats .beta .ppf (q , alpha , beta )
135145 # Use fallback if any values are NaN
0 commit comments