diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml
index 2a29819..30e8c29 100644
--- a/.github/workflows/wheels.yml
+++ b/.github/workflows/wheels.yml
@@ -72,7 +72,7 @@ jobs:
- uses: actions/upload-artifact@v4
with:
- name: wheels-${{ matrix.buildplat[0] }}
+ name: wheels-${{ matrix.buildplat[1] }}-${{ matrix.buildplat[2] }}
path: wheelhouse/*.whl
diff --git a/package_diagram.html b/package_diagram.html
deleted file mode 100644
index beb2d46..0000000
--- a/package_diagram.html
+++ /dev/null
@@ -1,540 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-classDiagram
-class quadrature {
- +lanczos_quadrature()
- +spectral_density()
-}
-class plotting {
- +figure_csm()
- +figure_orth_poly()
-}
-class stochastic {
- +symmetric()
- +isotropic()
-}
-class primate {
- +get_include()
-}
-class lanczos {
- +lanczos()
- +rayleigh_ritz()
- +fit()
- +OrthogonalPolynomialBasis
-}
-class fttr {
- +ortho_poly()
- +fttr()
-}
-class tqli {
- +sign()
- +tqli()
-}
-class stats {
- +confidence_interval()
- +control_variate_estimator()
- +converged()
- +plot()
- +ControlVariateEstimator
- +MeanEstimatorCLT
-}
-class estimators {
- +suggest_nv_trace()
- +hutch()
-}
-class operators {
- +is_linear_op()
- +matrix_function()
- +normalize_unit()
- +quad()
- +MatrixFunction
- +Toeplitz
-}
-class special {
- +softsign()
- +smoothstep()
- +identity()
- +exp()
- +step()
- +param_callable()
- +figure_fun()
-}
-class tridiag {
- +eigh_tridiag()
- +eigvalsh_tridiag()
-}
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/package_diagram.md b/package_diagram.md
deleted file mode 100644
index 68e6aa0..0000000
--- a/package_diagram.md
+++ /dev/null
@@ -1,65 +0,0 @@
-```mermaid
-classDiagram
-class quadrature {
- +lanczos_quadrature()
- +spectral_density()
-}
-class plotting {
- +figure_csm()
- +figure_orth_poly()
-}
-class stochastic {
- +symmetric()
- +isotropic()
-}
-class primate {
- +get_include()
-}
-class lanczos {
- +lanczos()
- +rayleigh_ritz()
- +fit()
- +OrthogonalPolynomialBasis
-}
-class fttr {
- +ortho_poly()
- +fttr()
-}
-class tqli {
- +sign()
- +tqli()
-}
-class stats {
- +confidence_interval()
- +control_variate_estimator()
- +converged()
- +plot()
- +ControlVariateEstimator
- +MeanEstimatorCLT
-}
-class estimators {
- +suggest_nv_trace()
- +hutch()
-}
-class operators {
- +is_linear_op()
- +matrix_function()
- +normalize_unit()
- +quad()
- +MatrixFunction
- +Toeplitz
-}
-class special {
- +softsign()
- +smoothstep()
- +identity()
- +exp()
- +step()
- +param_callable()
- +figure_fun()
-}
-class tridiag {
- +eigh_tridiag()
- +eigvalsh_tridiag()
-}
-```
\ No newline at end of file
diff --git a/src/primate/stats.py b/src/primate/stats.py
index dacafd7..9b55155 100644
--- a/src/primate/stats.py
+++ b/src/primate/stats.py
@@ -79,11 +79,10 @@ def control_variate_estimator(samples: np.ndarray, cvs: np.ndarray, mu: float, a
return cv_est, (cv_est[-1] - z * SE, cv_est[-1] - z * SE)
-#
# See: https://math.stackexchange.com/questions/102978/incremental-computation-of-standard-deviation
# def _parameterize_stop(criterion: str = "confidence") -> Callable:
class MeanEstimatorCLT:
- """Parameterizes an expected value estimator that checks convergence within a confidence interval using the CLT.
+ """Parameterizes an expected value estimator that checks convergence of a sample mean within a confidence interval using the CLT.
Provides the following methods:
- __call__ = Updates the estimator with newly measured samples
@@ -138,8 +137,8 @@ def __repr__(self) -> str:
msg += f" #S:{ self.n_samples })"
return msg
- def plot(self, samples: np.ndarray, real_trace: Optional[float] = None, **kwargs: dict):
- """Generates figures showing the convergence of sample trace estimates."""
+ def plot(self, samples: np.ndarray, mu: Optional[float] = None, **kwargs: dict):
+ """Generates figures showing the convergence of sample estimates."""
from bokeh.layouts import column, row
from bokeh.models import Band, ColumnDataSource, Legend, NumeralTickFormatter, Range1d, Span
from bokeh.plotting import figure
@@ -166,8 +165,8 @@ def plot(self, samples: np.ndarray, real_trace: Optional[float] = None, **kwargs
p.legend.location = "top_left"
p.yaxis.axis_label = f"Estimates ({(self.confidence*100):.0f}% CI band)"
p.xaxis.axis_label = "Sample index"
- if real_trace is not None:
- true_sp = Span(location=real_trace, dimension="width", line_dash="solid", line_color="red", line_width=1.0)
+ if mu is not None:
+ true_sp = Span(location=mu, dimension="width", line_dash="solid", line_color="red", line_width=1.0)
p.add_layout(true_sp)
p.line(sample_index, sample_avgs, line_color="black", line_width=2.0, legend_label="mean estimate")