Add `check_foreach(...)` function that does multiple checks at once on an array or matrix
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Start by reading the existing check_not_nan, check_positive, and check_finite implementations, including their vectorized overloads and index-reporting behavior. Define the lambda interfaces and confirm how check_foreach should handle arrays and Eigen matrices; it is done when one traversal performs all requested checks while preserving the failing index in errors.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Often we have code that does a series of checks on an std::vector or Eigen matrix like the following
check_not_nan(function, "log odds parameter", beta);
check_positive(function, "log odds parameter", beta);
check_finite(function, "log odds parameter", beta);
The issue is that this causes three separate passes over beta. If beta is a large vector this can be kind of expensive.
We could make this nicer via one of two schems
- Just use a loop for these types of checks
for (auto&& beta_i : beta)
check_not_nan(function, "log odds parameter", beta_i);
check_positive(function, "log odds parameter", beta_i);
check_finite(function, "log odds parameter", beta_i);
}
But then we lose the nice information that the vectorized checks do where it also tells us what index caused the errors.
- A
check_foreachfunction that checks multiple things at every line.
For this we would also need lambdas for each of the check functions. The user would call something like this
check_foreach(function, "log odds parameter", beta, check_not_nan_p, check_positive_p, check_finite_p);
Under the hood this would expand into a loop that handles all of the indexing so that the end error still has the correct index information.
for (Eigen::Index = 0; i < x.size(); i++) {
check_not_nan_p(function, name, x[i], i);
check_positive_p(function, name, x[i], i);
check_finite_p(function, name, x[i], i);
}
So then we only do one pass over the memory and still get the pretty checks
- Vorherrschende Sprache
- C++
- Sterne
- 845
- Forks
- 225
- Ø Merge
- 3 T. 9 Std.
- Gemergte PRs (30 T.)
- 12
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus stan-dev/math
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 54/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 54/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
Maintainer antworten meist innerhalb von 1 Tag
-
numerics performance
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
stan-dev/math#3481 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
`eigendecompose_sym`, `eigenvalues_sym` and `eigenvectors_sym` do not compile for complex matrices of `fvar<var>` or `fvar<fvar<double>>`Evtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offenbug
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
stan-dev/math#3477 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
rhalbersma/xstd-ints#395 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug] Root filesystem scope (/) incorrectly rejects all descendant pathsEvtl. vergeben @mugenkyou hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
neutralinojs/neutralino.js#304 · 1 Kommentar ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 73/100
mattgodbolt/zindex#67 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
NKI-AI/fastslide#105 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 3 Tagen