Issue Type
Environment
EdgarTools Version: 5.59.1 (bisected across 5.23.4 – 5.59.1)
Python Version: 3.12
Operating System: Linux Mint 22.1
Bug Description
What you expected to happen:
When a 10-K files two items under one heading, the section map holds one section covering both, and a lookup for either item returns it. #710 set this up in 5.23.4 for "Items 1 and 2. Business and Properties": tenk.business and tenk["Item 2"] both returned the combined section, verified on Viper Energy and Devon Energy.
What actually happened:
On 5.59.1 there are three failure shapes.
1. The #710 filings have regressed. Part I now starts at Item 1A. There is no Item 1, no Item 2 and no combined key, and the Business and Properties text (~360K characters) is in no section at all.
| Filing |
Last release that worked |
First release that fails |
Viper Energy 0002074176-26-000010 |
5.28.5 |
5.29.0 |
Devon Energy 0001193125-26-056485 |
5.33.0 |
5.34.0 |
"Worked" means sections contained part_i_items_1_and_2._business_and_properties and tenk.business returned ~359,700 characters. Both still fail on 5.59.1. I haven't traced the cause; for reference, 5.29.0 added agent-aware TOC parsing and 5.34.0 added the per-form section schema.
2. Headings with a period after each item number have never resolved. Freeport-McMoRan and Cheniere Energy write Items 1. and 2.:
- Freeport
0000831259-25-000006: Items 1. and 2. Business and Properties.
- Cheniere
0000003570-26-000005: TOC row Items 1. and 2. Business and Properties (non-breaking space after "Items"); body heading ITEMS 1. AND 2.    BUSINESS AND PROPERTIES
On 5.23.4 – 5.28.5, detection built keys that kept the punctuation: part_i_items_1._and_2._business_and_properties (Freeport) and part_i_items\xa01._and_2._business_and_properties (Cheniere). The #710 lookup regex part_[iv]+_items_(?:{inum}_and_\d+|\d+_and_{inum}) needs an unbroken _1_and_2, so the period after 1 defeats it: tenk["Item 2"] returned None on both, and tenk.business returned None on Freeport. On every release from 5.45.1 to 5.59.1 no combined key is built at all, and both filings look like shape 1.
3. The second item of a combined heading is unreachable. Freeport's filing also combines Items 7. and 7A. Management's Discussion and Analysis of Financial Condition and Results of Operations and Quantitative and Qualitative Disclosures About Market Risk. On 5.59.1 that content comes back only as part_ii_item_7 (which opens on the combined heading). There is no 7A key, and tenk["Item 7A"] returns None.
Error message (if any):
None. tenk["Item 2"] emits the FutureWarning "found no such item in this filing".
Reproduction
Company/Ticker: VNOM, DVN, FCX, LNG
Time Period: FY2024 (FCX) and FY2025 10-Ks
Relevant Forms: 10-K
Minimal code to reproduce:
import warnings
from edgar import find, set_identity
warnings.simplefilter("ignore", FutureWarning)
set_identity("Your Name your@email.com")
def size(text):
return None if text is None else f"{len(text):,} chars"
FILINGS = {
"Viper Energy": "0002074176-26-000010", # from #710
"Devon Energy": "0001193125-26-056485", # from #710
"Freeport-McMoRan": "0000831259-25-000006",
"Cheniere Energy": "0000003570-26-000005",
}
for name, acc in FILINGS.items():
tenk = find(acc).obj()
print(name, acc)
print(" Part I keys: ", [k for k in tenk.sections.keys() if k.startswith("part_i_")])
print(" business: ", size(tenk.business))
print(" Item 2: ", size(tenk["Item 2"]))
print(" Item 7A: ", size(tenk["Item 7A"]))
Output on 5.59.1:
Viper Energy 0002074176-26-000010
Part I keys: ['part_i_item_1a', 'part_i_item_1b', 'part_i_item_1c', 'part_i_item_3', 'part_i_item_4']
business: None
Item 2: None
Item 7A: 5,815 chars
Devon Energy 0001193125-26-056485
Part I keys: ['part_i_item_1a', 'part_i_item_1b', 'part_i_item_1c', 'part_i_item_3', 'part_i_item_4']
business: None
Item 2: None
Item 7A: 2,119 chars
Freeport-McMoRan 0000831259-25-000006
Part I keys: ['part_i_item_1a', 'part_i_item_1b', 'part_i_item_1c', 'part_i_item_3', 'part_i_item_4']
business: None
Item 2: None
Item 7A: None
Cheniere Energy 0000003570-26-000005
Part I keys: ['part_i_item_1a', 'part_i_item_1b', 'part_i_item_1c', 'part_i_item_3', 'part_i_item_4']
business: None
Item 2: None
Item 7A: 1,344 chars
Additional Context
Issue Type
Environment
EdgarTools Version: 5.59.1 (bisected across 5.23.4 – 5.59.1)
Python Version: 3.12
Operating System: Linux Mint 22.1
Bug Description
What you expected to happen:
When a 10-K files two items under one heading, the section map holds one section covering both, and a lookup for either item returns it. #710 set this up in 5.23.4 for "Items 1 and 2. Business and Properties":
tenk.businessandtenk["Item 2"]both returned the combined section, verified on Viper Energy and Devon Energy.What actually happened:
On 5.59.1 there are three failure shapes.
1. The #710 filings have regressed. Part I now starts at Item 1A. There is no Item 1, no Item 2 and no combined key, and the Business and Properties text (~360K characters) is in no section at all.
0002074176-26-0000100001193125-26-056485"Worked" means
sectionscontainedpart_i_items_1_and_2._business_and_propertiesandtenk.businessreturned ~359,700 characters. Both still fail on 5.59.1. I haven't traced the cause; for reference, 5.29.0 added agent-aware TOC parsing and 5.34.0 added the per-form section schema.2. Headings with a period after each item number have never resolved. Freeport-McMoRan and Cheniere Energy write
Items 1. and 2.:0000831259-25-000006:Items 1. and 2. Business and Properties.0000003570-26-000005: TOC rowItems 1. and 2. Business and Properties(non-breaking space after "Items"); body headingITEMS 1. AND 2.    BUSINESS AND PROPERTIESOn 5.23.4 – 5.28.5, detection built keys that kept the punctuation:
part_i_items_1._and_2._business_and_properties(Freeport) andpart_i_items\xa01._and_2._business_and_properties(Cheniere). The #710 lookup regexpart_[iv]+_items_(?:{inum}_and_\d+|\d+_and_{inum})needs an unbroken_1_and_2, so the period after1defeats it:tenk["Item 2"]returnedNoneon both, andtenk.businessreturnedNoneon Freeport. On every release from 5.45.1 to 5.59.1 no combined key is built at all, and both filings look like shape 1.3. The second item of a combined heading is unreachable. Freeport's filing also combines
Items 7. and 7A. Management's Discussion and Analysis of Financial Condition and Results of Operations and Quantitative and Qualitative Disclosures About Market Risk. On 5.59.1 that content comes back only aspart_ii_item_7(which opens on the combined heading). There is no 7A key, andtenk["Item 7A"]returnsNone.Error message (if any):
None.
tenk["Item 2"]emits the FutureWarning "found no such item in this filing".Reproduction
Company/Ticker: VNOM, DVN, FCX, LNG
Time Period: FY2024 (FCX) and FY2025 10-Ks
Relevant Forms: 10-K
Minimal code to reproduce:
Output on 5.59.1:
Additional Context
\xa0) around the item numbers and the conjunction, soItems 1. and 2.,Items\xa01. and 2.andItems 1 and 2.all yielditems_1_and_2.items_1_and_2key used to. We consumetenk.sectionsdirectly and would otherwise have to parse heading text to know that Item 7 also holds 7A.0001193125-26-067807) all use it.