Skip to content

chore(deps): update hmmlearn requirement from >=0.3.0 to >=0.3.3#22

Open
dependabot[bot] wants to merge 277 commits into
mainfrom
dependabot/pip/hmmlearn-gte-0.3.3
Open

chore(deps): update hmmlearn requirement from >=0.3.0 to >=0.3.3#22
dependabot[bot] wants to merge 277 commits into
mainfrom
dependabot/pip/hmmlearn-gte-0.3.3

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 20, 2026

Updates the requirements on hmmlearn to permit the latest version.

Changelog

Sourced from hmmlearn's changelog.

hmmlearn Changelog

Here you can see the full list of changes between each hmmlearn release.

Version 0.3.3


Released on October 31, 2024.
  • Provide wheels compatible with numpy 2.

Version 0.3.2

Released on March 1st, 2024.

  • update CI/CD Pipelines that were troublesome

Version 0.3.1

Released on March 1st, 2024.

  • Support Python 3.8-3.12
  • Improve stability of test suite. Ensure the documentation examples are covered.
  • Documentation Improvements throughout.

Version 0.3.0

Released on April 18th, 2023.

  • Introduce learning HMMs with Variational Inference. Support
    Gaussian and Categorical Emissions. This feature is provisional and subject
    to further changes.
  • Deprecated support for inputs of shape other than (n_samples, 1) for
    categorical HMMs.
  • Removed the deprecated iter_from_X_lengths and log_mask_zero;
    lengths arrays that do not sum up to the entire array length are no
    longer supported.
  • Support variable n_trials in MultinomialHMM, except for sampling.

Version 0.2.8

Released on September 26th, 2022.

  • The PoissonHMM class was added with an example use case.
  • For MultinomialHMM, parameters after transmat_prior are now
    </tr></table>

... (truncated)

