本文整理汇总了Python中arelle.Locale类的典型用法代码示例。如果您正苦于以下问题:Python Locale类的具体用法?Python Locale怎么用?Python Locale使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Locale类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: backgroundProfileFormula
def backgroundProfileFormula(cntlr, profileReportFile, maxRunTime, excludeCompileTime):
from arelle import Locale, XPathParser, ValidateXbrlDimensions, ValidateFormula
# build grammar before profiling (if this is the first pass, so it doesn't count in profile statistics)
XPathParser.initializeParser(cntlr.modelManager)
# load dimension defaults
ValidateXbrlDimensions.loadDimensionDefaults(cntlr.modelManager)
import cProfile, pstats, sys, time
# a minimal validation class for formula validator parameters that are needed
class Validate:
def __init__(self, modelXbrl, maxRunTime):
self.modelXbrl = modelXbrl
self.parameters = None
self.validateSBRNL = False
self.maxFormulaRunTime = maxRunTime
def close(self):
self.__dict__.clear()
val = Validate(cntlr.modelManager.modelXbrl, maxRunTime)
formulaOptions = val.modelXbrl.modelManager.formulaOptions
if excludeCompileTime:
startedAt = time.time()
cntlr.addToLog(_("pre-compiling formulas before profiling"))
val.validateFormulaCompileOnly = True
ValidateFormula.validate(val)
del val.validateFormulaCompileOnly
cntlr.addToLog(Locale.format_string(cntlr.modelManager.locale,
_("formula pre-compiling completed in %.2f secs"),
time.time() - startedAt))
cntlr.addToLog(_("executing formulas for profiling"))
else:
cntlr.addToLog(_("compiling and executing formulas for profiling"))
startedAt = time.time()
statsFile = profileReportFile + ".bin"
cProfile.runctx("ValidateFormula.validate(val)", globals(), locals(), statsFile)
cntlr.addToLog(Locale.format_string(cntlr.modelManager.locale,
_("formula profiling completed in %.2f secs"),
time.time() - startedAt))
# dereference val
val.close()
# specify a file for log
priorStdOut = sys.stdout
sys.stdout = open(profileReportFile, "w")
statObj = pstats.Stats(statsFile)
statObj.strip_dirs()
statObj.sort_stats("time")
statObj.print_stats()
statObj.print_callees()
statObj.print_callers()
sys.stdout.flush()
sys.stdout.close()
del statObj
sys.stdout = priorStdOut
os.remove(statsFile)
示例2: formatInterval
def formatInterval(self, a, b, dec):
if a is NIL:
return "(nil)"
if isnan(dec) or isinf(dec): dec = 4
if a == b: # not an interval
return Locale.format_decimal(self.modelXbrl.locale, a, 1, max(dec,0))
return "[{}, {}]".format( # show as an interval
Locale.format_decimal(self.modelXbrl.locale, a, 1, max(dec,0)),
Locale.format_decimal(self.modelXbrl.locale, b, 1, max(dec,0)))
示例3: __init__
def __init__(self, cntlr):
self.cntlr = cntlr
self.validateDisclosureSystem = False
self.disclosureSystem = DisclosureSystem.DisclosureSystem(self)
self.validateCalcLB = False
self.validateInferDecimals = False
self.validateUtr = False
self.loadedModelXbrls = []
from arelle import Locale
self.locale = Locale.getUserLocale()
self.defaultLang = Locale.getLanguageCode()
示例4: __init__
def __init__(self, cntlr):
self.cntlr = cntlr
self.validateDisclosureSystem = False
self.disclosureSystem = DisclosureSystem.DisclosureSystem(self)
self.validateCalcLB = False
self.validateInferDecimals = False
self.validateInfoset = False
self.validateUtr = False
self.abortOnMajorError = False
self.collectProfileStats = False
self.loadedModelXbrls = []
from arelle import Locale
self.locale = Locale.getUserLocale(cntlr.config.get("userInterfaceLocaleOverride",""))
self.defaultLang = Locale.getLanguageCode()
示例5: profilerCommandLineRun
def profilerCommandLineRun(cntlr, options, sourceZipStream=None, **kwargs):
from arelle import Locale
import cProfile, pstats, sys, time
profileReportFile = getattr(options, "profilerReportFile", None)
if profileReportFile and not getattr(cntlr, "blockNestedProfiling", False):
startedAt = time.time()
cntlr.addToLog(_("invoking command processing under profiler"))
statsFile = profileReportFile + ".bin"
cntlr.blockNestedProfiling = True
cProfile.runctx("cntlr.run(options, sourceZipStream)", globals(), locals(), statsFile)
cntlr.addToLog(Locale.format_string(cntlr.modelManager.locale,
_("profiled command processing completed in %.2f secs"),
time.time() - startedAt))
# specify a file for log
priorStdOut = sys.stdout
sys.stdout = open(profileReportFile, "w")
statObj = pstats.Stats(statsFile)
statObj.strip_dirs()
statObj.sort_stats("time")
statObj.print_stats()
statObj.print_callees()
statObj.print_callers()
sys.stdout.flush()
sys.stdout.close()
del statObj
sys.stdout = priorStdOut
os.remove(statsFile)
del cntlr.blockNestedProfiling
sys.exit() # raise SYSTEM_EXIT to stop outer execution
示例6: parsePackage
def parsePackage(mainWin, metadataFile):
unNamedCounter = 1
NS = "{http://www.corefiling.com/xbrl/taxonomypackage/v1}"
pkg = {}
currentLang = Locale.getLanguageCode()
tree = etree.parse(metadataFile)
root = tree.getroot()
for eltName in ("name", "description", "version"):
pkg[eltName] = ""
for m in root.iterchildren(tag=NS + eltName):
pkg[eltName] = m.text.strip()
break # take first entry if several
remappings = dict((m.get("prefix"), m.get("replaceWith")) for m in tree.iter(tag=NS + "remapping"))
pkg["remappings"] = remappings
nameToUrls = {}
pkg["nameToUrls"] = nameToUrls
for entryPointSpec in tree.iter(tag=NS + "entryPoint"):
name = None
# find closest match name node given xml:lang match to current language or no xml:lang
for nameNode in entryPointSpec.iter(tag=NS + "name"):
xmlLang = nameNode.get("{http://www.w3.org/XML/1998/namespace}lang")
if name is None or not xmlLang or currentLang == xmlLang:
name = nameNode.text
if currentLang == xmlLang: # most prefer one with the current locale's language
break
if not name:
name = _("<unnamed {0}>").format(unNamedCounter)
unNamedCounter += 1
epDocCount = 0
for epDoc in entryPointSpec.iterchildren(NS + "entryPointDocument"):
if epDocCount:
mainWin.addToLog(_("WARNING: skipping multiple-document entry point (not supported)"))
continue
epDocCount += 1
epUrl = epDoc.get("href")
base = epDoc.get("{http://www.w3.org/XML/1998/namespace}base") # cope with xml:base
if base:
resolvedUrl = urljoin(base, epUrl)
else:
resolvedUrl = epUrl
# perform prefix remappings
remappedUrl = resolvedUrl
for prefix, replace in remappings.items():
remappedUrl = remappedUrl.replace(prefix, replace, 1)
nameToUrls[name] = (remappedUrl, resolvedUrl)
return pkg
示例7: factCheck
def factCheck(val, fact):
concept = fact.concept
context = fact.context
if concept is None or context is None:
return # not checkable
try:
if fact.isNumeric and not fact.isNil and fact.xValue is not None:
# 2.4.1 decimal disagreement
if fact.decimals and fact.decimals != "INF":
vf = float(fact.value)
if _ISFINITE(vf):
dec = _INT(fact.decimals)
vround = round(vf, dec)
if vf != vround:
val.modelXbrl.log('WARNING-SEMANTIC', "US-BPG.2.4.1",
_("Decimal disagreement %(fact)s in context %(contextID)s unit %(unitID)s value %(value)s has insignificant value %(insignificantValue)s"),
modelObject=fact, fact=fact.qname, contextID=fact.contextID, unitID=fact.unitID,
value=fact.effectiveValue, insignificantValue=Locale.format(val.modelXbrl.locale, "%.*f",
(dec + 2 if dec > 0 else 0, vf - vround),
True))
# 2.5.1 fractions disallowed on a disclosure
if fact.isFraction:
if any(val.linroleDefinitionIsDisclosure.match(roleType.definition)
for rel in val.modelXbrl.relationshipSet(XbrlConst.parentChild).toModelObject(concept)
for roleType in val.modelXbrl.roleTypes.get(rel.linkrole,())):
val.modelXbrl.log('WARNING-SEMANTIC', "US-BPG.2.5.1",
_("Disclosure %(fact)s in context %(contextID)s value %(value)s is a fraction"),
modelObject=fact, fact=fact.qname, contextID=fact.contextID, value=fact.value)
# deprecated concept
if concept.qname.namespaceURI == ugtNamespace:
if concept.name in val.usgaapDeprecations:
val.deprecatedFactConcepts[concept].append(fact)
elif concept.get("{http://fasb.org/us-gaap/attributes}deprecatedDate"):
val.deprecatedFactConcepts[concept].append(fact)
if fact.isItem and fact.context is not None:
for dimConcept, modelDim in fact.context.segDimValues.items():
if dimConcept.qname.namespaceURI == ugtNamespace:
if dimConcept.name in val.usgaapDeprecations:
val.deprecatedDimensions[dimConcept].append(fact)
elif dimConcept.get("{http://fasb.org/us-gaap/attributes}deprecatedDate"):
val.deprecatedDimensions[dimConcept].append(fact)
if modelDim.isExplicit:
member = modelDim.member
if member is not None:
if member.qname.namespaceURI == ugtNamespace:
if member.name in val.usgaapDeprecations:
val.deprecatedMembers[member].append(fact)
elif member.get("{http://fasb.org/us-gaap/attributes}deprecatedDate"):
val.deprecatedMembers[member].append(fact)
except Exception as err:
val.modelXbrl.log('WARNING-SEMANTIC', "US-BPG.testingException",
_("%(fact)s in context %(contextID)s unit %(unitID)s value %(value)s cannot be tested due to: %(err)s"),
modelObject=fact, fact=fact.qname, contextID=fact.contextID, unitID=fact.unitID,
value=fact.effectiveValue, err=err)
示例8: label
def label(self,preferredLabel=None,fallbackToQname=True,lang=None,strip=False,linkrole=None):
if preferredLabel is None: preferredLabel = XbrlConst.standardLabel
if preferredLabel == XbrlConst.conceptNameLabelRole: return str(self.qname)
labelsRelationshipSet = self.modelXbrl.relationshipSet(XbrlConst.conceptLabel,linkrole)
if labelsRelationshipSet:
label = labelsRelationshipSet.label(self, preferredLabel, lang)
if label is not None:
if strip: return label.strip()
return Locale.rtlString(label, lang=lang)
return str(self.qname) if fallbackToQname else None
示例9: parseTxmyPkg
def parseTxmyPkg(mainWin, metadataFile):
unNamedCounter = 1
currentLang = Locale.getLanguageCode()
tree = etree.parse(metadataFile)
remappings = dict(
(m.get("prefix"), m.get("replaceWith"))
for m in tree.iter(tag="{http://www.corefiling.com/xbrl/taxonomypackage/v1}remapping")
)
result = {}
for entryPointSpec in tree.iter(tag="{http://www.corefiling.com/xbrl/taxonomypackage/v1}entryPoint"):
name = None
# find closest match name node given xml:lang match to current language or no xml:lang
for nameNode in entryPointSpec.iter(tag="{http://www.corefiling.com/xbrl/taxonomypackage/v1}name"):
xmlLang = nameNode.get("{http://www.w3.org/XML/1998/namespace}lang")
if name is None or not xmlLang or currentLang == xmlLang:
name = nameNode.text
if currentLang == xmlLang: # most prefer one with the current locale's language
break
if not name:
name = _("<unnamed {0}>").format(unNamedCounter)
unNamedCounter += 1
epDocCount = 0
for epDoc in entryPointSpec.iterchildren(
"{http://www.corefiling.com/xbrl/taxonomypackage/v1}entryPointDocument"
):
if epDocCount:
mainWin.addToLog(_("WARNING: skipping multiple-document entry point (not supported)"))
continue
epDocCount += 1
epUrl = epDoc.get("href")
base = epDoc.get("{http://www.w3.org/XML/1998/namespace}base") # cope with xml:base
if base:
resolvedUrl = urljoin(base, epUrl)
else:
resolvedUrl = epUrl
# perform prefix remappings
remappedUrl = resolvedUrl
for prefix, replace in remappings.items():
remappedUrl = resolvedUrl.replace(prefix, replace, 1)
result[name] = (remappedUrl, resolvedUrl)
return result
示例10: genLabel
def genLabel(self,role=None,fallbackToQname=False,fallbackToXlinkLabel=False,lang=None,strip=False,linkrole=None, linkroleHint=None):
from arelle import XbrlConst
if role is None: role = XbrlConst.genStandardLabel
if role == XbrlConst.conceptNameLabelRole: return str(self.qname)
labelsRelationshipSet = self.modelXbrl.relationshipSet(XbrlConst.elementLabel,linkrole)
if labelsRelationshipSet:
label = labelsRelationshipSet.label(self, linkroleHint or role, lang)
if label is not None:
if strip: return label.strip()
return Locale.rtlString(label, lang=lang)
if fallbackToQname:
return str(self.qname)
elif fallbackToXlinkLabel and hasattr(self,"xlinkLabel"):
return self.xlinkLabel
else:
return None
示例11: effectiveValue
def effectiveValue(self):
concept = self.concept
if concept is None or concept.isTuple:
return None
if self.isNil:
return "(nil)"
if concept.isNumeric:
val = self.value
try:
num = float(val)
dec = self.decimals
if dec is None or dec == "INF":
dec = len(val.partition(".")[2])
else:
dec = int(dec) # 2.7 wants short int, 3.2 takes regular int, don't use _INT here
return Locale.format(self.modelXbrl.locale, "%.*f", (dec, num), True)
except ValueError:
return "(error)"
return self.value
示例12: effectiveValue
def effectiveValue(self):
"""(str) -- Effective value for views, (nil) if isNil, None if no value,
locale-formatted string of decimal value (if decimals specified) , otherwise string value"""
concept = self.concept
if concept is None or concept.isTuple:
return None
if self.isNil:
return "(nil)"
try:
if concept.isNumeric:
val = self.value
try:
num = float(val)
dec = self.decimals
if dec is None or dec == "INF":
dec = len(val.partition(".")[2])
else:
dec = int(dec) # 2.7 wants short int, 3.2 takes regular int, don't use _INT here
return Locale.format(self.modelXbrl.locale, "%.*f", (dec, num), True)
except ValueError:
return "(error)"
return self.value
except Exception as ex:
return str(ex) # could be transform value of inline fact
示例13: parsePackage
def parsePackage(cntlr, filesource, metadataFile, fileBase):
global ArchiveFileIOError
if ArchiveFileIOError is None:
from arelle.FileSource import ArchiveFileIOError
unNamedCounter = 1
txmyPkgNSes = ("http://www.corefiling.com/xbrl/taxonomypackage/v1",
"http://xbrl.org/PWD/2014-01-15/taxonomy-package",
"http://xbrl.org/PWD/2015-01-14/taxonomy-package")
catalogNSes = ("urn:oasis:names:tc:entity:xmlns:xml:catalog",)
pkg = {}
currentLang = Locale.getLanguageCode()
_file = filesource.file(metadataFile)[0] # URL in zip, plain file in file system or web
tree = etree.parse(_file)
root = tree.getroot()
ns = root.tag.partition("}")[0][1:]
nsPrefix = "{{{}}}".format(ns)
if ns in txmyPkgNSes: # package file
for eltName in ("name", "description", "version"):
pkg[eltName] = ''
for m in root.iterchildren(tag=nsPrefix + eltName):
pkg[eltName] = m.text.strip()
break # take first entry if several
else: # oasis catalog, use dirname as the package name
# metadataFile may be a File object (with name) or string filename
fileName = getattr(metadataFile, 'fileName', # for FileSource named objects
getattr(metadataFile, 'name', # for io.file named objects
metadataFile)) # for string
pkg["name"] = os.path.basename(os.path.dirname(fileName))
pkg["description"] = "oasis catalog"
pkg["version"] = "(none)"
remappings = {}
rewriteTree = tree
catalogFile = metadataFile
if ns in ("http://xbrl.org/PWD/2015-01-14/taxonomy-package",):
catalogFile = metadataFile.replace('taxonomyPackage.xml','catalog.xml')
try:
rewriteTree = etree.parse(filesource.file(catalogFile)[0])
except ArchiveFileIOError:
pass
for tag, prefixAttr, replaceAttr in (
(nsPrefix + "remapping", "prefix", "replaceWith"), # taxonomy package
("{urn:oasis:names:tc:entity:xmlns:xml:catalog}rewriteSystem", "systemIdStartString", "rewritePrefix"),
("{urn:oasis:names:tc:entity:xmlns:xml:catalog}rewriteURI", "uriStartString", "rewritePrefix")): # oasis catalog
for m in rewriteTree.iter(tag=tag):
prefixValue = m.get(prefixAttr)
replaceValue = m.get(replaceAttr)
if prefixValue and replaceValue is not None:
if prefixValue not in remappings:
base = baseForElement(m)
if base:
replaceValue = os.path.join(base, replaceValue)
if replaceValue: # neither None nor ''
if not isAbsolute(replaceValue):
if not os.path.isabs(replaceValue):
replaceValue = fileBase + replaceValue
replaceValue = replaceValue.replace("/", os.sep)
_normedValue = os.path.normpath(replaceValue)
if replaceValue.endswith(os.sep) and not _normedValue.endswith(os.sep):
_normedValue += os.sep
remappings[prefixValue] = _normedValue
else:
cntlr.addToLog(_("Package catalog duplicate rewrite start string %(rewriteStartString)s"),
messageArgs={"rewriteStartString": prefixValue},
messageCode="arelle.catalogDuplicateRewrite",
file=os.path.basename(catalogFile),
level=logging.ERROR)
pkg["remappings"] = remappings
nameToUrls = {}
pkg["nameToUrls"] = nameToUrls
for entryPointSpec in tree.iter(tag=nsPrefix + "entryPoint"):
name = None
# find closest match name node given xml:lang match to current language or no xml:lang
for nameNode in entryPointSpec.iter(tag=nsPrefix + "name"):
xmlLang = nameNode.get('{http://www.w3.org/XML/1998/namespace}lang')
if name is None or not xmlLang or currentLang == xmlLang:
name = nameNode.text
if currentLang == xmlLang: # most prefer one with the current locale's language
break
if not name:
name = _("<unnamed {0}>").format(unNamedCounter)
unNamedCounter += 1
epDocCount = 0
for epDoc in entryPointSpec.iterchildren(nsPrefix + "entryPointDocument"):
epUrl = epDoc.get('href')
base = epDoc.get('{http://www.w3.org/XML/1998/namespace}base') # cope with xml:base
if base:
resolvedUrl = urljoin(base, epUrl)
#.........这里部分代码省略.........
示例14: factCheck
def factCheck(val, fact):
concept = fact.concept
context = fact.context
if concept is None or context is None or not val.validateLoggingSemantic:
return # not checkable
try:
if fact.isNumeric:
# 2.3.3 additional unit tests beyond UTR spec
unit = fact.unit
if unit is not None and concept.type is not None and val.validateUTR:
typeName = concept.type.name
if typeName == "perUnitItemType" and any(m.namespaceURI == XbrlConst.iso4217 or
m in (XbrlConst.qnXbrliPure, XbrlConst.qnXbrliShares)
for m in unit.measures[1]):
val.modelXbrl.log('WARNING-SEMANTIC', "US-BPG.2.3.3.perUnitItemType",
_("PureItemType fact %(fact)s in context %(contextID)s unit %(unitID)s value %(value)s has disallowed unit denominator %(denominator)s"),
modelObject=fact, fact=fact.qname, contextID=fact.contextID, unitID=fact.unitID,
value=fact.effectiveValue, denominator=", ".join((str(m) for m in unit.measures[1])))
if not fact.isNil and getattr(fact, "xValue", None) is not None:
# 2.4.1 decimal disagreement
if fact.decimals and fact.decimals != "INF":
vf = float(fact.value)
if _ISFINITE(vf):
dec = _INT(fact.decimals)
vround = round(vf, dec)
if vf != vround:
val.modelXbrl.log('WARNING-SEMANTIC', "US-BPG.2.4.1",
_("Decimal disagreement %(fact)s in context %(contextID)s unit %(unitID)s value %(value)s has insignificant value %(insignificantValue)s"),
modelObject=fact, fact=fact.qname, contextID=fact.contextID, unitID=fact.unitID,
value=fact.effectiveValue, insignificantValue=Locale.format(val.modelXbrl.locale, "%.*f",
(dec + 2 if dec > 0 else 0, vf - vround),
True))
# 2.5.1 fractions disallowed on a disclosure
if fact.isFraction:
if any(val.linroleDefinitionIsDisclosure.match(roleType.definition)
for rel in val.modelXbrl.relationshipSet(XbrlConst.parentChild).toModelObject(concept)
for roleType in val.modelXbrl.roleTypes.get(rel.linkrole,())):
val.modelXbrl.log('WARNING-SEMANTIC', "US-BPG.2.5.1",
_("Disclosure %(fact)s in context %(contextID)s value %(value)s is a fraction"),
modelObject=fact, fact=fact.qname, contextID=fact.contextID, value=fact.value)
# deprecated concept
if concept.qname.namespaceURI == val.ugtNamespace:
if concept.name in val.usgaapDeprecations:
val.deprecatedFactConcepts[concept].append(fact)
elif concept.get("{http://fasb.org/us-gaap/attributes}deprecatedDate"):
val.deprecatedFactConcepts[concept].append(fact)
if fact.isItem and fact.context is not None:
for dimConcept, modelDim in fact.context.segDimValues.items():
if dimConcept.qname.namespaceURI == val.ugtNamespace:
if dimConcept.name in val.usgaapDeprecations:
val.deprecatedDimensions[dimConcept].append(fact)
elif dimConcept.get("{http://fasb.org/us-gaap/attributes}deprecatedDate"):
val.deprecatedDimensions[dimConcept].append(fact)
if modelDim.isExplicit:
member = modelDim.member
if member is not None:
if member.qname.namespaceURI == val.ugtNamespace:
if member.name in val.usgaapDeprecations:
val.deprecatedMembers[member].append(fact)
elif member.get("{http://fasb.org/us-gaap/attributes}deprecatedDate"):
val.deprecatedMembers[member].append(fact)
except Exception as err:
val.modelXbrl.log('WARNING-SEMANTIC', "US-BPG.testingException",
_("%(fact)s in context %(contextID)s unit %(unitID)s value %(value)s cannot be tested due to: %(err)s"),
modelObject=fact, fact=fact.qname, contextID=fact.contextID, unitID=fact.unitID,
value=fact.effectiveValue, err=err)
示例15: validate
#.........这里部分代码省略.........
for modelRel in modelRels:
itemConcept = modelRel.toModelObject
if itemConcept is not None and itemConcept.qname is not None:
itemBindingKeys = self.itemConceptBindKeys[itemConcept]
boundSumKeys |= sumBindingKeys & itemBindingKeys
# add up rounded items
boundSums = defaultdict(decimal.Decimal) # sum of facts meeting factKey
boundSummationItems = defaultdict(list) # corresponding fact refs for messages
for modelRel in modelRels:
weight = modelRel.weightDecimal
itemConcept = modelRel.toModelObject
if itemConcept is not None:
for itemBindKey in boundSumKeys:
ancestor, contextHash, unit = itemBindKey
factKey = (itemConcept, ancestor, contextHash, unit)
if factKey in self.itemFacts:
for fact in self.itemFacts[factKey]:
if fact in self.duplicatedFacts:
dupBindingKeys.add(itemBindKey)
else:
roundedValue = roundFact(fact, self.inferDecimals)
boundSums[itemBindKey] += roundedValue * weight
boundSummationItems[itemBindKey].append(wrappedFactWithWeight(fact,weight,roundedValue))
for sumBindKey in boundSumKeys:
ancestor, contextHash, unit = sumBindKey
factKey = (sumConcept, ancestor, contextHash, unit)
if factKey in self.sumFacts:
sumFacts = self.sumFacts[factKey]
for fact in sumFacts:
if fact in self.duplicatedFacts:
dupBindingKeys.add(sumBindKey)
elif sumBindKey not in dupBindingKeys:
roundedSum = roundFact(fact, self.inferDecimals)
roundedItemsSum = roundFact(fact, self.inferDecimals, vDecimal=boundSums[sumBindKey])
if roundedItemsSum != roundFact(fact, self.inferDecimals):
d = inferredDecimals(fact)
if isnan(d) or isinf(d): d = 4
_boundSummationItems = boundSummationItems[sumBindKey]
unreportedContribingItemQnames = [] # list the missing/unreported contributors in relationship order
for modelRel in modelRels:
itemConcept = modelRel.toModelObject
if (itemConcept is not None and
(itemConcept, ancestor, contextHash, unit) not in self.itemFacts):
unreportedContribingItemQnames.append(str(itemConcept.qname))
self.modelXbrl.log('INCONSISTENCY', "xbrl.5.2.5.2:calcInconsistency",
_("Calculation inconsistent from %(concept)s in link role %(linkrole)s reported sum %(reportedSum)s computed sum %(computedSum)s context %(contextID)s unit %(unitID)s unreportedContributingItems %(unreportedContributors)s"),
modelObject=wrappedSummationAndItems(fact, roundedSum, _boundSummationItems),
concept=sumConcept.qname, linkrole=ELR,
linkroleDefinition=self.modelXbrl.roleTypeDefinition(ELR),
reportedSum=Locale.format_decimal(self.modelXbrl.locale, roundedSum, 1, max(d,0)),
computedSum=Locale.format_decimal(self.modelXbrl.locale, roundedItemsSum, 1, max(d,0)),
contextID=fact.context.id, unitID=fact.unit.id,
unreportedContributors=", ".join(unreportedContribingItemQnames) or "none")
del unreportedContribingItemQnames[:]
boundSummationItems.clear() # dereference facts in list
elif arcrole == XbrlConst.essenceAlias:
for modelRel in relsSet.modelRelationships:
essenceConcept = modelRel.fromModelObject
aliasConcept = modelRel.toModelObject
essenceBindingKeys = self.esAlConceptBindKeys[essenceConcept]
aliasBindingKeys = self.esAlConceptBindKeys[aliasConcept]
for esAlBindKey in essenceBindingKeys & aliasBindingKeys:
ancestor, contextHash = esAlBindKey
essenceFactsKey = (essenceConcept, ancestor, contextHash)
aliasFactsKey = (aliasConcept, ancestor, contextHash)
if essenceFactsKey in self.esAlFacts and aliasFactsKey in self.esAlFacts:
for eF in self.esAlFacts[essenceFactsKey]:
for aF in self.esAlFacts[aliasFactsKey]:
essenceUnit = self.mapUnit.get(eF.unit,eF.unit)
aliasUnit = self.mapUnit.get(aF.unit,aF.unit)
if essenceUnit != aliasUnit:
self.modelXbrl.log('INCONSISTENCY', "xbrl.5.2.6.2.2:essenceAliasUnitsInconsistency",
_("Essence-Alias inconsistent units from %(essenceConcept)s to %(aliasConcept)s in link role %(linkrole)s context %(contextID)s"),
modelObject=(modelRel, eF, aF),
essenceConcept=essenceConcept.qname, aliasConcept=aliasConcept.qname,
linkrole=ELR,
linkroleDefinition=self.modelXbrl.roleTypeDefinition(ELR),
contextID=eF.context.id)
if not XbrlUtil.vEqual(eF, aF):
self.modelXbrl.log('INCONSISTENCY', "xbrl.5.2.6.2.2:essenceAliasUnitsInconsistency",
_("Essence-Alias inconsistent value from %(essenceConcept)s to %(aliasConcept)s in link role %(linkrole)s context %(contextID)s"),
modelObject=(modelRel, eF, aF),
essenceConcept=essenceConcept.qname, aliasConcept=aliasConcept.qname,
linkrole=ELR,
linkroleDefinition=self.modelXbrl.roleTypeDefinition(ELR),
contextID=eF.context.id)
elif arcrole == XbrlConst.requiresElement:
for modelRel in relsSet.modelRelationships:
sourceConcept = modelRel.fromModelObject
requiredConcept = modelRel.toModelObject
if sourceConcept in self.requiresElementFacts and \
not requiredConcept in self.requiresElementFacts:
self.modelXbrl.log('INCONSISTENCY', "xbrl.5.2.6.2.4:requiresElementInconsistency",
_("Requires-Element %(requiringConcept)s missing required fact for %(requiredConcept)s in link role %(linkrole)s"),
modelObject=sourceConcept,
requiringConcept=sourceConcept.qname, requiredConcept=requiredConcept.qname,
linkrole=ELR,
linkroleDefinition=self.modelXbrl.roleTypeDefinition(ELR))
self.modelXbrl.profileActivity("... find inconsistencies", minTimeToShow=1.0)
self.modelXbrl.profileActivity() # reset