Download market data from Yahoo! Finance's API
This report presents the forensic synthetic code analysis of ranaroussi/yfinance, a Python project with 24,696 GitHub stars. SynthScan v2.0 examined 19,006 lines of code across 92 source files, recording 407 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 35.9 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 407 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_prices.py | 190 | self.assertTrue(df_daily_divs.index.equals(df_intraday_divs.index)) | CODE |
| HIGH | tests/test_prices.py | 217 | self.assertTrue(df_daily_divs.index.equals(df_intraday_divs.index)) | CODE |
| HIGH | tests/test_prices.py | 259 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 274 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 302 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 317 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 335 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 350 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 479 | # Regression for #2670: when Yahoo returns {"chart": null}, | COMMENT |
| HIGH⚡ | tests/test_ticker.py | 935 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 937 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 941 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 943 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 947 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 949 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 953 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 955 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 959 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 961 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 965 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 967 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 972 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 976 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 980 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 984 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 989 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 993 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 997 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1001 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1005 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1009 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1223 | '{"timeseries": {"error": null, "result": [{"trailingPegRatio": []}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1225 | '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{}]}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1227 | '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{"reportedValue": {}}]}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1229 | '{"timeseries": {"error": null, "result": [{}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1263 | '{"timeseries": {"error": null, "result": []}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1265 | '{"timeseries": {"error": null}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1267 | '{"timeseries": {"error": null, "result": null}}', | CODE |
| HIGH | tests/test_ticker.py | 594 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 623 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 651 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 803 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 832 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 861 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 890 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 918 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 1070 | self.assertTrue(data.equals(data_summary)) | CODE |
| HIGH | tests/test_ticker.py | 1242 | payload = '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{"reportedValue": {"raw": 1.23}}]}]}} | CODE |
| HIGH | tests/test_ticker.py | 1282 | payload = '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{"reportedValue": {"raw": 1.23}}]}]}} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/_http.py | 83 | def _supported_session_classes() -> tuple: | CODE |
| LOW⚡ | yfinance/utils.py | 326 | def retrieve_financial_details(data): | CODE |
| LOW | yfinance/utils.py | 356 | def format_annual_financial_statement(level_detail, annual_dicts, annual_order, ttm_dicts=None, ttm_order=None): | CODE |
| LOW | yfinance/utils.py | 386 | def format_quarterly_financial_statement(_statement, level_detail, order): | CODE |
| LOW | yfinance/utils.py | 1030 | def _generate_table_configurations(title = None) -> str: | CODE |
| LOW | yfinance/utils.py | 1080 | def generate_list_table_from_dict_universal(data: dict, bullets: bool=True, title: str=None, concat_keys=[]) -> str: | CODE |
| LOW | yfinance/utils.py | 1045 | def generate_list_table_from_dict(data: dict, bullets: bool=True, title: str=None) -> str: | STRING |
| LOW | yfinance/utils.py | 1063 | # def generate_list_table_from_dict_of_dict(data: dict, bullets: bool=True, title: str=None) -> str: | STRING |
| LOW | yfinance/base.py | 220 | def get_recommendations_summary(self, as_dict=False): | CODE |
| LOW | yfinance/base.py | 246 | def get_institutional_holders(self, as_dict=False): | CODE |
| LOW | yfinance/base.py | 274 | def get_insider_roster_holders(self, as_dict=False): | CODE |
| LOW | yfinance/base.py | 317 | def get_analyst_price_targets(self) -> dict: | CODE |
| LOW | yfinance/base.py | 645 | def _get_earnings_dates_using_scrape(self, limit = 12, offset = 0) -> Optional[pd.DataFrame]: | CODE |
| LOW | yfinance/base.py | 740 | def _get_earnings_dates_using_screener(self, limit=12) -> Optional[pd.DataFrame]: | CODE |
| LOW | yfinance/data.py | 290 | def _get_cookie_and_crumb_basic(self, timeout): | CODE |
| LOW | yfinance/calendars.py | 295 | def _get_most_active_operands( | CODE |
| LOW | yfinance/calendars.py | 334 | def _get_startdatetime_operators(self, start=None, end=None) -> CalendarQuery: | CODE |
| LOW | yfinance/calendars.py | 472 | def get_economic_events_calendar( | CODE |
| LOW | yfinance/scrapers/holders.py | 110 | def _parse_institution_ownership(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 134 | def _parse_major_direct_holders(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 146 | def _parse_major_holders_breakdown(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 155 | def _parse_insider_transactions(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 209 | def _parse_net_share_purchase_activity(self, data): | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 57 | def get_balance_sheet_time_series(self, freq="yearly") -> pd.DataFrame: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 63 | def get_cash_flow_time_series(self, freq="yearly") -> pd.DataFrame: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 116 | def _get_financials_time_series(self, timescale, keys: list) -> pd.DataFrame: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 187 | def _fetch_fundamentals_chunked(self, ts_url_base: str, timescale: str, keys: list, period_qs: str) -> list: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 195 | def _fetch_fundamentals_payload(self, url: str) -> list: | CODE |
| LOW | yfinance/scrapers/quote.py | 306 | def regular_market_previous_close(self): | CODE |
| LOW | yfinance/scrapers/quote.py | 430 | def three_month_average_volume(self): | CODE |
| LOW | yfinance/scrapers/quote.py | 737 | def _fetch_valuation_measures(self, freq="quarterly"): | CODE |
| LOW | yfinance/scrapers/history.py | 672 | def _reconstruct_intervals_batch(self, df, interval, prepost, tag=-1): | CODE |
| LOW | yfinance/scrapers/history.py | 2704 | def _fix_prices_sudden_change(self, df, interval, tz_exchange, change, unit_switch=False, correct_volume=False, corr | CODE |
| LOW | yfinance/scrapers/history.py | 2978 | def _calc_volume_zscore_weighted(volume, dt, block): | CODE |
| LOW | yfinance/domain/industry.py | 88 | def _parse_top_performing_companies(self, top_performing_companies: Dict) -> Optional[_pd.DataFrame]: | CODE |
| LOW | yfinance/domain/industry.py | 110 | def _parse_top_growth_companies(self, top_growth_companies: Dict) -> Optional[_pd.DataFrame]: | CODE |
| LOW | tests/test_download_concurrency.py | 22 | def test_concurrent_downloads_keep_results_separate(self): | CODE |
| LOW | tests/test_download_concurrency.py | 37 | def test_concurrent_downloads_do_not_raise(self): | CODE |
| LOW | tests/test_download_concurrency.py | 43 | def test_download_does_not_use_module_globals(self): | CODE |
| LOW | tests/test_ticker_locale.py | 16 | def test_default_locale_is_en_us(self): | CODE |
| LOW | tests/test_ticker_locale.py | 20 | def test_default_returns_english(self): | CODE |
| LOW | tests/test_ticker_locale.py | 45 | def test_locale_us_listing_not_translated(self): | CODE |
| LOW | tests/test_utils.py | 25 | def test_mixed_timezones_to_datetime_fails(self): | CODE |
| LOW | tests/test_utils.py | 31 | def test_mixed_timezones_to_datetime(self): | CODE |
| LOW⚡ | tests/test_utils.py | 45 | def test_is_valid_period_format_valid(self): | CODE |
| LOW⚡ | tests/test_utils.py | 51 | def test_is_valid_period_format_invalid(self): | CODE |
| LOW⚡ | tests/test_utils.py | 58 | def test_is_valid_period_format_edge_cases(self): | CODE |
| LOW | tests/test_utils.py | 107 | def test_same_month_different_year(self): | CODE |
| LOW | tests/test_utils.py | 131 | def test_nonstandard_quarters(self): | CODE |
| LOW | tests/test_screener.py | 16 | def test_set_large_size_in_body(self, mock_post): | CODE |
| LOW | tests/test_screener.py | 38 | def test_no_screener_field_is_two_fields_concatenated(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 7 | def test_default_region_is_us(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 11 | def test_region_is_normalized(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 16 | def test_us_and_gb_top_companies_differ(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 25 | def test_industry_region_propagates(self): | CODE |
| LOW⚡ | tests/test_auth.py | 61 | def test_not_logged_in_on_transient_error(self): | CODE |
| LOW⚡ | tests/test_auth.py | 66 | def test_probe_is_a_single_subscriptions_get(self): | CODE |
| LOW⚡ | tests/test_auth.py | 73 | def test_check_login_is_live_not_cached(self): | CODE |
| LOW⚡ | tests/test_auth.py | 83 | def test_free_when_logged_in_no_subscription(self): | CODE |
| LOW⚡ | tests/test_auth.py | 95 | def test_premium_for_unmarketed_tier(self): | CODE |
| 92 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/multi.py | 212 | except Exception: | CODE |
| LOW | yfinance/multi.py | 293 | except Exception as e: | CODE |
| LOW | yfinance/cache.py | 67 | except Exception: | CODE |
| LOW | yfinance/cache.py | 262 | except Exception: | CODE |
| LOW | yfinance/cache.py | 472 | except Exception: | CODE |
| MEDIUM | yfinance/utils.py | 352 | print(f"An error occurred while processing the key: {e}") | CODE |
| LOW | yfinance/live.py | 30 | except Exception as e: | CODE |
| LOW | yfinance/live.py | 66 | except Exception as e: | CODE |
| LOW | yfinance/live.py | 86 | except Exception as e: | CODE |
| MEDIUM | yfinance/live.py | 91 | print(f"Error in heartbeat subscription: {e}") | CODE |
| LOW | yfinance/live.py | 171 | except Exception as handler_exception: | CODE |
| MEDIUM | yfinance/live.py | 176 | print("Error in message handler:", handler_exception) | CODE |
| LOW | yfinance/live.py | 187 | except Exception as e: | CODE |
| MEDIUM | yfinance/live.py | 192 | print("Error while listening to messages: %s", e) | CODE |
| LOW | yfinance/live.py | 242 | except Exception as e: | CODE |
| LOW⚡ | yfinance/live.py | 314 | except Exception as handler_exception: | CODE |
| MEDIUM⚡ | yfinance/live.py | 319 | print("Error in message handler:", handler_exception) | CODE |
| LOW⚡ | yfinance/live.py | 329 | except Exception as e: | CODE |
| MEDIUM⚡ | yfinance/live.py | 334 | print("Error while listening to messages: %s", e) | CODE |
| MEDIUM | yfinance/live.py | 59 | def _connect(self): | CODE |
| MEDIUM | yfinance/live.py | 235 | def _connect(self): | CODE |
| LOW | yfinance/base.py | 187 | except Exception as e: | CODE |
| LOW | yfinance/base.py | 200 | except Exception as err: | CODE |
| LOW | yfinance/base.py | 545 | except Exception as e: | CODE |
| LOW | yfinance/data.py | 183 | except Exception: | CODE |
| LOW | yfinance/data.py | 479 | except Exception as e: | CODE |
| LOW | yfinance/data.py | 528 | except Exception: | CODE |
| LOW | yfinance/data.py | 668 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 106 | except Exception: | CODE |
| LOW⚡ | yfinance/scrapers/fundamentals.py | 138 | except Exception as e: | CODE |
| LOW⚡ | yfinance/scrapers/fundamentals.py | 146 | except Exception: | CODE |
| LOW | yfinance/scrapers/quote.py | 157 | except Exception: | CODE |
| LOW | yfinance/scrapers/quote.py | 484 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/quote.py | 764 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/quote.py | 823 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/funds.py | 196 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/history.py | 231 | except Exception: | CODE |
| LOW | yfinance/scrapers/history.py | 244 | except Exception: | CODE |
| LOW | yfinance/scrapers/history.py | 504 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/history.py | 1089 | except Exception: | CODE |
| LOW | yfinance/domain/market.py | 91 | except Exception as e: | CODE |
| LOW | yfinance/domain/market.py | 112 | except Exception as e: | CODE |
| LOW | yfinance/domain/market.py | 125 | except Exception as e: | CODE |
| MEDIUM | yfinance/domain/market.py | 29 | def __init__(self, market, session=None, timeout=30): | CODE |
| LOW | yfinance/domain/industry.py | 148 | except Exception as e: | CODE |
| LOW | yfinance/domain/sector.py | 147 | except Exception as e: | CODE |
| LOW | tests/test_ticker.py | 1159 | except Exception as e: | CODE |
| LOW | tests/test_ticker.py | 1307 | except Exception: | CODE |
| LOW | tests/test_ticker.py | 1438 | except Exception as e: | CODE |
| LOW | tests/test_price_repair.py | 337 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 377 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 421 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 491 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 652 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 691 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 706 | except Exception: | CODE |
| LOW | tests/test_multi.py | 41 | except Exception as e: | CODE |
| MEDIUM | tests/test_multi.py | 36 | def do_download(tickers, key): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | yfinance/cache.py | 15 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 17 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 210 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 212 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 420 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 422 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 621 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 623 | # -------------- | COMMENT |
| MEDIUM | yfinance/ticker.py | 107 | # ------------------------ | COMMENT |
| MEDIUM | yfinance/base.py | 131 | # ------------------------ | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 9 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 11 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 16 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 18 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 7 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 9 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 14 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 16 | # ======================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/tickers.py | 22 | CODE | |
| LOW | yfinance/multi.py | 22 | CODE | |
| LOW | yfinance/__init__.py | 23 | CODE | |
| LOW | yfinance/__init__.py | 24 | CODE | |
| LOW | yfinance/__init__.py | 25 | CODE | |
| LOW | yfinance/__init__.py | 26 | CODE | |
| LOW | yfinance/__init__.py | 27 | CODE | |
| LOW | yfinance/__init__.py | 28 | CODE | |
| LOW | yfinance/__init__.py | 29 | CODE | |
| LOW | yfinance/__init__.py | 29 | CODE | |
| LOW | yfinance/__init__.py | 30 | CODE | |
| LOW | yfinance/__init__.py | 31 | CODE | |
| LOW | yfinance/__init__.py | 32 | CODE | |
| LOW | yfinance/__init__.py | 33 | CODE | |
| LOW | yfinance/__init__.py | 34 | CODE | |
| LOW | yfinance/__init__.py | 34 | CODE | |
| LOW | yfinance/__init__.py | 36 | CODE | |
| LOW | yfinance/__init__.py | 38 | CODE | |
| LOW | yfinance/__init__.py | 38 | CODE | |
| LOW | yfinance/__init__.py | 38 | CODE | |
| LOW | yfinance/__init__.py | 39 | CODE | |
| LOW | yfinance/__init__.py | 39 | CODE | |
| LOW | yfinance/utils.py | 22 | CODE | |
| LOW | yfinance/utils.py | 50 | CODE | |
| LOW | yfinance/ticker.py | 22 | CODE | |
| LOW | yfinance/base.py | 22 | CODE | |
| LOW | yfinance/calendars.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 2 | CODE | |
| LOW | yfinance/screener/__init__.py | 2 | CODE | |
| LOW | yfinance/domain/__init__.py | 2 | CODE | |
| LOW | yfinance/domain/__init__.py | 3 | CODE | |
| LOW | yfinance/domain/industry.py | 1 | CODE | |
| LOW | yfinance/domain/sector.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/multi.py | 120 | CODE | |
| LOW | yfinance/multi.py | 226 | CODE | |
| LOW | yfinance/utils.py | 326 | CODE | |
| LOW | yfinance/utils.py | 474 | CODE | |
| LOW | yfinance/utils.py | 650 | CODE | |
| LOW | yfinance/utils.py | 671 | CODE | |
| LOW | yfinance/utils.py | 759 | CODE | |
| LOW | yfinance/utils.py | 907 | CODE | |
| LOW | yfinance/utils.py | 1080 | CODE | |
| LOW | yfinance/live.py | 75 | CODE | |
| LOW | yfinance/live.py | 140 | CODE | |
| LOW | yfinance/live.py | 291 | CODE | |
| LOW | yfinance/base.py | 138 | CODE | |
| LOW | yfinance/base.py | 172 | CODE | |
| LOW | yfinance/const.py | 383 | CODE | |
| LOW | yfinance/screener/query.py | 16 | CODE | |
| LOW | yfinance/screener/screener.py | 64 | CODE | |
| LOW | yfinance/scrapers/analysis.py | 141 | CODE | |
| LOW | yfinance/scrapers/quote.py | 530 | CODE | |
| LOW | yfinance/scrapers/quote.py | 546 | CODE | |
| LOW | yfinance/scrapers/quote.py | 562 | CODE | |
| LOW | yfinance/scrapers/quote.py | 677 | CODE | |
| LOW | yfinance/scrapers/quote.py | 737 | CODE | |
| LOW | yfinance/scrapers/quote.py | 722 | CODE | |
| LOW | yfinance/scrapers/history.py | 38 | CODE | |
| LOW | yfinance/scrapers/history.py | 616 | CODE | |
| LOW | yfinance/scrapers/history.py | 672 | CODE | |
| LOW | yfinance/scrapers/history.py | 1117 | CODE | |
| LOW | yfinance/scrapers/history.py | 1165 | CODE | |
| LOW | yfinance/scrapers/history.py | 1582 | CODE | |
| LOW | yfinance/scrapers/history.py | 2704 | CODE | |
| LOW | tests/test_ticker.py | 153 | CODE | |
| LOW | tests/test_ticker.py | 311 | CODE | |
| LOW | tests/test_price_repair.py | 25 | CODE | |
| LOW | tests/test_price_repair.py | 301 | CODE | |
| LOW | tests/test_price_repair.py | 386 | CODE | |
| LOW | tests/test_price_repair.py | 468 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.cfg | 1 | [bdist_wheel] | COMMENT |
| LOW | yfinance/tickers.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/multi.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/lookup.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/__init__.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/shared.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/utils.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/utils.py | 1061 | return table | COMMENT |
| LOW | yfinance/search.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/ticker.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/base.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/scrapers/quote.py | 841 | # Simplified the original scrape code for key-statistics. Very expensive for fetching | COMMENT |
| LOW | yfinance/scrapers/quote.py | 921 | filings = result["quoteSummary"]["result"][0]["secFilings"]["filings"] | COMMENT |
| LOW | yfinance/scrapers/history.py | 1321 | # Sometimes Yahoo returns few prices in cents/pence instead of $/£ | COMMENT |
| LOW | yfinance/scrapers/history.py | 2641 | COMMENT | |
| LOW | yfinance/scrapers/history.py | 2941 | # # There's a stock split near the volume spike, so | COMMENT |
| LOW | tests/test_ticker.py | 201 | f"End date {df.index[-1]} out of range for period={period}") | COMMENT |
| LOW | tests/test_ticker.py | 361 | # def test_no_expensive_calls_introduced(self): | COMMENT |
| LOW | tests/test_ticker.py | 1321 | # fast_info_keys = sorted(list(fast_info_keys)) | COMMENT |
| LOW | tests/test_ticker.py | 1341 | # key_rename_map["last_volume"] = ["volume", "regularMarketVolume"] | COMMENT |
| LOW | tests/test_ticker.py | 1361 | # custom_tolerances["ten_day_average_volume"] = 1e-1 | COMMENT |
| LOW | tests/test_ticker.py | 1381 | # if not m in ticker.info: | COMMENT |
| LOW | tests/test_ticker.py | 1401 | # if correct is None: | COMMENT |
| LOW | tests/context.py | 41 | # class CachedLimiterSession(CacheMixin, LimiterMixin, Session): | COMMENT |
| LOW | .github/FUNDING.yml | 1 | # # These are supported funding model platforms | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/tickers.py | 50 | CODE | |
| LOW | yfinance/tickers.py | 63 | CODE | |
| LOW | yfinance/multi.py | 55 | CODE | |
| LOW | yfinance/multi.py | 120 | CODE | |
| LOW | yfinance/multi.py | 255 | CODE | |
| LOW | yfinance/multi.py | 267 | CODE | |
| LOW | yfinance/search.py | 32 | CODE | |
| LOW | yfinance/base.py | 283 | CODE | |
| LOW | yfinance/base.py | 322 | CODE | |
| LOW | yfinance/data.py | 591 | CODE | |
| LOW | yfinance/screener/screener.py | 64 | CODE | |
| LOW | yfinance/scrapers/holders.py | 69 | CODE | |
| LOW | yfinance/scrapers/funds.py | 176 | CODE | |
| LOW | yfinance/scrapers/history.py | 38 | CODE | |
| LOW | yfinance/domain/domain.py | 127 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | yfinance/utils.py | 316 | if 'children' in node: # Check if the node has children | CODE |
| LOW⚡ | yfinance/utils.py | 320 | for key in data['template']: # Loop through the data | CODE |
| LOW | yfinance/utils.py | 651 | # Check if second date dt2 in interval starting at dt1 | COMMENT |
| LOW | yfinance/scrapers/history.py | 1698 | # Check if dividend is 100x market movement. | COMMENT |
| LOW | yfinance/scrapers/history.py | 1895 | # Check if the present div-adjustment is too big/small, or missing | COMMENT |
| LOW | yfinance/scrapers/history.py | 1913 | # Check if adjustment too small | COMMENT |
| LOW | yfinance/scrapers/history.py | 2058 | # Check if the present div-adjustment contradicts price action | COMMENT |
| LOW | yfinance/scrapers/history.py | 2320 | # Check if div_too_big AND adj-too-small-for-prices | COMMENT |
| LOW | yfinance/scrapers/history.py | 2875 | # Set threshold to halfway between split ratio and largest expected normal price change | COMMENT |
| LOW | tests/test_search.py | 25 | # Check if the fuzzy search retrieves relevant results despite the typo | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/__init__.py | 47 | __all__ = ['download', 'Market', 'MarketRegion', 'Search', 'Lookup', 'Ticker', 'Tickers', 'enable_debug_mode', 'set_tz_c | CODE |
| LOW | yfinance/screener/__init__.py | 4 | __all__ = ['EquityQuery', 'FundQuery', 'ETFQuery', 'screen', 'PREDEFINED_SCREENER_QUERIES'] | CODE |
| LOW | yfinance/domain/__init__.py | 5 | __all__ = ['Sector', 'Industry'] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | yfinance/base.py | 685 | # Define the URL | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | yfinance/scrapers/fundamentals.py | 154 | # Step 1: get columns and index: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | yfinance/scrapers/fundamentals.py | 154 | # Step 1: get columns and index: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/data.py | 147 | # Can't simply use a non-caching session to fetch cookie & crumb, | COMMENT |