Coverage report: 100%

Files Functions Classes

coverage.py v7.16.1, created at 2026-09-23 04:11 +0000

      Statements   Branches   Total
File class   coverage statements missing excluded   coverage branches partial   coverage
src/jquantstats/__init__.py (no class)   100% 13 0 0   100% 0 0   100%
src/jquantstats/_cache.py (no class)   100% 16 0 0   100% 2 0   100%
src/jquantstats/_cost_model.py CostModel   100% 9 0 0   100% 6 0   100%
src/jquantstats/_cost_model.py (no class)   100% 13 0 0   100% 0 0   100%
src/jquantstats/_data_reshape.py _ReshapeMixin   100% 34 0 0   100% 6 0   100%
src/jquantstats/_data_reshape.py (no class)   100% 18 0 3   100% 0 0   100%
src/jquantstats/_plots/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/jquantstats/_plots/_backend.py (no class)   100% 34 0 0   100% 4 0   100%
src/jquantstats/_plots/_data/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/jquantstats/_plots/_data/_core.py DataPlots   100% 4 0 2   100% 0 0   100%
src/jquantstats/_plots/_data/_core.py (no class)   100% 17 0 10   100% 0 0   100%
src/jquantstats/_plots/_data/_cumulative.py _CumulativePlotsMixin   100% 5 0 8   100% 0 0   100%
src/jquantstats/_plots/_data/_cumulative.py (no class)   100% 11 0 46   100% 0 0   100%
src/jquantstats/_plots/_data/_distribution.py _DistributionPlotsMixin   100% 2 0 4   100% 0 0   100%
src/jquantstats/_plots/_data/_distribution.py (no class)   100% 9 0 16   100% 0 0   100%
src/jquantstats/_plots/_data/_drawdown.py _DrawdownPlotsMixin   100% 2 0 4   100% 0 0   100%
src/jquantstats/_plots/_data/_drawdown.py (no class)   100% 9 0 24   100% 0 0   100%
src/jquantstats/_plots/_data/_montecarlo.py _MonteCarloPlotsMixin   100% 3 0 4   100% 0 0   100%
src/jquantstats/_plots/_data/_montecarlo.py (no class)   100% 9 0 44   100% 0 0   100%
src/jquantstats/_plots/_data/_periodic.py _PeriodicPlotsMixin   100% 5 0 8   100% 0 0   100%
src/jquantstats/_plots/_data/_periodic.py (no class)   100% 11 0 36   100% 0 0   100%
src/jquantstats/_plots/_data/_rolling.py _RollingPlotsMixin   100% 8 0 8   100% 0 0   100%
src/jquantstats/_plots/_data/_rolling.py (no class)   100% 11 0 72   100% 0 0   100%
src/jquantstats/_plots/_portfolio/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_core.py PortfolioPlots   100% 1 0 0   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_core.py (no class)   100% 8 0 2   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_diagnostics.py _DiagnosticPlotsMixin   100% 4 0 8   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_diagnostics.py (no class)   100% 11 0 33   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_nav.py _NavPlotsMixin   100% 3 0 6   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_nav.py (no class)   100% 10 0 36   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_rolling.py _RollingPortfolioPlotsMixin   100% 3 0 6   100% 0 0   100%
src/jquantstats/_plots/_portfolio/_rolling.py (no class)   100% 10 0 14   100% 0 0   100%
src/jquantstats/_plots/_protocol.py PortfolioStatsLike   100% 0 0 8   100% 0 0   100%
src/jquantstats/_plots/_protocol.py PortfolioLike   100% 0 0 32   100% 0 0   100%
src/jquantstats/_plots/_protocol.py (no class)   100% 6 0 70   100% 0 0   100%
src/jquantstats/_plots/_render/__init__.py (no class)   100% 12 0 5   100% 2 0   100%
src/jquantstats/_plots/_render/_mpl.py (no class)   100% 163 0 2   100% 70 0   100%
src/jquantstats/_plots/_render/_plotly.py (no class)   100% 180 0 0   100% 100 0   100%
src/jquantstats/_plots/_spec.py HoverSpec   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py LineSeries   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py HistogramSeries   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py BoxSeries   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py BarSeries   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py RefLine   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py Band   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py HeatmapGrid   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py Axis   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py Panel   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py FigureSpec   100% 0 0 0   100% 0 0   100%
src/jquantstats/_plots/_spec.py (no class)   100% 127 0 0   100% 0 0   100%
src/jquantstats/_plots/_specs/__init__.py (no class)   100% 34 0 0   100% 0 0   100%
src/jquantstats/_plots/_specs/_cumulative.py (no class)   100% 44 0 2   100% 4 0   100%
src/jquantstats/_plots/_specs/_dashboard.py (no class)   100% 64 0 3   100% 8 0   100%
src/jquantstats/_plots/_specs/_diagnostics.py (no class)   100% 55 0 2   100% 8 0   100%
src/jquantstats/_plots/_specs/_distribution.py (no class)   100% 30 0 2   100% 2 0   100%
src/jquantstats/_plots/_specs/_drawdown.py (no class)   100% 57 0 2   100% 12 0   100%
src/jquantstats/_plots/_specs/_montecarlo.py (no class)   100% 69 0 4   100% 16 0   100%
src/jquantstats/_plots/_specs/_periodic.py (no class)   100% 59 0 2   100% 4 0   100%
src/jquantstats/_plots/_specs/_rolling.py (no class)   100% 92 0 3   100% 12 0   100%
src/jquantstats/_plots/_style.py (no class)   100% 19 0 0   100% 2 0   100%
src/jquantstats/_portfolio_attribution.py PortfolioAttributionMixin   100% 16 0 2   100% 2 0   100%
src/jquantstats/_portfolio_attribution.py (no class)   100% 13 0 11   100% 0 0   100%
src/jquantstats/_portfolio_base.py _PortfolioMembers   100% 0 0 6   100% 0 0   100%
src/jquantstats/_portfolio_base.py (no class)   100% 4 0 21   100% 0 0   100%
src/jquantstats/_portfolio_constructors.py PortfolioConstructorMixin   100% 24 0 2   100% 10 0   100%
src/jquantstats/_portfolio_constructors.py (no class)   100% 30 0 12   100% 14 0   100%
src/jquantstats/_portfolio_cost.py PortfolioCostMixin   100% 57 0 0   100% 26 0   100%
src/jquantstats/_portfolio_cost.py (no class)   100% 15 0 0   100% 0 0   100%
src/jquantstats/_portfolio_nav.py PortfolioNavMixin   100% 30 0 2   100% 8 0   100%
src/jquantstats/_portfolio_nav.py (no class)   100% 27 0 5   100% 0 0   100%
src/jquantstats/_portfolio_transform.py PortfolioTransformMixin   100% 39 0 2   100% 16 0   100%
src/jquantstats/_portfolio_transform.py (no class)   100% 19 0 10   100% 0 0   100%
src/jquantstats/_portfolio_turnover.py PortfolioTurnoverMixin   100% 20 0 0   100% 4 0   100%
src/jquantstats/_portfolio_turnover.py (no class)   100% 12 0 2   100% 0 0   100%
src/jquantstats/_portfolio_units.py PortfolioUnitsMixin   100% 18 0 0   100% 2 0   100%
src/jquantstats/_portfolio_units.py (no class)   100% 15 0 0   100% 0 0   100%
src/jquantstats/_protocol.py StatsLike   100% 0 0 2   100% 0 0   100%
src/jquantstats/_protocol.py DataLike   100% 0 0 18   100% 0 0   100%
src/jquantstats/_protocol.py (no class)   100% 4 0 39   100% 0 0   100%
src/jquantstats/_reports/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/jquantstats/_reports/_data.py Reports   100% 31 0 0   100% 6 0   100%
src/jquantstats/_reports/_data.py (no class)   100% 47 0 2   100% 16 0   100%
src/jquantstats/_reports/_formatting.py (no class)   100% 16 0 0   100% 4 0   100%
src/jquantstats/_reports/_html.py (no class)   100% 70 0 0   100% 20 0   100%
src/jquantstats/_reports/_metrics.py (no class)   100% 153 0 0   100% 24 0   100%
src/jquantstats/_reports/_portfolio.py Report   100% 51 0 0   100% 6 0   100%
src/jquantstats/_reports/_portfolio.py (no class)   100% 49 0 3   100% 12 0   100%
src/jquantstats/_reports/_protocol.py PlotsLike   100% 0 0 16   100% 0 0   100%
src/jquantstats/_reports/_protocol.py PortfolioLike   100% 0 0 12   100% 0 0   100%
src/jquantstats/_reports/_protocol.py (no class)   100% 5 0 45   100% 0 0   100%
src/jquantstats/_stats/__init__.py (no class)   100% 2 0 0   100% 0 0   100%
src/jquantstats/_stats/_basic.py _BasicStatsMixin   100% 91 0 2   100% 22 0   100%
src/jquantstats/_stats/_basic.py (no class)   100% 44 0 0   100% 0 0   100%
src/jquantstats/_stats/_basic_core.py _BasicCoreMixin   100% 97 0 0   100% 18 0   100%
src/jquantstats/_stats/_basic_core.py (no class)   100% 62 0 5   100% 0 0   100%
src/jquantstats/_stats/_benchmark.py _BenchmarkStatsMixin   100% 64 0 1   100% 12 0   100%
src/jquantstats/_stats/_benchmark.py (no class)   100% 18 0 2   100% 0 0   100%
src/jquantstats/_stats/_capture.py _CaptureStatsMixin   100% 14 0 2   100% 6 0   100%
src/jquantstats/_stats/_capture.py (no class)   100% 11 0 5   100% 0 0   100%
src/jquantstats/_stats/_concentration.py _ConcentrationStatsMixin   100% 10 0 0   100% 4 0   100%
src/jquantstats/_stats/_concentration.py (no class)   100% 8 0 0   100% 0 0   100%
src/jquantstats/_stats/_core.py (no class)   100% 55 0 16   100% 14 0   100%
src/jquantstats/_stats/_drawdown.py _DrawdownMixin   100% 65 0 6   100% 22 0   100%
src/jquantstats/_stats/_drawdown.py (no class)   100% 32 0 5   100% 0 0   100%
src/jquantstats/_stats/_internals.py (no class)   100% 17 0 0   100% 4 0   100%
src/jquantstats/_stats/_montecarlo.py _MonteCarloStatsMixin   100% 55 0 2   100% 16 0   100%
src/jquantstats/_stats/_montecarlo.py (no class)   100% 18 0 5   100% 0 0   100%
src/jquantstats/_stats/_performance.py _RiskStatsMixin   100% 113 0 5   100% 38 0   100%
src/jquantstats/_stats/_performance.py (no class)   100% 31 0 7   100% 0 0   100%
src/jquantstats/_stats/_periodic.py _PeriodicReportingMixin   100% 73 0 0   100% 22 0   100%
src/jquantstats/_stats/_periodic.py (no class)   100% 11 0 5   100% 0 0   100%
src/jquantstats/_stats/_reporting.py _ReportingStatsMixin   100% 88 0 2   100% 30 0   100%
src/jquantstats/_stats/_reporting.py (no class)   100% 22 0 6   100% 0 0   100%
src/jquantstats/_stats/_rolling.py _RollingStatsMixin   100% 63 0 0   100% 22 0   100%
src/jquantstats/_stats/_rolling.py (no class)   100% 20 0 5   100% 0 0   100%
src/jquantstats/_stats/_stats.py Stats   100% 8 0 0   100% 0 0   100%
src/jquantstats/_stats/_stats.py (no class)   100% 30 0 2   100% 0 0   100%
src/jquantstats/_stats/_summary.py _SummaryStatsMixin   100% 47 0 22   100% 12 0   100%
src/jquantstats/_stats/_summary.py (no class)   100% 13 0 25   100% 0 0   100%
src/jquantstats/_truncate.py (no class)   100% 44 0 0   100% 20 0   100%
src/jquantstats/_types.py (no class)   100% 4 0 0   100% 0 0   100%
src/jquantstats/_utils/__init__.py (no class)   100% 3 0 0   100% 0 0   100%
src/jquantstats/_utils/_construction.py (no class)   100% 87 0 3   100% 36 0   100%
src/jquantstats/_utils/_data.py DataUtils   100% 72 0 1   100% 16 0   100%
src/jquantstats/_utils/_data.py (no class)   100% 27 0 0   100% 0 0   100%
src/jquantstats/_utils/_portfolio.py PortfolioUtils   100% 14 0 0   100% 0 0   100%
src/jquantstats/_utils/_portfolio.py (no class)   100% 23 0 0   100% 0 0   100%
src/jquantstats/_utils/_protocol.py PortfolioLike   100% 0 0 4   100% 0 0   100%
src/jquantstats/_utils/_protocol.py (no class)   100% 3 0 13   100% 0 0   100%
src/jquantstats/data.py Data   100% 66 0 3   100% 22 0   100%
src/jquantstats/data.py (no class)   100% 43 0 0   100% 0 0   100%
src/jquantstats/exceptions.py JQuantStatsError   100% 0 0 0   100% 0 0   100%
src/jquantstats/exceptions.py MissingDateColumnError   100% 10 0 0   100% 2 0   100%
src/jquantstats/exceptions.py InvalidCashPositionTypeError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py InvalidPricesTypeError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NonPositiveAumError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py RowCountMismatchError   100% 3 0 0   100% 0 0   100%
src/jquantstats/exceptions.py IntegerIndexBoundError   100% 3 0 0   100% 0 0   100%
src/jquantstats/exceptions.py InvalidTruncateBoundError   100% 3 0 0   100% 0 0   100%
src/jquantstats/exceptions.py MixedTruncateBoundsError   100% 3 0 0   100% 0 0   100%
src/jquantstats/exceptions.py PositionExprColumnError   100% 4 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NoAssetColumnsError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NegativeCostBpsError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NegativeAnnualFeeError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py InvalidMaxBpsError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py UncleanSeriesError   100% 4 0 0   100% 0 0   100%
src/jquantstats/exceptions.py MissingReturnsColumnError   100% 4 0 0   100% 0 0   100%
src/jquantstats/exceptions.py MuSchemaError   100% 3 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NullsInReturnsError   100% 4 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NoBenchmarkError   100% 1 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NonPositiveWindowError   100% 2 0 0   100% 0 0   100%
src/jquantstats/exceptions.py NonPositivePeriodsPerYearError   100% 1 0 0   100% 0 0   100%
src/jquantstats/exceptions.py BenchmarkAlignmentWarning   100% 0 0 0   100% 0 0   100%
src/jquantstats/exceptions.py UnknownPlotBackendError   100% 4 0 0   100% 0 0   100%
src/jquantstats/exceptions.py MissingBackendError   100% 3 0 0   100% 0 0   100%
src/jquantstats/exceptions.py (no class)   100% 48 0 0   100% 0 0   100%
src/jquantstats/portfolio.py Portfolio   100% 48 0 0   100% 26 0   100%
src/jquantstats/portfolio.py (no class)   100% 75 0 0   100% 4 0   100%
src/jquantstats/result.py Result   100% 27 0 0   100% 8 0   100%
src/jquantstats/result.py (no class)   100% 12 0 0   100% 0 0   100%
Total     100% 3925 0 897   100% 804 0   100%

No items found using the specified filter.