New in rnel.betting: refined truth (Section 10 of "What does T = 0.7 mean?", contributed by
F. Smarandache), after the n-valued refined neutrosophic set with the sources read as possible worlds.
refined_triplet returns the sextuple (T_abs, T_rel; I_con, I_ign; F_rel, F_abs): T_rel is the betting T
("true in at least one source"), T_abs = tau(min_j e_j+) is "true in every source" with its own error bound
(Proposition 9) and never coexists with a positive falsity (Proposition 10). refined_verdict gives
"supported in every source" / "supported in some source" (and the same for "refuted"). graded_truth builds
sub-truths T_k against "every theta_j <= theta0 + eta_k" and merges them with merge_log_capitals, the mean of
the capitals, which keeps the guarantee under any dependence (Proposition 11); a t-conorm such as the maximum
does not. absolute_degree is the building block.
New in rnel.plithogeny: typed plithogenic statistics from counts (Section 8 of "Typed Indeterminacy",
ISFSEA 2026, contributed by F. Smarandache). typed_plithogenic_report gives one typed triple
(T; I_meas, I_samp; F) per attribute value with joint coverage, and the contradiction degree between attribute
values computed from data as the gap between simultaneous Clopper-Pearson intervals (contradiction_gap), a
lower confidence bound on the dissimilarity of the targets. clopper_pearson and typed_triple_from_counts
are pure Python (checked against scipy to 1e-9).
Tests reproduce the manuscripts: absolute truth of benefit is 0 in the 33 streptokinase trials; the
three-laboratory example gives c_hat = 0, 0.208 and 0.125.
New (experimental, standard library only): rnel.betting. Betting (e-value) reading of a neutrosophic triplet
built from several sources, from Leyva-Vázquez and Smarandache, "What does T = 0.7 mean?" (manuscript, 2026).
Two bettors stake a fixed fraction lam of their capital on every source, one against not-A and one against A;
T = max(0, 1 - 1/K+), F = max(0, 1 - 1/K-), I = conflict TF + ignorance (1-T)(1-F). Anytime-valid guarantee by
Ville's inequality; 1 - T is an anytime-valid p-value. BettingState (constant stake, record values T, F*,
Belnap masses, verdicts, first crossing), MixtureState (mixture over stakes), betting_triplet (one call),
e-values for two point hypotheses (point_evalues) and for complementary one-sided hypotheses about normal
estimates with a design effect (gaussian_evalues), and helpers log_odds_ratio, log_risk_ratio,
log_ratio_from_ci.
Tests: tests/test_betting.py (manuscript numbers: two opposite sources give K = 250.5 and T = F = 0.996, pooled
K = 1; streptokinase trials first cross at trial 8 with T = 0.9547 and dip to 0.9142; IPASS gives conflict with
K+ = 661.3 and K- = 2180.8 and "insufficient" when pooled; pooling never registers conflict; order invariance;
record values never fall; Ville bound under the null within 3 SE; mixture equals the average of capitals).
Agrees with the manuscript code (tfbet.py) to 1e-12 on random inputs.
Consolidates the modules used by Neutrosophic Evidence: credal and neutrosophic-credal tools,
order-free conflict diagnostics, refined neutrosophic statistics, RNEL-MVC and active learning,
DSmT, copula N-norms, plithogenic operators, and base-rate score functions.
Adds the explicit affine bridge I = (1 + eps) / 2, theorem-labelled tests, and a reproducibility
runner (python -m rnel.book regenerate --check) using only repository-relative paths.
Adds Python 3.10–3.13 test CI and packaging checks. The PyPI upload remains a manual owner action.
New (experimental): rnel.existential. Existential (noisy-OR) triple of a claim from per-source stance
probabilities (support, refute, insufficient): T = 1 - prod(1 - s_k), F = 1 - prod(1 - r_k), I = prod(n_k),
computed in log space. The glut g = T + I + F - 1 of these product expressions equals Dempster's conflict K of the
conjunctive combination of m_k({s}) = s_k, m_k({r}) = r_k, m_k(Theta) = n_k (dempster_conflict computes K directly);
with one stance per source and independent sources it is also P(some support and some refutation).
belnap_masses maps (T, I, F) to (t, f, b, n) and raises (or warns with strict=False) outside the faithful
region. Calibration tools without scikit-learn: PAVA isotonic_fit/isotonic_predict, inductive Venn-Abers
(venn_abers, cached per insertion rank), Mondrian isotonic calibration by stratum (mondrian_calibrate, with
base-rate and global fallbacks) and a split-conformal glut p-value (glut_test).
Tests: tests/test_existential.py (g = K to 1e-12; Monte Carlo frequency of support-and-refute; single source
has no glut; Belnap masses non-negative and summing to 1; Venn-Abers equal to brute-force refits; conformal
false-alarm rate <= alpha + 3 SE; Mondrian calibration lowers per-stratum ECE with dependent sources).
In 0.3.0: rnel.dsmt (developed on branch feat/dsmt)¶
New experimental module rnel.dsmt: Dezert-Smarandache theory on small frames (standard library only).
Frames under the free DSm model (hyper-power set, Venn-region codification), Shafer's model and hybrid models
(Frame(atoms, model, empty=[...]), string syntax "A|B", "A&B"); rules conjunctive (= classic DSm rule on
the free model, = Smets/TBM with conflict on the empty set otherwise; aliases dsmc, tbm), dempster,
yager, dubois_prade, pcr5 (Smarandache-Dezert general s-source form, canonical-form members, product
weights), pcr6 (Martin-Osswald, sum weights), pcr6_plus (Dezert, Dezert and Smarandache 2021), sequential,
combine_all; decision betp (generalised pignistic, DSm cardinality), dsmp (DSmP_epsilon), belief,
plausibility; the binary-frame dictionary with RNEL: tuple_to_bba/bba_to_tuple (m(x)=T, m(not x)=F,
m(x¬ x)=C, m(x|not x)=U+G, m(empty)=N), reports_to_bba, opinion_to_bba, and the credal reading
bba_to_triple/triple_to_bba/belnap_probability (free binary masses = probabilities on the Belnap frame).
In 0.3.0: rnel.neutro_credal (developed on branch feat/neutro-credal-tools)¶
New experimental module rnel.neutro_credal: credal tools for neutrosophic triples (needs numpy + scipy, extra
rnel[credal]). Under the betting reading T <= P(A) <= 1 - F the triple inherits Walley's checks and tools:
avoids_sure_loss, sure_loss_degree (closed form (T + F - 1)/2, Theorem 3), is_coherent/classify (LP, and the
closed form of Theorem 2 on singletons), natural_extension of composite events as triples, coherent_correction
(I^E <= I, Theorem 1(c)), singleton_intervals_check, singleton_natural_extension, singleton_correction,
idm_triple (Corollary 2), decisions by sets (interval_dominance, maximality, e_admissible), the glut
lifting to_glut_frame/GlutLifting (Theorem 8; minimal, Belnap and disjoint frames), glut_conjunction
(N-norms as natural extensions, Theorem 9), sl_retraction (Theorem 5) and credal_diagnosis, which combines the
credal checks, natural extension and decision with the RNEL state (a, b, u, c) and C* from evidence per source.
In 0.3.0: rnel.credal (developed on branch feat/credal)¶
New experimental module rnel.credal (needs numpy + scikit-learn, extra rnel[credal]).
CredalEnsemble wraps a scikit-learn ensemble (RandomForest, 100 trees, min_samples_leaf=5 by default) and
returns per-class lower/upper probabilities over the members (envelope: hull, alpha-trimmed as in Nguyen,
Zhang & Destercke, ECSQARU 2023, doi:10.1007/978-3-031-45608-4_21, or per-class quantiles), plus evidence
counts (leaf, votes, mean). to_neutrosophic/from_neutrosophic (T = l, I = u - l, F = 1 - u) are a
change of representation only. Information beyond the credal set comes from per-view evidence:
sup_gap_views, c_star_multiclass (sup-norm extension of C*), c_star_one_vs_rest, evidential_state
(a, b, u, c with T = a + c, F = b + c, I = u + c) and decide (answer / abstain_seek_data / review_sources /
reject).
Tests: tests/test_credal.py.
In 0.3.0: rnel.conflict (developed on branch exp/conflict-first-principles)¶
New experimental module rnel.conflict: between-source conflict from first principles.k_between
(K_b = min(M+, M-), the unique measure satisfying ally consolidation, unanimity null and opposed-pair
additivity), k_within, credal_gap, multinomial sup_gap, the additive state ConflictState (R, S, K_w)
whose fusion is order-free, the normalised component C* = 2 K_b / (R + S + W), state_from_tuple
(identifiability), provenance-aware fusion (group_counts, dependence_interval, atom_union) and the two
forms of Definition 8.4 for comparison (def84_sequential, def84_maxpair). Definition 8.4 itself is unchanged.
New experimental module rnel.off: signed evidence and over/under/off values.EvidenceLedger records reports
and retractions per source (report, retract, retract_source, the unfusion of Subjective Logic) and sources
known to invert their reports (invert); an over-retraction is rejected or returned as an OffOpinion flagged as
lying outside the Beta region (r > -aW and s > -(1-a)W). The module also implements the over/under/off operators
of Smarandache and Leyva-Vázquez (offunion, offintersection, offcomplement, scaled conjunction and disjunction,
typed discounting with a real trust value, the off-RNEL tuple and the retraction map).
New in rnel.operators: base-rate-calibrated conjunction and disjunction (calibrated_and, calibrated_or),
Section 5.2 of Smarandache and Leyva-Vázquez. They add to any priority-product operator ((T, I, N, F),
multi-uncertainty or RNEL) the transfer of mass from indeterminacy to T (or F) that reproduces SL
multiplication (comultiplication) for arbitrary base rates. Tests: tests/test_calibrated.py (equality with SL
for random base rates in the three families, De Morgan with complemented base rates, reduction to the
uncalibrated operators at the extreme base rates).
scripts/check_off_extensions.py: numerical checks of the off-extension theorems and worked applications.
Fix (rnel.decide.Policy): the evidence gate is now monotone. In 0.1.0 the policy abstained when the ignorance
component G was at or above its threshold and otherwise answered with the leading side. Since G falls whenever any
report arrives, a report supporting x could unlock the answer "refuted": with the default policy, 3 opposing
reports gave "abstain" but 3 opposing + 1 supporting gave "refuted" (and symmetrically). This violates the AGM
inclusion postulate. The gate now applies to the asserted side: answering T (F) requires more supporting (opposing)
reports than the count at which the old total-mass gate opened, W(1/G − 1). With one-sided evidence both gates agree;
on all states with up to 29 reports per side only (1,3) and (3,1) change, from an answer to "abstain".
Policy(side_gate=False) reproduces 0.1.0.
Tests: tests/test_decide_monotone.py (legacy failure reproduced; monotonicity for 18 threshold settings; agreement
with 0.1.0 on one-sided evidence; fused-sources case; README example unchanged).