# {py:mod}`arelle.ValidateDuplicateFacts` ```{py:module} arelle.ValidateDuplicateFacts ``` ```{autodoc2-docstring} arelle.ValidateDuplicateFacts :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`DuplicateFactSet ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet :summary: ``` * - {py:obj}`DuplicateType ` - * - {py:obj}`DuplicateTypeArg ` - * - {py:obj}`DeduplicationType ` - * - {py:obj}`FactValueEqualityType ` - ```` ### Functions ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`doesSetHaveDuplicateType ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.doesSetHaveDuplicateType :summary: ``` * - {py:obj}`areFactsValueEqual ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.areFactsValueEqual :summary: ``` * - {py:obj}`getAspectEqualFacts ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getAspectEqualFacts :summary: ``` * - {py:obj}`getDeduplicatedFacts ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getDeduplicatedFacts :summary: ``` * - {py:obj}`getDuplicateFactSets ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getDuplicateFactSets :summary: ``` * - {py:obj}`getDuplicateFactSetsWithType ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getDuplicateFactSetsWithType :summary: ``` * - {py:obj}`getFactValueEqualityKey ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getFactValueEqualityKey :summary: ``` * - {py:obj}`getHashEquivalentFactGroups ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getHashEquivalentFactGroups :summary: ``` * - {py:obj}`logDeduplicatedFact ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.logDeduplicatedFact :summary: ``` * - {py:obj}`saveDeduplicatedInstance ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.saveDeduplicatedInstance :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`_ ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts._ :summary: ``` * - {py:obj}`DUPLICATE_TYPE_ARG_MAP ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DUPLICATE_TYPE_ARG_MAP :summary: ``` * - {py:obj}`TypeFactValueEqualityKey ` - ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.TypeFactValueEqualityKey :summary: ``` ```` ### API ````{py:data} _ :canonical: arelle.ValidateDuplicateFacts._ :type: arelle.typing.TypeGetText :value: > None ```{autodoc2-docstring} arelle.ValidateDuplicateFacts._ ``` ```` `````{py:class} DuplicateFactSet :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet ``` ````{py:attribute} facts :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.facts :type: list[arelle.ModelInstanceObject.ModelFact] :value: > None ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.facts ``` ```` ````{py:attribute} _inferredDecimals :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet._inferredDecimals :type: dict[arelle.ModelInstanceObject.ModelFact, float | int | None] :value: > 'field(...)' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet._inferredDecimals ``` ```` ````{py:attribute} _ranges :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet._ranges :type: dict[arelle.ModelInstanceObject.ModelFact, tuple[_decimal.Decimal, _decimal.Decimal]] :value: > 'field(...)' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet._ranges ``` ```` ````{py:method} __iter__() -> collections.abc.Iterator[arelle.ModelInstanceObject.ModelFact] :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.__iter__ ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.__iter__ ``` ```` ````{py:method} areAllComplete() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllComplete ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllComplete ``` ```` ````{py:method} areAllConsistent() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllConsistent ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllConsistent ``` ```` ````{py:method} areAllDecimalsEqual() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllDecimalsEqual ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllDecimalsEqual ``` ```` ````{py:method} areAllValueEqual() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllValueEqual ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAllValueEqual ``` ```` ````{py:method} areAnyComplete() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyComplete ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyComplete ``` ```` ````{py:method} areAnyConsistent() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyConsistent ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyConsistent ``` ```` ````{py:method} areAnyIncomplete() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyIncomplete ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyIncomplete ``` ```` ````{py:method} areAnyInconsistent() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyInconsistent ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areAnyInconsistent ``` ```` ````{py:method} areNumeric() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areNumeric ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areNumeric ``` ```` ````{py:method} areWithinRoundingError() -> bool :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.areWithinRoundingError ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.areWithinRoundingError ``` ```` ````{py:method} deduplicateCompleteSubsets() -> list[arelle.ModelInstanceObject.ModelFact] :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.deduplicateCompleteSubsets ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.deduplicateCompleteSubsets ``` ```` ````{py:method} deduplicateConsistentPairs() -> list[arelle.ModelInstanceObject.ModelFact] :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.deduplicateConsistentPairs ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.deduplicateConsistentPairs ``` ```` ````{py:method} deduplicateConsistentSet() -> tuple[list[arelle.ModelInstanceObject.ModelFact], str | None] :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.deduplicateConsistentSet ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.deduplicateConsistentSet ``` ```` ````{py:method} getDecimals(fact: arelle.ModelInstanceObject.ModelFact) -> float | int | None :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.getDecimals ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.getDecimals ``` ```` ````{py:method} getRange(fact: arelle.ModelInstanceObject.ModelFact) -> tuple[_decimal.Decimal, _decimal.Decimal] :canonical: arelle.ValidateDuplicateFacts.DuplicateFactSet.getRange ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateFactSet.getRange ``` ```` ````` `````{py:class} DuplicateType(*args, **kwds) :canonical: arelle.ValidateDuplicateFacts.DuplicateType Bases: {py:obj}`enum.Flag` ````{py:attribute} NONE :canonical: arelle.ValidateDuplicateFacts.DuplicateType.NONE :value: > 0 ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateType.NONE ``` ```` ````{py:attribute} INCONSISTENT :canonical: arelle.ValidateDuplicateFacts.DuplicateType.INCONSISTENT :value: > 'auto(...)' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateType.INCONSISTENT ``` ```` ````{py:attribute} CONSISTENT :canonical: arelle.ValidateDuplicateFacts.DuplicateType.CONSISTENT :value: > 'auto(...)' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateType.CONSISTENT ``` ```` ````{py:attribute} INCOMPLETE :canonical: arelle.ValidateDuplicateFacts.DuplicateType.INCOMPLETE :value: > 'auto(...)' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateType.INCOMPLETE ``` ```` ````{py:attribute} COMPLETE :canonical: arelle.ValidateDuplicateFacts.DuplicateType.COMPLETE :value: > 'auto(...)' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateType.COMPLETE ``` ```` ````{py:method} __iter__() -> collections.abc.Iterator[arelle.ValidateDuplicateFacts.DuplicateType] :canonical: arelle.ValidateDuplicateFacts.DuplicateType.__iter__ ```` ````{py:property} description :canonical: arelle.ValidateDuplicateFacts.DuplicateType.description :type: str ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateType.description ``` ```` ````` `````{py:class} DuplicateTypeArg(*args, **kwds) :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg Bases: {py:obj}`enum.Enum` ````{py:attribute} NONE :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg.NONE :value: > 'none' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateTypeArg.NONE ``` ```` ````{py:attribute} INCONSISTENT :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg.INCONSISTENT :value: > 'inconsistent' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateTypeArg.INCONSISTENT ``` ```` ````{py:attribute} CONSISTENT :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg.CONSISTENT :value: > 'consistent' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateTypeArg.CONSISTENT ``` ```` ````{py:attribute} INCOMPLETE :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg.INCOMPLETE :value: > 'incomplete' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateTypeArg.INCOMPLETE ``` ```` ````{py:attribute} COMPLETE :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg.COMPLETE :value: > 'complete' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateTypeArg.COMPLETE ``` ```` ````{py:attribute} ALL :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg.ALL :value: > 'all' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateTypeArg.ALL ``` ```` ````{py:method} duplicateType() -> arelle.ValidateDuplicateFacts.DuplicateType :canonical: arelle.ValidateDuplicateFacts.DuplicateTypeArg.duplicateType ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DuplicateTypeArg.duplicateType ``` ```` ````` `````{py:class} DeduplicationType(*args, **kwds) :canonical: arelle.ValidateDuplicateFacts.DeduplicationType Bases: {py:obj}`enum.Enum` ````{py:attribute} COMPLETE :canonical: arelle.ValidateDuplicateFacts.DeduplicationType.COMPLETE :value: > 'complete' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DeduplicationType.COMPLETE ``` ```` ````{py:attribute} CONSISTENT_PAIRS :canonical: arelle.ValidateDuplicateFacts.DeduplicationType.CONSISTENT_PAIRS :value: > 'consistent-pairs' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DeduplicationType.CONSISTENT_PAIRS ``` ```` ````{py:attribute} CONSISTENT_SETS :canonical: arelle.ValidateDuplicateFacts.DeduplicationType.CONSISTENT_SETS :value: > 'consistent-sets' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DeduplicationType.CONSISTENT_SETS ``` ```` ````` ````{py:data} DUPLICATE_TYPE_ARG_MAP :canonical: arelle.ValidateDuplicateFacts.DUPLICATE_TYPE_ARG_MAP :value: > None ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.DUPLICATE_TYPE_ARG_MAP ``` ```` ````{py:function} doesSetHaveDuplicateType(duplicateFacts: arelle.ValidateDuplicateFacts.DuplicateFactSet, duplicateType: arelle.ValidateDuplicateFacts.DuplicateType) -> bool :canonical: arelle.ValidateDuplicateFacts.doesSetHaveDuplicateType ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.doesSetHaveDuplicateType ``` ```` ````{py:function} areFactsValueEqual(factA: arelle.ModelInstanceObject.ModelFact, factB: arelle.ModelInstanceObject.ModelFact) -> bool :canonical: arelle.ValidateDuplicateFacts.areFactsValueEqual ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.areFactsValueEqual ``` ```` ````{py:function} getAspectEqualFacts(hashEquivalentFacts: list[arelle.ModelInstanceObject.ModelFact], includeSingles: bool) -> collections.abc.Iterator[list[arelle.ModelInstanceObject.ModelFact]] :canonical: arelle.ValidateDuplicateFacts.getAspectEqualFacts ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getAspectEqualFacts ``` ```` ````{py:function} getDeduplicatedFacts(modelXbrl: arelle.ModelXbrl.ModelXbrl, deduplicationType: arelle.ValidateDuplicateFacts.DeduplicationType) -> list[arelle.ModelInstanceObject.ModelFact] :canonical: arelle.ValidateDuplicateFacts.getDeduplicatedFacts ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getDeduplicatedFacts ``` ```` ````{py:function} getDuplicateFactSets(facts: list[arelle.ModelInstanceObject.ModelFact], includeSingles: bool) -> collections.abc.Iterator[arelle.ValidateDuplicateFacts.DuplicateFactSet] :canonical: arelle.ValidateDuplicateFacts.getDuplicateFactSets ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getDuplicateFactSets ``` ```` ````{py:function} getDuplicateFactSetsWithType(facts: list[arelle.ModelInstanceObject.ModelFact], duplicateType: arelle.ValidateDuplicateFacts.DuplicateType) -> collections.abc.Iterator[arelle.ValidateDuplicateFacts.DuplicateFactSet] :canonical: arelle.ValidateDuplicateFacts.getDuplicateFactSetsWithType ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getDuplicateFactSetsWithType ``` ```` `````{py:class} FactValueEqualityType(*args, **kwds) :canonical: arelle.ValidateDuplicateFacts.FactValueEqualityType Bases: {py:obj}`enum.Enum` ````{py:attribute} DEFAULT :canonical: arelle.ValidateDuplicateFacts.FactValueEqualityType.DEFAULT :value: > 'default' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.FactValueEqualityType.DEFAULT ``` ```` ````{py:attribute} DATETIME :canonical: arelle.ValidateDuplicateFacts.FactValueEqualityType.DATETIME :value: > 'datetime' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.FactValueEqualityType.DATETIME ``` ```` ````{py:attribute} LANGUAGE :canonical: arelle.ValidateDuplicateFacts.FactValueEqualityType.LANGUAGE :value: > 'language' ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.FactValueEqualityType.LANGUAGE ``` ```` ````` ````{py:data} TypeFactValueEqualityKey :canonical: arelle.ValidateDuplicateFacts.TypeFactValueEqualityKey :value: > None ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.TypeFactValueEqualityKey ``` ```` ````{py:function} getFactValueEqualityKey(fact: arelle.ModelInstanceObject.ModelFact) -> arelle.ValidateDuplicateFacts.TypeFactValueEqualityKey :canonical: arelle.ValidateDuplicateFacts.getFactValueEqualityKey ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getFactValueEqualityKey ``` ```` ````{py:function} getHashEquivalentFactGroups(facts: list[arelle.ModelInstanceObject.ModelFact]) -> list[list[arelle.ModelInstanceObject.ModelFact]] :canonical: arelle.ValidateDuplicateFacts.getHashEquivalentFactGroups ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.getHashEquivalentFactGroups ``` ```` ````{py:function} logDeduplicatedFact(modelXbrl: arelle.ModelXbrl.ModelXbrl, fact: arelle.ModelInstanceObject.ModelFact) -> None :canonical: arelle.ValidateDuplicateFacts.logDeduplicatedFact ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.logDeduplicatedFact ``` ```` ````{py:function} saveDeduplicatedInstance(modelXbrl: arelle.ModelXbrl.ModelXbrl, deduplicationType: arelle.ValidateDuplicateFacts.DeduplicationType, outputFilepath: str) -> None :canonical: arelle.ValidateDuplicateFacts.saveDeduplicatedInstance ```{autodoc2-docstring} arelle.ValidateDuplicateFacts.saveDeduplicatedInstance ``` ````