Source code for flexicon.code.Lists.ConfidenceOperations
#
# ConfidenceOperations.py
#
# Class: ConfidenceOperations
# Confidence level operations for FieldWorks Language Explorer
# projects via SIL Language and Culture Model (LCM) API.
#
# Platform: Python.NET
# FieldWorks Version 9+
#
# Copyright 2025
#
# Import flexlibs exceptions
from ..FLExProject import (
FP_ParameterError,
)
from ..BaseOperations import OperationsMethod
from .possibility_item_base import PossibilityItemOperations
[docs]
class ConfidenceOperations(PossibilityItemOperations):
"""
This class provides operations for managing confidence levels (quality
ratings) in a FieldWorks project.
Confidence levels rate the quality or certainty of research notebook
records (and other LCM types that expose ``ConfidenceRA``). They are
not stored on interlinear ``IWfiAnalysis`` / ``IWfiGloss`` objects.
Confidence levels are implemented as a possibility list using ICmPossibility.
Common confidence levels might include:
- High Confidence (for well-established analyses)
- Medium Confidence (for probable but uncertain analyses)
- Low Confidence (for tentative analyses)
- Unconfirmed (for machine-generated or unverified analyses)
Inherited CRUD Operations (from PossibilityItemOperations):
- GetAll() - Get all confidence levels
- Create() - Create a new confidence level
- Delete() - Delete a confidence level
- Duplicate() - Clone a confidence level
- Find() - Find by name
- Exists() - Check existence
- GetName() / SetName() - Get/set name
- GetDescription() / SetDescription() - Get/set description
- GetGuid() - Get GUID
- CompareTo() - Compare by name
Domain-Specific Methods (ConfidenceOperations):
- GetAnalysesWithConfidence() - Find notebook records using a level
- GetGlossesWithConfidence() - Not supported (IWfiGloss has no confidence)
- GetDefault() - Get default confidence level
This class should be accessed via FLExProject.Confidence property.
Usage::
from flexicon import FLExProject
project = FLExProject()
project.OpenProject("my project", writeEnabled=True)
# Get all confidence levels
for level in project.Confidence.GetAll():
name = project.Confidence.GetName(level)
desc = project.Confidence.GetDescription(level)
print(f"{name}: {desc}")
# Find a specific confidence level
high = project.Confidence.Find("High Confidence")
if high:
# Get notebook records using this confidence level
records = project.Confidence.GetAnalysesWithConfidence(high)
print(f"{len(records)} records have high confidence")
# Create a custom confidence level
custom = project.Confidence.Create("Verified", "en")
project.Confidence.SetDescription(custom,
"Analysis verified by native speaker")
# Find the default confidence level
default = project.Confidence.GetDefault()
if default:
print(f"Default: {project.Confidence.GetName(default)}")
project.CloseProject()
"""
def __init__(self, project):
"""
Initialize ConfidenceOperations with a FLExProject instance.
Args:
project: The FLExProject instance to operate on.
"""
super().__init__(project)
def _get_item_class_name(self):
"""Get the item class name for error messages."""
return "Confidence"
def _get_list_object(self):
"""Get the confidence levels list container."""
return self.project.lp.ConfidenceLevelsOA
# --- Usage Query Operations ---
@OperationsMethod
def GetAnalysesWithConfidence(self, level_or_hvo):
"""
Get all research notebook records that use this confidence level.
Args:
level_or_hvo: Either an ICmPossibility object or its HVO.
Returns:
list: List of IRnGenericRec objects whose ``ConfidenceRA`` matches
this level.
Raises:
FP_NullParameterError: If level_or_hvo is None.
Example:
>>> high = project.Confidence.Find("High Confidence")
>>> records = project.Confidence.GetAnalysesWithConfidence(high)
>>> print(f"Found {len(records)} high-confidence notebook records")
Found 12 high-confidence notebook records
>>> # Show records for each confidence level
>>> for level in project.Confidence.GetAll():
... name = project.Confidence.GetName(level)
... records = project.Confidence.GetAnalysesWithConfidence(level)
... print(f"{name}: {len(records)} records")
Notes:
- Scans ``DataNotebook.GetAll()`` (``IRnGenericRec`` with
``ConfidenceRA`` in LCM)
- Interlinear ``IWfiAnalysis`` objects do not carry confidence
levels; the historical method name is retained
- Returns empty list if no records use this confidence level
- Use before deleting a confidence level
See Also:
GetGlossesWithConfidence, Delete, DataNotebookOperations.GetConfidence
"""
self._ValidateParam(level_or_hvo, "level_or_hvo")
level = self._PossibilityItemOperations__ResolveObject(level_or_hvo)
level_hvo = level.Hvo
records = []
for record in self.project.DataNotebook.GetAll():
confidence = record.ConfidenceRA
if confidence and confidence.Hvo == level_hvo:
records.append(record)
return records
@OperationsMethod
def GetGlossesWithConfidence(self, level_or_hvo):
"""
Not supported: wordform glosses have no confidence field in LCM.
Args:
level_or_hvo: Either an ICmPossibility object or its HVO.
Returns:
Never returns normally.
Raises:
FP_NullParameterError: If level_or_hvo is None.
FP_ParameterError: Always -- ``IWfiGloss`` has no ``ConfidenceRA``.
See Also:
GetAnalysesWithConfidence, WfiAnalysisOperations
"""
self._ValidateParam(level_or_hvo, "level_or_hvo")
raise FP_ParameterError(
"IWfiGloss has no confidence level in LCM; wordform glosses do "
"not reference ConfidenceLevelsOA. Use GetAnalysesWithConfidence "
"for notebook records, or WfiAnalysis approval APIs for "
"interlinear quality."
)
# --- Special Query Operations ---
@OperationsMethod
def GetDefault(self):
"""
Get the default confidence level for the project.
The default confidence level is typically used for new analyses when
no specific confidence level is assigned.
Returns:
ICmPossibility or None: The default confidence level, or None if not set.
Example:
>>> # Get default confidence level
>>> default = project.Confidence.GetDefault()
>>> if default:
... name = project.Confidence.GetName(default)
... print(f"Default confidence level: {name}")
Default confidence level: Medium Confidence
>>> # Use default for new analysis
>>> default = project.Confidence.GetDefault()
>>> if default:
... # Apply to new analysis
... pass
Notes:
- Returns None if no default is configured
- Default is typically the first confidence level in the list
- Some FLEx configurations may not have a default set
- Default can be project-specific
- Consider the first level or "Medium" as conventional defaults
See Also:
GetAll, Find
"""
levels = self.GetAll()
if not levels:
return None
# In FLEx, the first item is often the default
# Some lists may have an IsDefault flag, but typically use first item
return levels[0] if levels else None