PTAB Interferences Example

  1"""Example usage of pyUSPTO for PTAB interferences.
  2
  3Demonstrates the PTABInterferencesClient for searching interference decisions
  4by outcome, party name, and application number.
  5"""
  6
  7import os
  8
  9from pyUSPTO import PTABInterferencesClient, USPTOConfig
 10
 11# --- Client Initialization ---
 12api_key = os.environ.get("USPTO_API_KEY", "YOUR_API_KEY_HERE")
 13if api_key == "YOUR_API_KEY_HERE":
 14    raise ValueError(
 15        "API key is not set. Set the USPTO_API_KEY environment variable."
 16    )
 17config = USPTOConfig(api_key=api_key)
 18client = PTABInterferencesClient(config=config)
 19
 20print("-" * 40)
 21print("Example 1: Search interference decisions")
 22print("-" * 40)
 23
 24# Search for recent interference decisions
 25response = client.search_decisions(
 26    decision_date_from_q="2023-01-01",
 27    limit=5,
 28)
 29
 30print(f"\nFound {response.count} interference decisions since 2023")
 31print(f"Displaying first {len(response.patent_interference_data_bag)} results:")
 32
 33for decision in response.patent_interference_data_bag:
 34    print(f"\n  Interference Number: {decision.interference_number}")
 35
 36    if decision.interference_meta_data:
 37        meta = decision.interference_meta_data
 38        print(f"  Style Name: {meta.interference_style_name}")
 39        print(f"  Last Modified: {meta.interference_last_modified_date}")
 40
 41    if decision.senior_party_data:
 42        senior = decision.senior_party_data
 43        print(f"  Senior Party: {senior.patent_owner_name}")
 44        if senior.patent_number:
 45            print(f"  Senior Patent: {senior.patent_number}")
 46
 47    if decision.junior_party_data:
 48        junior = decision.junior_party_data
 49        print(f"  Junior Party: {junior.patent_owner_name}")
 50        if junior.publication_number:
 51            print(f"  Junior Publication: {junior.publication_number}")
 52
 53    if decision.document_data:
 54        doc = decision.document_data
 55        print(f"  Outcome: {doc.interference_outcome_category}")
 56        print(f"  Decision Type: {doc.decision_type_category}")
 57
 58print("-" * 40)
 59print("Example 2: Search by outcome")
 60print("-" * 40)
 61
 62response = client.search_decisions(
 63    interference_outcome_category_q="Final Decision",
 64    decision_date_from_q="2012-01-01",
 65    limit=3,
 66)
 67
 68print(f"\nFound {response.count} final decisions since 2012")
 69print(f"Displaying first {len(response.patent_interference_data_bag)} results:")
 70
 71for decision in response.patent_interference_data_bag:
 72    print(f"\n  Interference Number: {decision.interference_number}")
 73
 74    if decision.senior_party_data:
 75        print(f"  Senior Party: {decision.senior_party_data.patent_owner_name}")
 76        print(
 77            f"  Senior Application: {decision.senior_party_data.application_number_text}"
 78        )
 79
 80    if decision.junior_party_data:
 81        print(f"  Junior Party: {decision.junior_party_data.patent_owner_name}")
 82
 83    if decision.document_data:
 84        print(f"  Outcome: {decision.document_data.interference_outcome_category}")
 85        print(f"  Decision Date: {decision.document_data.decision_issue_date}")
 86
 87print("-" * 40)
 88print("Example 3: Search by party name")
 89print("-" * 40)
 90
 91# Search for decisions involving a specific senior party
 92response = client.search_decisions(
 93    senior_party_name_q="*Corp*",
 94    limit=3,
 95)
 96
 97print(f"\nFound {response.count} decisions with 'Corp' in senior party name")
 98print(f"Displaying first {len(response.patent_interference_data_bag)} results:")
 99
100for decision in response.patent_interference_data_bag:
101    print(f"\n  Interference Number: {decision.interference_number}")
102
103    if decision.senior_party_data:
104        senior = decision.senior_party_data
105        print(f"  Senior Party: {senior.patent_owner_name}")
106        if senior.counsel_name:
107            print(f"  Senior Counsel: {senior.counsel_name}")
108
109    if decision.junior_party_data:
110        junior = decision.junior_party_data
111        print(f"  Junior Party: {junior.patent_owner_name}")
112        if junior.counsel_name:
113            print(f"  Junior Counsel: {junior.counsel_name}")
114
115print("-" * 40)
116print("Example 4: Search by application number")
117print("-" * 40)
118
119response = client.search_decisions(
120    senior_party_application_number_q="12*",
121    limit=3,
122)
123
124print(
125    f"\nFound {response.count} decisions with senior applications starting with '12'"
126)
127print(f"Displaying first {len(response.patent_interference_data_bag)} results:")
128
129for decision in response.patent_interference_data_bag:
130    print(f"\n  Interference Number: {decision.interference_number}")
131
132    if decision.senior_party_data:
133        print(
134            f"  Senior Application: {decision.senior_party_data.application_number_text}"
135        )
136
137    if decision.junior_party_data:
138        print(
139            f"  Junior Publication: {decision.junior_party_data.publication_number}"
140        )
141
142    if decision.document_data:
143        print(f"  Decision Type: {decision.document_data.decision_type_category}")
144
145print("-" * 40)
146print("Example 5: Paginate through decisions")
147print("-" * 40)
148
149max_items = 5
150count = 0
151for decision in client.paginate_decisions(
152    decision_date_from_q="2023-01-01",
153    limit=3,
154):
155    count += 1
156    outcome = (
157        decision.document_data.interference_outcome_category
158        if decision.document_data
159        else "N/A"
160    )
161    print(f"  {count}. {decision.interference_number} - {outcome}")
162
163    if count >= max_items:
164        print(f"  ... (stopping at {max_items} items)")
165        break
166
167print(f"Retrieved {count} decisions via pagination")
168
169print("-" * 40)
170print("Example 6: Advanced search with multiple criteria")
171print("-" * 40)
172
173response = client.search_decisions(
174    decision_type_category_q="Decision",
175    decision_date_from_q="2020-01-01",
176    decision_date_to_q="2023-12-31",
177    sort="documentData.decisionIssueDate desc",
178    limit=3,
179)
180
181print(f"\nFound {response.count} Decisions between 2020-2023")
182print(f"Displaying first {len(response.patent_interference_data_bag)} results:")
183
184for decision in response.patent_interference_data_bag:
185    print(f"\n  Interference Number: {decision.interference_number}")
186
187    if decision.interference_meta_data:
188        print(f"  Style: {decision.interference_meta_data.interference_style_name}")
189
190    if decision.document_data:
191        print(f"  Decision Type: {decision.document_data.decision_type_category}")
192        print(f"  Decision Date: {decision.document_data.decision_issue_date}")
193        print(f"  Outcome: {decision.document_data.interference_outcome_category}")
194
195    if decision.additional_party_data_bag:
196        print(f"  Additional Parties: {len(decision.additional_party_data_bag)}")
197        for party in decision.additional_party_data_bag:
198            print(f"    - {party.additional_party_name}")
199
200print("-" * 40)
201print("Example 7: Direct query string")
202print("-" * 40)
203
204# Use a direct query string for more complex searches
205response = client.search_decisions(
206    query='documentData.interferenceOutcomeCategory:"Final Decision"',
207    limit=3,
208)
209
210print(f"\nFound {response.count} final decisions.")
211print(f"Displaying first {len(response.patent_interference_data_bag)} results:")
212
213for decision in response.patent_interference_data_bag:
214    print(f"\n  Interference Number: {decision.interference_number}")
215
216    if decision.document_data:
217        print(f"  Outcome: {decision.document_data.interference_outcome_category}")