Commits
  • 67c5a95 Release v0.3.3.
  • cd5af66 Reacquire GIL before constructing tuples containing numpy arrays.
  • 0532247 Update CI re: deprecated actions and Python 3.13.
  • 8ae8e7f Move to pyproject.toml and src-layout; stop writing _version.py.
  • 33b1a91 Typo resulting in taking first model instead of best (#555)
  • 97c2fc5 relax pytest requirement. Run pytest via python -I to ignore ci/cd environmen...
  • ea800ba fix the year in CHANGES.rst (#551)
  • eabf0e7 Bump after 0.3.2 release
  • e16f8ea Make the 0.3.2 release
  • b2e96d0 Fix CI/CI Pipelines. (#550)
  • Additional commits viewable in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

anvilfilbert and others added 30 commits May 13, 2026 22:31
tp1_price now reads result['tp1'] as fallback since Claude returns
'tp1' not 'tp1_price'. Added traceback logging in ChartDraw to
surface silent matplotlib failures.
- GUIDE.md: v1.1.0, agent files in architecture tree, sync 5 min,
  gemini_client/grok_client/agent_orchestrator added
- USER_GUIDE.md: v1.1.0, sync 5 min, v1.1.0 changelog with 7-agent
  pipeline, annotated charts, monitor scheduler, consensus scoring
- RATING_CRITERIA.md: file reference updated to agent_trade_prep.py
- RESUME_PROMPT.md: commit 6e70a9d, known gotchas section, requirements,
  chart draw notes, removed completed PDF task from Next Work
- plans/specialized-agents: marked FULLY IMPLEMENTED
- specs/specialized-agents: marked IMPLEMENTED with commit range

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…heck

Adds _retroactive_close_calls() to bitget_sync.py which fetches 1H candles
and resolves TP1/TP2/SL outcomes for saved calls older than 2 hours that were
never linked to a live position. Wired into run_sync() and summed into
calls_closed. Stubs pandas_ta/chart_indicators/chart_sr in conftest.py to
allow chart_context import in test env; fixes trade_history.get_recent_trades
to build dicts without relying on sqlite3.Row row_factory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TDD (Tasks 5+6): 3 tests cover empty/partial/target-reached states.
Returns recorded count, win rate, remaining calls, and enough_data flag
against ACCURACY_TARGET=35 from constants.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… ±10)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ame for finalists

- Add _is_in_kill_zone() and _annotate_kill_zone() helpers (London 07-09 UTC, NY AM 12-14 UTC)
- Apply kill zone annotation in _batch_ai_score and _ai_score result paths
- Raise R:R cap threshold from 1.5 to 2.0 in scanner stable prefix and scoring hints
- Inject DRAW_ON_LIQUIDITY_RULES into _build_scanner_stable() return value
- Add 1H timeframe to agent data collector call in _score_finalists_with_agents()
- Add 11 passing tests in tests/test_scanner_killzone.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
anvilfilbert and others added 25 commits May 18, 2026 16:34
Adds a '?' button in the chart header that expands an inline legend panel
explaining every chart abbreviation with color-coded visual indicators:
trade levels (Entry/SL/TP1/TP2), S/R zones, trendlines, Fibonacci, liquidation
levels, WaveTrend oscillator signals, and volume bars. Panel uses static HTML
(no innerHTML) in a responsive grid layout, matching the existing chart theme.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
blofin_client.get_open_positions() was returning a minimal dict with no
direction, margin_usdt, size_usdt, mark_price, unrealized_pct, or exchange
fields. The frontend expected the same shape as Bitget positions, causing:
  - JS crash: "undefined is not an object (evaluating 'p.direction.toLowerCase')"
  - NaN USDT in Margin in Use KPI card
  - Portfolio Risk section stuck on Loading...

Fix: fully normalise blofin positions to match bitget shape (direction,
margin_usdt, size_usdt, mark_price, unrealized_pct, liquidation_price,
stop_loss, take_profit, margin_mode, exchange, duration_minutes).
Add defensive (p.direction||'long').toLowerCase() guard in 08-live.js v3.4.

Also: docs sync (README/GUIDE/USER_GUIDE/architecture/CLAUDE) reflecting
all post-v1.6.0 work: Gemini fallback, scanner price guards, chart legend
panel, pending orders pop-out. Test count updated 442 → 467.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reflects post-v1.6.0 fixes: Gemini fallback, scanner price guards, chart
legend panel, pending orders pop-out, Blofin live positions shape fix.
Test count 442→467. Latest commit 54bcca0. JS versions updated.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- agent_trade_prep.run() accepts optional model param (default MODEL/Sonnet)
- agent_orchestrator.run_scanner_prep() passes model override through
- scripts/compare_opus_sonnet.py: re-scores latest 15 scanner setups with
  Opus in parallel (max 3 workers), generates docs/opus_sonnet_comparison.md
  with score table, agreement analysis, and per-setup reasoning diff

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…eld names

ReviewerInput requires symbol/direction/setup_type, not collected/sentiment.
TradePrepResult uses tp1_price/tp2_price not tp1/tp2.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
agent_market_sentiment.run() requires symbol and direction in input dict.
Mirrors the pattern used in agent_orchestrator.run_call_analysis().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ad-safety)

SQLite connections cannot be shared across threads. Each worker now opens
its own db_conn() context, fixing 'SQLite objects created in a thread'
ProgrammingError when ThreadPoolExecutor dispatched rescore_with_opus.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The systemd service uses EnvironmentFile=.env, but direct SSH execution
doesn't inherit those env vars. Parse .env at script start so API keys
are available when running python3 scripts/compare_opus_sonnet.py directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Previously sent ANALYST_INSTRUCTIONS + RISK_INSTRUCTIONS as the system param
on every call_analyzer / scanner_batch request. The system prompt alone is
~521 tokens — below Anthropic's 1024-token cache minimum, so it was never
cached. Combined with the existing stable_prefix (rulebook + calibration +
strengths, ~1022 tokens), the merged prefix is now ~1543 tokens — well over
the threshold and gets cached on every call.

Expected impact: ~60% reduction in call_analyzer / scanner_batch input
token cost (currently the biggest single line item at ~$8/wk).

Verify next scan run: token_usage.cached_tokens should be non-zero.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Gemini 2.5 Flash / 2.5 Pro are 'thinking' models — by default they spend
hidden tokens reasoning before producing output. With low max_tokens, the
entire budget is consumed by thinking and the response arrives with no
'parts' array, causing KeyError: 'parts' in the legacy parser.

- Add thinkingConfig.thinkingBudget=0 to both _call() and send_text() to
  disable thinking (the trading journal needs structured output, not a
  reasoning trace)
- Replace direct dict indexing with .get() chain that returns None and
  logs finishReason when parts is empty
- HTTP error path now includes response body (first 200 chars) so 429s
  with quota details are visible in the logs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each Gemini model has its own per-project free-tier daily + per-minute quota.
When one is rate-limited, we now fall through to the next available bucket
instead of failing immediately.

Cascade order (primary then fallbacks, deduped):
  1. $GEMINI_MODEL env var (default: gemini-2.5-flash-lite via constants)
  2. gemini-2.5-flash-lite
  3. gemini-2.5-flash
  4. gemini-2.0-flash-lite
  5. gemini-2.0-flash

Each model tracks its own cooldown timer (parsed from the Google retryDelay
field on 429 responses, default 60s). Subsequent calls skip models that are
in active cooldown. When all 4 buckets are exhausted, returns None and logs
'All cascade models exhausted (cooldown)'.

Also: cleaned up error handling to keep error logs per-model and distinguish
429 (continue cascade) from other failures (abort early).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ble shape

Test was still asserting on the old 'side' field; updated to verify the
new normalised shape (direction, margin_usdt, size_usdt, etc.) that
get_open_positions() returns post-fix.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New shared OpenAI-compatible chat client (openai_compat_client.py), one
thin wrapper per provider:
  - cerebras_client.py: Qwen 3 235B, Llama 3.1 8B (free tier)
  - groq_client.py: Llama 3.3 70B, Llama 4 Scout (LPU free tier)
  - openrouter_client.py: DeepSeek V4 Flash, NVIDIA Nemotron 120B (free)
  - grok_client.py: adds send_text() shim for X.AI's chat-completions

ai_client.send() refactored:
  - New 'provider' param routes a single call through any backend
  - Module-level force_provider() contextmanager (contextvars-based)
    forces the entire downstream pipeline through one backend for
    cascade-comparison testing

scripts/compare_cascades.py: runs 12 scanner finalists through 8 provider
configs + an Opus 4.7 baseline, emits docs/cascade_comparison.md with
agreement table (vs Opus), structural-soundness checks (entry/SL/TP
ordering, R:R≥1.5), per-setup diff, and final ranking by avg |Δ|.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…oss providers

Old behavior: each (setup, provider) combo re-ran agent_data_collector (~15s
external API fetch) → 108 fetches total, ~25 min wasted on duplicate calls
and risking unfair comparison if market data drifted between runs.

New behavior: Phase 1 collects data once per setup (12 fetches). Phase 2
runs all 9 provider configurations against the SAME collected snapshot.
All providers now see byte-identical inputs — comparison purely tests AI
output quality, not data-fetch timing variance.
…rkers

The force_provider() contextmanager uses contextvars to inject a routing
override that affects every ai_client.send() call downstream. Bug: Python's
ThreadPoolExecutor.submit() does NOT propagate contextvars to worker threads
by default — so when agent_trade_prep and agent_orchestrator submitted their
parallel Anthropic+Gemini work, the worker threads saw provider=None and
defaulted back to Anthropic with the wrong model name.

Fix: wrap each submit() with contextvars.copy_context().run(). Adds one
import + 2 line changes per file. Resolves 96/96 ERROR rows in the first
cascade comparison run.

Also adds SKIP_RUNS env var support to compare_cascades.py so the Opus 4.7
baseline (~$5 to re-run) can be skipped and reused from the prior report
on subsequent invocations.
…block

Cerebras + Groq both proxy through Cloudflare. Python urllib's default
User-Agent ('Python-urllib/3.x') triggers Cloudflare's ASN-based bot
detection, returning HTTP 403 with code 1010 (autonomous-system ban).

Setting a browser-shaped User-Agent ('Mozilla/5.0 ... trading-journal/1.6')
identifies us as a normal client without lying about our nature.
- New SETUPS_OVERRIDE env var pins which symbols to score, so re-runs hit
  the same setup list as the cached baseline report (avoids KeyError when
  the auto-scanner shifts the DB's latest-N window between invocations).
- generate_report() now uses .get() instead of direct index access on
  all_results — missing baseline rows produce 'not run'/'no baseline'
  markers instead of crashing the whole report write.
Baseline rows look like '| Baseline (Opus 4.7) | 6 | — | 0.0638 | ...' —
the em-dash in the Δ column is legitimate (no delta vs itself). My parser
filter 'or | — | in line' was treating that as a separator/empty row and
skipping it, so prior baseline data never loaded. Restricted the skip to
specific safe markers (ERROR, 'not run', explicit header/separator lines)
and added an entry/SL all-dashes check for partial-error rows.

Also fixed the main() TOP-3 print loop to use .get() like generate_report
does, so missing entries return None instead of KeyError.
…ooldown

Wires the empirical cascade ranking from docs/cascade_comparison.md into
ai_client.send() as the fallback chain when Anthropic raises APIError:
  1. Groq Llama 4 Scout
  2. Cerebras Qwen 3 235B
  3. Cerebras Llama 3.1 8B
  4. OpenRouter DeepSeek V4
  5. Gemini (internal 4-model cascade)

Each step is skipped if openai_compat_client.is_in_cooldown() reports the
target (base_url, model) is currently rate-limited. On HTTP 429, the
chat_completion wrapper now parses retry-after from the response body and
marks cooldown for that duration (defaulting to 60s). Saves wasted
roundtrips when one provider's daily quota is exhausted while others have
headroom.

force_provider() contextmanager continues to bypass the cascade for testing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ulebook suppression filter

Two compounding biases eliminated (audit 2026-05-20: 422 longs, 0 shorts):

1. Stage 1 (scanner_stages.py):
   The if/elif tagged 'Long' as soon as bullish>=threshold, never reaching
   the Short check even when bearish signals were materially stronger. 8 of
   15 watchlist probes had net-bearish signals mis-tagged Long (e.g. ETHUSDT
   bull 2.6 / bear 5.7 net -3.1 → Long instead of Short). Replaced with
   dominant-side selection: max(bull,bear)>=threshold then pick by bull>bear.

2. Rulebook (ai_rulebook.py):
   The user's auto-generated rule 'Short trades are destroying your account'
   was injected into every AI prompt, biasing scoring after Stage 1 surfaced
   candidates. Added RULEBOOK_SUPPRESS_PATTERNS env-driven filter that drops
   rules whose title or body matches any comma-separated pattern. Lets the
   user pause specific learnings without losing the regeneration pipeline.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…en't cut

confluence_score returns a SIGNED total (positive=bullish, negative=bearish).
Stage 2 sorted by -score and capped at top 30, so strongly bearish symbols
(large negative score) sank to the bottom and were dropped. Caused the
Stage 1 direction-tagging fix to be invisible — even when shorts got tagged
correctly, they never reached Stage 3 AI scoring.

Fix: sort by -abs(score) — preserves conviction-ranking while treating
long/short conviction symmetrically.
Updates the requirements on [hmmlearn](https://github.com/hmmlearn/hmmlearn) to permit the latest version.
- [Changelog](https://github.com/hmmlearn/hmmlearn/blob/main/CHANGES.rst)
- [Commits](hmmlearn/hmmlearn@0.3.0...0.3.3)

---
updated-dependencies:
- dependency-name: hmmlearn
  dependency-version: 0.3.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update python code labels May 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant