arelle-release 2.17.1__py3-none-any.whl → 2.37.71__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arelle/Aspect.py +6 -3
- arelle/BetaFeatures.py +3 -0
- arelle/Cntlr.py +117 -413
- arelle/CntlrCmdLine.py +364 -227
- arelle/CntlrQuickBooks.py +4 -2
- arelle/CntlrWebMain.py +179 -119
- arelle/CntlrWinMain.py +342 -124
- arelle/DialogAbout.py +1 -1
- arelle/DialogArcroleGroup.py +1 -1
- arelle/DialogFind.py +1 -1
- arelle/DialogFormulaParameters.py +2 -2
- arelle/DialogLanguage.py +45 -36
- arelle/DialogNewFactItem.py +1 -1
- arelle/DialogOpenArchive.py +30 -34
- arelle/DialogPackageManager.py +11 -8
- arelle/DialogPluginManager.py +43 -89
- arelle/DialogRssWatch.py +2 -2
- arelle/DialogURL.py +1 -1
- arelle/DialogUserPassword.py +1 -1
- arelle/DisclosureSystem.py +69 -1
- arelle/ErrorManager.py +321 -0
- arelle/FileSource.py +201 -99
- arelle/FunctionFn.py +44 -5
- arelle/FunctionIxt.py +16 -13
- arelle/FunctionUtil.py +1 -1
- arelle/FunctionXfi.py +68 -24
- arelle/FunctionXs.py +1 -1
- arelle/HtmlUtil.py +5 -4
- arelle/LeiUtil.py +63 -43
- arelle/LinkbaseType.py +94 -0
- arelle/LocalViewer.py +8 -2
- arelle/Locale.py +239 -79
- arelle/ModelDocument.py +180 -48
- arelle/ModelDtsObject.py +32 -27
- arelle/ModelFormulaObject.py +14 -6
- arelle/ModelInstanceObject.py +43 -14
- arelle/ModelManager.py +6 -1
- arelle/ModelObject.py +12 -8
- arelle/ModelObjectFactory.py +18 -2
- arelle/ModelRelationshipSet.py +46 -3
- arelle/ModelRenderingObject.py +899 -951
- arelle/ModelRssItem.py +2 -4
- arelle/ModelTestcaseObject.py +41 -4
- arelle/ModelValue.py +42 -14
- arelle/ModelVersReport.py +1 -1
- arelle/ModelXbrl.py +133 -273
- arelle/PackageManager.py +202 -176
- arelle/PluginManager.py +551 -239
- arelle/PluginUtils.py +54 -0
- arelle/PrototypeInstanceObject.py +53 -12
- arelle/PythonUtil.py +166 -25
- arelle/RuntimeOptions.py +32 -18
- arelle/SocketUtils.py +3 -0
- arelle/SystemInfo.py +1 -1
- arelle/TkTableWrapper.py +33 -5
- arelle/UITkTable.py +27 -21
- arelle/Updater.py +7 -3
- arelle/UrlUtil.py +6 -2
- arelle/Validate.py +596 -402
- arelle/ValidateDuplicateFacts.py +584 -0
- arelle/ValidateFileSource.py +38 -0
- arelle/ValidateFilingText.py +46 -29
- arelle/ValidateInfoset.py +104 -32
- arelle/ValidateUtr.py +31 -4
- arelle/ValidateXbrl.py +144 -120
- arelle/ValidateXbrlCalcs.py +51 -66
- arelle/ValidateXbrlDTS.py +98 -29
- arelle/Version.py +2 -7
- arelle/ViewFile.py +2 -0
- arelle/ViewFileDTS.py +7 -2
- arelle/ViewFileFactList.py +1 -1
- arelle/ViewFileFactTable.py +4 -4
- arelle/ViewFileRelationshipSet.py +36 -19
- arelle/ViewFileRenderedGrid.py +164 -753
- arelle/ViewFileRenderedLayout.py +174 -0
- arelle/ViewFileRenderedStructure.py +108 -0
- arelle/ViewWinDTS.py +4 -1
- arelle/ViewWinFactList.py +1 -1
- arelle/ViewWinFactTable.py +1 -1
- arelle/ViewWinRelationshipSet.py +14 -8
- arelle/ViewWinRenderedGrid.py +397 -287
- arelle/ViewWinRssFeed.py +4 -0
- arelle/ViewWinTree.py +15 -9
- arelle/ViewWinXml.py +1 -1
- arelle/WebCache.py +510 -272
- arelle/XbrlConst.py +202 -196
- arelle/XbrlUtil.py +2 -1
- arelle/XhtmlValidate.py +9 -23
- arelle/XmlUtil.py +24 -19
- arelle/XmlValidate.py +95 -67
- arelle/XmlValidateParticles.py +4 -4
- arelle/_version.py +33 -3
- arelle/api/Session.py +183 -0
- arelle/config/creationSoftwareNames.json +24 -10
- arelle/config/disclosuresystems.xml +1 -1
- arelle/config/disclosuresystems.xsd +3 -0
- arelle/config/sbr-text-formatting.xsd +737 -0
- arelle/conformance/CSVTestcaseLoader.py +102 -0
- arelle/formula/FactAspectsCache.py +10 -4
- arelle/formula/ValidateFormula.py +82 -194
- arelle/formula/XPathContext.py +42 -28
- arelle/formula/XPathParser.py +15 -9
- arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po +3 -4
- arelle/locale/messages.pot +1 -2
- arelle/locale/ru/LC_MESSAGES/ru.po +2 -2
- arelle/logging/formatters/LogFormatter.py +47 -0
- arelle/logging/handlers/LogHandlerWithXml.py +94 -0
- arelle/logging/handlers/LogToBufferHandler.py +20 -0
- arelle/logging/handlers/LogToPrintHandler.py +41 -0
- arelle/logging/handlers/LogToXmlHandler.py +244 -0
- arelle/logging/handlers/StructuredMessageLogHandler.py +74 -0
- arelle/model/CommentBase.py +3 -0
- arelle/model/ElementBase.py +3 -0
- arelle/model/PIBase.py +3 -0
- arelle/model/__init__.py +3 -0
- arelle/oim/Load.py +2869 -0
- arelle/oim/Validate.py +155 -0
- arelle/oim/xml/Save.py +21 -0
- arelle/packages/PackageConst.py +7 -0
- arelle/packages/PackageType.py +13 -0
- arelle/packages/PackageUtils.py +22 -0
- arelle/packages/PackageValidation.py +200 -0
- arelle/packages/report/DetectReportPackage.py +13 -0
- arelle/packages/report/ReportPackage.py +265 -0
- arelle/packages/report/ReportPackageConst.py +79 -0
- arelle/packages/report/ReportPackageValidator.py +207 -0
- arelle/plugin/EdgarRendererAllReports.py +12 -12
- arelle/plugin/OimTaxonomy/ModelValueMore.py +15 -0
- arelle/plugin/OimTaxonomy/ValidateDTS.py +484 -0
- arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +239 -0
- arelle/plugin/OimTaxonomy/XbrlAbstract.py +16 -0
- arelle/plugin/OimTaxonomy/XbrlConcept.py +68 -0
- arelle/plugin/OimTaxonomy/XbrlConst.py +261 -0
- arelle/plugin/OimTaxonomy/XbrlCube.py +91 -0
- arelle/plugin/OimTaxonomy/XbrlDimension.py +38 -0
- arelle/plugin/OimTaxonomy/XbrlDts.py +152 -0
- arelle/plugin/OimTaxonomy/XbrlEntity.py +16 -0
- arelle/plugin/OimTaxonomy/XbrlGroup.py +22 -0
- arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +22 -0
- arelle/plugin/OimTaxonomy/XbrlLabel.py +31 -0
- arelle/plugin/OimTaxonomy/XbrlNetwork.py +100 -0
- arelle/plugin/OimTaxonomy/XbrlProperty.py +28 -0
- arelle/plugin/OimTaxonomy/XbrlReference.py +33 -0
- arelle/plugin/OimTaxonomy/XbrlReport.py +24 -0
- arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +35 -0
- arelle/plugin/OimTaxonomy/XbrlTaxonomy.py +93 -0
- arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py +154 -0
- arelle/plugin/OimTaxonomy/XbrlTransform.py +17 -0
- arelle/plugin/OimTaxonomy/XbrlTypes.py +23 -0
- arelle/plugin/OimTaxonomy/XbrlUnit.py +17 -0
- arelle/plugin/OimTaxonomy/__init__.py +1037 -0
- arelle/plugin/OimTaxonomy/resources/iso4217.json +4479 -0
- arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json +935 -0
- arelle/plugin/OimTaxonomy/resources/ref.json +333 -0
- arelle/plugin/OimTaxonomy/resources/transform-types.json +2481 -0
- arelle/plugin/OimTaxonomy/resources/types.json +727 -0
- arelle/plugin/OimTaxonomy/resources/utr.json +3046 -0
- arelle/plugin/OimTaxonomy/resources/xbrlSpec.json +1082 -0
- arelle/plugin/formulaLoader.py +3 -3
- arelle/plugin/formulaSaver.py +4 -4
- arelle/plugin/inlineXbrlDocumentSet.py +331 -102
- arelle/plugin/internet/proxyNTLM/HTTPNtlmAuthHandler.py +1 -1
- arelle/plugin/loadFromExcel.py +13 -10
- arelle/plugin/loadFromOIM.py +16 -3096
- arelle/plugin/logging/saveMessages.py +1 -1
- arelle/plugin/saveHtmlEBAtables.py +293 -213
- arelle/plugin/saveLoadableOIM.py +652 -361
- arelle/plugin/saveOIMTaxonomy.py +311 -0
- arelle/plugin/streamingExtensions.py +1 -1
- arelle/plugin/systemInfo.py +46 -0
- arelle/plugin/transforms/tester.py +4 -4
- arelle/plugin/validate/CIPC/Const.py +18 -0
- arelle/plugin/validate/CIPC/__init__.py +34 -13
- arelle/plugin/validate/DBA/DisclosureSystems.py +12 -0
- arelle/plugin/validate/DBA/PluginValidationDataExtension.py +165 -0
- arelle/plugin/validate/DBA/ValidationPluginExtension.py +545 -0
- arelle/plugin/validate/DBA/__init__.py +49 -0
- arelle/plugin/validate/DBA/resources/config.xml +21 -0
- arelle/plugin/validate/DBA/rules/__init__.py +323 -0
- arelle/plugin/validate/DBA/rules/fr.py +1377 -0
- arelle/plugin/validate/DBA/rules/tc.py +45 -0
- arelle/plugin/validate/DBA/rules/th.py +172 -0
- arelle/plugin/validate/DBA/rules/tm.py +351 -0
- arelle/plugin/validate/DBA/rules/tr.py +373 -0
- arelle/plugin/validate/EBA/__init__.py +11 -12
- arelle/plugin/validate/EDINET/Constants.py +208 -0
- arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
- arelle/plugin/validate/EDINET/ControllerPluginData.py +298 -0
- arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
- arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
- arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
- arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
- arelle/plugin/validate/EDINET/FormType.py +134 -0
- arelle/plugin/validate/EDINET/ManifestInstance.py +236 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +640 -0
- arelle/plugin/validate/EDINET/ReportFolderType.py +162 -0
- arelle/plugin/validate/EDINET/Statement.py +139 -0
- arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +493 -0
- arelle/plugin/validate/EDINET/UploadContents.py +48 -0
- arelle/plugin/validate/EDINET/ValidationPluginExtension.py +64 -0
- arelle/plugin/validate/EDINET/__init__.py +109 -0
- arelle/plugin/validate/EDINET/resources/config.xml +22 -0
- arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
- arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
- arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +62 -0
- arelle/plugin/validate/EDINET/rules/contexts.py +547 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +1991 -0
- arelle/plugin/validate/EDINET/rules/frta.py +301 -0
- arelle/plugin/validate/EDINET/rules/gfm.py +2394 -0
- arelle/plugin/validate/EDINET/rules/manifests.py +88 -0
- arelle/plugin/validate/EDINET/rules/upload.py +1370 -0
- arelle/plugin/validate/ESEF/Const.py +16 -75
- arelle/plugin/validate/ESEF/Dimensions.py +2 -2
- arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +6 -1
- arelle/plugin/validate/ESEF/ESEF_2021/Image.py +7 -4
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +80 -57
- arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +60 -22
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +272 -133
- arelle/plugin/validate/ESEF/Util.py +5 -19
- arelle/plugin/validate/ESEF/__init__.py +61 -46
- arelle/plugin/validate/ESEF/resources/authority-validations.json +120 -10
- arelle/plugin/validate/ESEF/resources/config.xml +44 -3
- arelle/plugin/validate/FERC/__init__.py +31 -18
- arelle/plugin/validate/FERC/config.xml +18 -18
- arelle/plugin/validate/NL/DisclosureSystems.py +19 -3
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +710 -7
- arelle/plugin/validate/NL/ValidationPluginExtension.py +117 -12
- arelle/plugin/validate/NL/__init__.py +21 -10
- arelle/plugin/validate/NL/resources/config.xml +27 -6
- arelle/plugin/validate/NL/rules/br_kvk.py +81 -21
- arelle/plugin/validate/NL/rules/fg_nl.py +292 -0
- arelle/plugin/validate/NL/rules/fr_kvk.py +60 -7
- arelle/plugin/validate/NL/rules/fr_nl.py +705 -24
- arelle/plugin/validate/NL/rules/nl_kvk.py +2182 -0
- arelle/plugin/validate/ROS/DisclosureSystems.py +1 -0
- arelle/plugin/validate/ROS/PluginValidationDataExtension.py +109 -0
- arelle/plugin/validate/ROS/ValidationPluginExtension.py +27 -0
- arelle/plugin/validate/ROS/__init__.py +28 -341
- arelle/plugin/validate/ROS/resources/config.xml +20 -0
- arelle/plugin/validate/ROS/rules/__init__.py +56 -0
- arelle/plugin/validate/ROS/rules/ros.py +393 -0
- arelle/plugin/validate/UK/ValidateUK.py +1372 -0
- arelle/plugin/validate/{HMRC → UK}/__init__.py +195 -189
- arelle/plugin/validate/{HMRC → UK}/config.xml +1 -1
- arelle/plugin/xbrlDB/SqlDb.py +1 -1
- arelle/plugin/xbrlDB/XbrlOpenSqlDB.py +5 -5
- arelle/plugin/xbrlDB/XbrlPublicPostgresDB.py +1 -1
- arelle/plugin/xbrlDB/XbrlSemanticJsonDB.py +1 -1
- arelle/plugin/xbrlDB/XbrlSemanticRdfDB.py +1 -1
- arelle/plugin/xbrlDB/__init__.py +4 -1
- arelle/{RenderingEvaluator.py → rendering/RenderingEvaluator.py} +120 -99
- arelle/rendering/RenderingLayout.py +476 -0
- arelle/rendering/RenderingResolution.py +814 -0
- arelle/resources/cache/http/www.eurofiling.info/eu/fr/xbrl/ext/filing-indicators.xsd +20 -0
- arelle/resources/cache/http/www.w3.org/2001/03/xml.xsd +117 -0
- arelle/resources/cache/http/www.w3.org/2001/XMLSchema.xsd +2534 -0
- arelle/resources/cache/http/www.w3.org/2001/xml.xsd +287 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd +779 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd +486 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xl-2003-12-31.xsd +251 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xlink-2003-12-31.xsd +121 -0
- arelle/resources/cache/http/www.xbrl.org/2004/ref-2004-08-10.xsd +129 -0
- arelle/resources/cache/http/www.xbrl.org/2005/xbrldt-2005.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2006/ref-2006-02-27.xsd +120 -0
- arelle/resources/cache/http/www.xbrl.org/2006/xbrldi-2006.xsd +41 -0
- arelle/resources/cache/http/www.xbrl.org/2008/boolean-filter.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/concept-filter.xsd +127 -0
- arelle/resources/cache/http/www.xbrl.org/2008/conformance.xsd +116 -0
- arelle/resources/cache/http/www.xbrl.org/2008/conformanceFunction.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/consistency-assertion.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/dimension-filter.xsd +86 -0
- arelle/resources/cache/http/www.xbrl.org/2008/entity-filter.xsd +92 -0
- arelle/resources/cache/http/www.xbrl.org/2008/existence-assertion.xsd +44 -0
- arelle/resources/cache/http/www.xbrl.org/2008/formula.xsd +261 -0
- arelle/resources/cache/http/www.xbrl.org/2008/function.xsd +90 -0
- arelle/resources/cache/http/www.xbrl.org/2008/general-filter.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-label.xsd +80 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-link.xsd +81 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-reference.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xl-2003-12-31.xsd +248 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xlink-2003-12-31.xsd +117 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xframes-1.xsd +166 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-applet-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-attribs-1.xsd +72 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-base-1.xsd +36 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-form-1.xsd +195 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-table-1.xsd +169 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-model-1.xsd +376 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-modules-1.xsd +259 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-bdo-1.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkphras-1.xsd +161 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkpres-1.xsd +37 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkstruct-1.xsd +49 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-charent-1.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-copyright-1.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-csismap-1.xsd +96 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-datatypes-1.xsd +128 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-edit-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-events-1.xsd +130 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-form-1.xsd +326 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-frames-1.xsd +113 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-framework-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-hypertext-1.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-iframe-1.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-image-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlphras-1.xsd +163 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlpres-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstruct-1.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstyle-1.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-legacy-1.xsd +97 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-link-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-list-1.xsd +99 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-meta-1.xsd +42 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-misc-1.xsd +441 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-nameident-1.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-notations-1.xsd +69 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-object-1.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-param-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-pres-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-1.xsd +171 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-basic-1.xsd +89 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-script-1.xsd +70 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ssismap-1.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-struct-1.xsd +112 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-style-1.xsd +52 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-table-1.xsd +272 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-target-1.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-text-1.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-model-1.xsd +677 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-module-redefines-1.xsd +335 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-modules-1.xsd +528 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11.xsd +104 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml2.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-2.xsd +74 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-2.xsd +75 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-1.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-2.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-handlers-2.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-definitions.xsd +225 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-model.xsd +681 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-modules.xsd +535 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0.xsd +40 -0
- arelle/resources/cache/http/www.xbrl.org/2008/match-filter.xsd +94 -0
- arelle/resources/cache/http/www.xbrl.org/2008/period-filter.xsd +86 -0
- arelle/resources/cache/http/www.xbrl.org/2008/registry.xsd +145 -0
- arelle/resources/cache/http/www.xbrl.org/2008/relative-filter.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/segment-scenario-filter.xsd +41 -0
- arelle/resources/cache/http/www.xbrl.org/2008/tuple-filter.xsd +83 -0
- arelle/resources/cache/http/www.xbrl.org/2008/unit-filter.xsd +58 -0
- arelle/resources/cache/http/www.xbrl.org/2008/validation.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2008/value-assertion.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/value-filter.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/variable.xsd +240 -0
- arelle/resources/cache/http/www.xbrl.org/2010/aspect-cover-filter.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2010/concept-relation-filter.xsd +108 -0
- arelle/resources/cache/http/www.xbrl.org/2010/custom-function-implementation.xsd +71 -0
- arelle/resources/cache/http/www.xbrl.org/2010/generic-message.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2010/validation-message.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xl-2003-12-31.xsd +248 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xlink-2003-12-31.xsd +117 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xframes-1.xsd +166 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-applet-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-attribs-1.xsd +72 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-base-1.xsd +36 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-form-1.xsd +195 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-table-1.xsd +169 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-model-1.xsd +376 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-modules-1.xsd +259 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-bdo-1.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkphras-1.xsd +161 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkpres-1.xsd +37 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkstruct-1.xsd +49 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-charent-1.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-copyright-1.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-csismap-1.xsd +96 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-datatypes-1.xsd +128 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-edit-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-events-1.xsd +130 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-form-1.xsd +326 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-frames-1.xsd +113 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-framework-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-hypertext-1.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-iframe-1.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-image-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlphras-1.xsd +163 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlpres-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstruct-1.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstyle-1.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-legacy-1.xsd +97 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-link-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-list-1.xsd +99 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-meta-1.xsd +42 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-misc-1.xsd +441 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-nameident-1.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-notations-1.xsd +69 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-object-1.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-param-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-pres-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-1.xsd +171 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-basic-1.xsd +89 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-script-1.xsd +70 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ssismap-1.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-struct-1.xsd +112 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-style-1.xsd +52 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-table-1.xsd +272 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-target-1.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-text-1.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-model-1.xsd +677 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-module-redefines-1.xsd +335 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-modules-1.xsd +528 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11.xsd +104 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml2.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-2.xsd +74 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-2.xsd +75 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-1.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-2.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-handlers-2.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-definitions.xsd +252 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-model.xsd +681 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-modules.xsd +535 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1.xsd +40 -0
- arelle/resources/cache/http/www.xbrl.org/2013/match-filter.xsd +94 -0
- arelle/resources/cache/http/www.xbrl.org/2013/preferred-label.xsd +12 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-base.xsd +142 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-details.xsd +143 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-use.xsd +64 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-dimensions.xsd +162 -0
- arelle/resources/cache/http/www.xbrl.org/2014/extensible-enumerations.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2014/table.xsd +356 -0
- arelle/resources/cache/http/www.xbrl.org/2014/tablemodel.xsd +156 -0
- arelle/resources/cache/http/www.xbrl.org/2016/assertion-severity.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2016/severities.xml +21 -0
- arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package-catalog.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package.xsd +154 -0
- arelle/resources/cache/http/www.xbrl.org/2022/assertion-severity.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2022/severities.xml +21 -0
- arelle/resources/cache/http/www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/dtr/type/numeric-2009-12-16.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/accounting-arcrole-2023-01-04.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/esma-arcrole-2018-11-21.xsd +14 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd +13 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/jpfr-arcrole-2007-11-07.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/parent-child-2013-09-19.xsd +12 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd +17 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/jpfr-role-2007-11-07.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2008-03-31.xsd +30 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2009-12-16.xsd +33 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negative-2009-12-16.xsd +25 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/net-2009-12-16.xsd +13 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/positive-2009-12-16.xsd +25 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/property-2022-09-28.xsd +15 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/reference-2009-12-16.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/restated-2006-02-21.xsd +19 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-01-30/utr.xml +4543 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-10-31/utr.xml +4510 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-11-30/utr.xml +4567 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2013-02-28/utr.xml +5180 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2013-05-17/utr.xml +5349 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2016-08-10/utr.xml +5363 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2017-07-12/utr.xml +6164 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2021-02-16/utr.xml +6370 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2021-12-08/utr.xml +6493 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2022-02-16/utr.xml +6551 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2022-07-20/utr.xml +6638 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2023-12-20/utr.xml +6680 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2024-01-31/utr.xml +6680 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2024-10-22/utr.xml +6693 -0
- arelle/resources/cache/http/www.xbrl.org/utr/utr.xml +6693 -0
- arelle/resources/cache/https/www.xbrl.org/2005/conformance.xsd +87 -0
- arelle/resources/cache/https/www.xbrl.org/2020/extensible-enumerations-2.0.xsd +51 -0
- arelle/resources/cache/https/www.xbrl.org/2023/calculation-1.1.xsd +27 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2020-01-21/types.xsd +812 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2022-03-31/types.xsd +847 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2024-01-31/types.xsd +897 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-def.xml +68 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-label.xml +84 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators.xsd +67 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/libTktable2.11.so +0 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/pkgIndex.tcl +3 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/libTktable2.11.dylib +0 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/libTktable2.11.dylib +0 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/Tktable.dll +0 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl +825 -0
- arelle/typing.py +9 -4
- arelle/utils/Contexts.py +38 -0
- arelle/utils/EntryPointDetection.py +139 -0
- arelle/utils/Equivalence.py +22 -0
- arelle/utils/{validate/PluginValidationData.py → PluginData.py} +5 -2
- arelle/utils/PluginHooks.py +256 -5
- arelle/utils/Units.py +36 -0
- arelle/utils/validate/Decorator.py +5 -3
- arelle/utils/validate/DetectScriptsInXhtml.py +99 -0
- arelle/utils/validate/ESEFImage.py +283 -0
- arelle/utils/validate/Validation.py +9 -1
- arelle/utils/validate/ValidationPlugin.py +74 -11
- arelle/utils/validate/ValidationUtil.py +55 -0
- arelle/webserver/bottle.py +5 -4424
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/METADATA +51 -42
- arelle_release-2.37.71.dist-info/RECORD +697 -0
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/WHEEL +1 -1
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info/licenses}/LICENSE.md +1 -4
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/top_level.txt +0 -1
- arelle/DialogOpenTaxonomyPackage.py +0 -1
- arelle/RenderingResolver.py +0 -624
- arelle/examples/.pydevproject +0 -5
- arelle/examples/CustomLogger.py +0 -43
- arelle/examples/LoadEFMvalidate.py +0 -32
- arelle/examples/LoadSavePreLbCsv.py +0 -26
- arelle/examples/LoadValidate.cs +0 -31
- arelle/examples/LoadValidate.py +0 -36
- arelle/examples/LoadValidateCmdLine.java +0 -69
- arelle/examples/LoadValidatePostedZip.java +0 -57
- arelle/examples/LoadValidateWebService.java +0 -34
- arelle/examples/SaveTableToExelle.py +0 -140
- arelle/examples/TR3toTR4.py +0 -88
- arelle/examples/plugin/bigInstance.py +0 -394
- arelle/examples/plugin/cmdWebServerExtension.py +0 -42
- arelle/examples/plugin/crashTest.py +0 -38
- arelle/examples/plugin/formulaSuiteConverter.py +0 -212
- arelle/examples/plugin/functionsCustom.py +0 -59
- arelle/examples/plugin/hello_dolly.py +0 -64
- arelle/examples/plugin/hello_i18n.pot +0 -26
- arelle/examples/plugin/hello_i18n.py +0 -32
- arelle/examples/plugin/importTestChild1.py +0 -21
- arelle/examples/plugin/importTestChild2.py +0 -22
- arelle/examples/plugin/importTestGrandchild1.py +0 -21
- arelle/examples/plugin/importTestGrandchild2.py +0 -21
- arelle/examples/plugin/importTestImported1.py +0 -23
- arelle/examples/plugin/importTestImported11.py +0 -22
- arelle/examples/plugin/importTestParent.py +0 -48
- arelle/examples/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
- arelle/examples/plugin/packagedImportTest/__init__.py +0 -47
- arelle/examples/plugin/packagedImportTest/importTestChild1.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestChild2.py +0 -22
- arelle/examples/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestImported1.py +0 -24
- arelle/examples/plugin/packagedImportTest/importTestImported11.py +0 -21
- arelle/examples/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
- arelle/examples/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
- arelle/examples/plugin/sakaCalendar.py +0 -215
- arelle/examples/plugin/saveInstanceInfoset.py +0 -121
- arelle/examples/plugin/streamingExtensions.py +0 -335
- arelle/examples/plugin/testcaseCalc11ValidateSetup.py +0 -32
- arelle/examples/plugin/testcaseIxExpectedHtmlFixup.py +0 -45
- arelle/examples/plugin/updateTableLB.py +0 -242
- arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
- arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
- arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
- arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
- arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
- arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -109
- arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -58
- arelle/examples/plugin/validateSchemaLxml.py +0 -156
- arelle/examples/plugin/validateTableInfoset.py +0 -52
- arelle/examples/us-gaap-dei-docType-extraction-frm.xml +0 -90
- arelle/examples/us-gaap-dei-ratio-cash-frm.xml +0 -150
- arelle/plugin/functionsXmlCreation.py +0 -106
- arelle/plugin/instanceInfo.py +0 -306
- arelle/plugin/loadFromOIM-2018.py +0 -1282
- arelle/plugin/objectmaker.py +0 -285
- arelle/plugin/sphinx/FormulaGenerator.py +0 -823
- arelle/plugin/sphinx/SphinxContext.py +0 -404
- arelle/plugin/sphinx/SphinxEvaluator.py +0 -783
- arelle/plugin/sphinx/SphinxMethods.py +0 -1287
- arelle/plugin/sphinx/SphinxParser.py +0 -1093
- arelle/plugin/sphinx/SphinxValidator.py +0 -163
- arelle/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
- arelle/plugin/sphinx/__init__.py +0 -285
- arelle/plugin/transforms/SEC/__init__.py +0 -308
- arelle/plugin/transforms/SEC/conf/README.md +0 -39
- arelle/plugin/transforms/SEC/conf/extractTestcase.sh +0 -2
- arelle/plugin/transforms/SEC/conf/extractTestcase.xsl +0 -109
- arelle/plugin/transforms/SEC/conf/runIxtSecTests.sh +0 -16
- arelle/plugin/transforms/SEC/conf/saxon9.jar +0 -0
- arelle/plugin/transforms/SEC/conf/testcase.xml +0 -7117
- arelle/plugin/transforms/SEC/conf/tests.xml +0 -848
- arelle/plugin/transforms/SEC/text2num.py +0 -110
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-boolballotbox.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-countrynameen.xml +0 -65
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-datequarterend.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durday.xml +0 -61
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durhour.xml +0 -69
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durmonth.xml +0 -71
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durweek.xml +0 -70
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durwordsen.xml +0 -56
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-duryear.xml +0 -64
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-edgarprovcountryen.xml +0 -65
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-entityfilercategoryen.xml +0 -63
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-exchnameen.xml +0 -86
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-numwordsen.xml +0 -55
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-stateprovnameen.xml +0 -64
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-yesnoballotbox.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/transform-registry.xml +0 -314
- arelle/plugin/transforms/SEC/transformationRegistry/schema/inlinexbrl-sec-transformation.xsd +0 -418
- arelle/plugin/validate/EFM/Consts.py +0 -362
- arelle/plugin/validate/EFM/DTS.py +0 -569
- arelle/plugin/validate/EFM/Dimensions.py +0 -264
- arelle/plugin/validate/EFM/Document.py +0 -206
- arelle/plugin/validate/EFM/Filing.py +0 -4383
- arelle/plugin/validate/EFM/IsolateSeparateIXDSes.py +0 -19
- arelle/plugin/validate/EFM/MessageNumericId.py +0 -142
- arelle/plugin/validate/EFM/PreCalAlignment.py +0 -324
- arelle/plugin/validate/EFM/Util.py +0 -688
- arelle/plugin/validate/EFM/__init__.py +0 -843
- arelle/plugin/validate/EFM/config.xml +0 -333
- arelle/plugin/validate/EFM/resources/README.md +0 -57
- arelle/plugin/validate/EFM/resources/axiswarnings.json +0 -27
- arelle/plugin/validate/EFM/resources/cef-deprecated-concepts.json +0 -8
- arelle/plugin/validate/EFM/resources/country-deprecated-concepts.json +0 -19
- arelle/plugin/validate/EFM/resources/currency-deprecated-concepts.json +0 -7
- arelle/plugin/validate/EFM/resources/dei-deprecated-concepts.json +0 -8
- arelle/plugin/validate/EFM/resources/dei-validations.json +0 -2884
- arelle/plugin/validate/EFM/resources/dqc-us-rules.json +0 -1389
- arelle/plugin/validate/EFM/resources/ecd-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-16-4.xml +0 -115
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-0-4.xml +0 -300
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-1.xml +0 -304
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-2.xml +0 -290
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-3-1.xml +0 -294
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.1.xml +0 -549
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.2.xml +0 -506
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.3.xml +0 -496
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-1.xml +0 -662
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-2.xml +0 -3761
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-3.xml +0 -3577
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-1.xml +0 -4020
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-2.xml +0 -3320
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-3.xml +0 -2998
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2012.xml +0 -957
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2013.xml +0 -982
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2014.xml +0 -1001
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2015.xml +0 -1076
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2016.xml +0 -120
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-1.xml +0 -3329
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-2.xml +0 -1230
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-3.xml +0 -1113
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-4.xml +0 -1321
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1-preview.xml +0 -1721
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1.xml +0 -1841
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2-2.xml +0 -1450
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2.xml +0 -1429
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-4.xml +0 -1527
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1-1.xml +0 -2049
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1.xml +0 -2065
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-2.xml +0 -1674
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-3.xml +0 -1715
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-all-years.xml +0 -10671
- arelle/plugin/validate/EFM/resources/edgartaxonomies/erxl.xsd +0 -69
- arelle/plugin/validate/EFM/resources/edgartaxonomies/extendedtaxonomies-all-years.xml +0 -18
- arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrs-taxonomies.xml +0 -3126
- arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrstaxonomies-all-years.xml +0 -22
- arelle/plugin/validate/EFM/resources/ex26-validations.json +0 -255
- arelle/plugin/validate/EFM/resources/exch-deprecated-concepts.json +0 -163
- arelle/plugin/validate/EFM/resources/ifrs-full-deprecated-concepts.json +0 -204
- arelle/plugin/validate/EFM/resources/invest-deprecated-concepts.json +0 -99
- arelle/plugin/validate/EFM/resources/ixbrl-transform-registries.json +0 -16
- arelle/plugin/validate/EFM/resources/naics-deprecated-concepts.json +0 -295
- arelle/plugin/validate/EFM/resources/oef-deprecated-concepts.json +0 -59
- arelle/plugin/validate/EFM/resources/other-standard-taxonomies.json +0 -12
- arelle/plugin/validate/EFM/resources/rr-deprecated-concepts.json +0 -14
- arelle/plugin/validate/EFM/resources/rxp-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/shr-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/sic-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/signwarnings.json +0 -112
- arelle/plugin/validate/EFM/resources/srt-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/stpr-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/taxonomy-compatibility.json +0 -79
- arelle/plugin/validate/EFM/resources/us-gaap-deprecated-concepts.json +0 -2886
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2020.json +0 -29068
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2021.json +0 -29598
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2022.json +0 -29141
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2023.json +0 -29400
- arelle/plugin/validate/EFM/resources/vip-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/tools/CheckTxmyRefs.py +0 -180
- arelle/plugin/validate/EFM-htm/Const.py +0 -205
- arelle/plugin/validate/EFM-htm/__init__.py +0 -217
- arelle/plugin/validate/EFM-htm/config.xml +0 -17
- arelle/plugin/validate/EFM-htm/resources/efm-htm.dtd +0 -664
- arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -199
- arelle/plugin/validate/ESEF_2022/__init__.py +0 -47
- arelle/plugin/validate/GFM/__init__.py +0 -59
- arelle/plugin/validate/GFM/config.xml +0 -82
- arelle/plugin/validate/SBRnl/CustomLoader.py +0 -19
- arelle/plugin/validate/SBRnl/DTS.py +0 -305
- arelle/plugin/validate/SBRnl/Dimensions.py +0 -357
- arelle/plugin/validate/SBRnl/Document.py +0 -799
- arelle/plugin/validate/SBRnl/Filing.py +0 -467
- arelle/plugin/validate/SBRnl/__init__.py +0 -75
- arelle/plugin/validate/SBRnl/config.xml +0 -26
- arelle/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
- arelle/plugin/validate/USBestPractices.py +0 -570
- arelle/plugin/validate/USCorpAction.py +0 -557
- arelle/plugin/validate/USSecTagging.py +0 -337
- arelle/plugin/validate/XDC/__init__.py +0 -77
- arelle/plugin/validate/XDC/config.xml +0 -20
- arelle/plugin/validate/XFsyntax/__init__.py +0 -64
- arelle/plugin/validate/XFsyntax/xf.py +0 -2227
- arelle/plugin/validate/__init__.py +0 -20
- arelle/plugin/validate/calc2.py +0 -536
- arelle/plugin/validateSBRnl.py +0 -530
- arelle/scripts-macOS/startWebServer.command +0 -3
- arelle/scripts-unix/startWebServer.sh +0 -1
- arelle/scripts-windows/startWebServer.bat +0 -5
- arelle_release-2.17.1.dist-info/RECORD +0 -676
- tests/__init__.py +0 -0
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/ArelleGUITest.csproj +0 -30
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs +0 -381
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs +0 -1
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest.sln +0 -31
- tests/integration_tests/ui_tests/resources/workiva.zip +0 -0
- tests/integration_tests/validation/README.md +0 -50
- tests/integration_tests/validation/conformance_suite_config.py +0 -59
- tests/integration_tests/validation/conformance_suite_configs.py +0 -63
- tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +0 -261
- tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py +0 -85
- tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2022.py +0 -90
- tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2021.py +0 -15
- tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2022.py +0 -15
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_2_1.py +0 -34
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_calculations_1_1.py +0 -40
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_dimensions_1_0.py +0 -28
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_1_0.py +0 -10
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py +0 -10
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py +0 -9
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py +0 -9
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +0 -14
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py +0 -22
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py +0 -11
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py +0 -19
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_table_linkbase_1_0.py +0 -296
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_taxonomy_packages_1_0.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_3.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_4.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_5.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_malformed_1_0.py +0 -31
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_registry_1_0.py +0 -22
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_structure_1_0.py +0 -18
- tests/integration_tests/validation/conftest.py +0 -24
- tests/integration_tests/validation/discover_tests.py +0 -22
- tests/integration_tests/validation/download_conformance_suites.py +0 -47
- tests/integration_tests/validation/run_conformance_suites.py +0 -175
- tests/integration_tests/validation/test_conformance_suites.py +0 -14
- tests/integration_tests/validation/validation_util.py +0 -271
- tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-missing.xbrl +0 -53
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-multiple.xbrl +0 -60
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-invalid.xbrl +0 -57
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-invalid.xbrl +0 -58
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-invalid.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-missing.xbrl +0 -61
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-invalid-date.xbrl +0 -89
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-invalid-file-extension.xml +0 -56
- tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-invalid-lang.xbrl +0 -56
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-missing-lang.xbrl +0 -55
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-entrypoint.xsd +0 -6
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/index.xml +0 -20
- tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-invalid-period.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-missing.xbrl +0 -53
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-multiple.xbrl +0 -60
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-invalid.xbrl +0 -57
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-invalid.xbrl +0 -58
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-invalid.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-missing.xbrl +0 -61
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-invalid-date.xbrl +0 -89
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-invalid-file-extension.xml +0 -56
- tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-invalid-lang.xbrl +0 -56
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-missing-lang.xbrl +0 -55
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-entrypoint.xsd +0 -6
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcases.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/index.xml +0 -20
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcases.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt18/index.xml +0 -8
- tests/unit_tests/arelle/conftest.py +0 -16
- tests/unit_tests/arelle/formula/test_fact_aspects_cache.py +0 -170
- tests/unit_tests/arelle/plugin/test_loadfromoim.py +0 -40
- tests/unit_tests/arelle/plugin/test_plugin_imports.py +0 -27
- tests/unit_tests/arelle/test_betafeatures.py +0 -81
- tests/unit_tests/arelle/test_cntlr.py +0 -28
- tests/unit_tests/arelle/test_import.py +0 -40
- tests/unit_tests/arelle/test_locale.py +0 -73
- tests/unit_tests/arelle/test_modelmanager.py +0 -15
- tests/unit_tests/arelle/test_packagemanager.py +0 -65
- tests/unit_tests/arelle/test_pluginmanager.py +0 -176
- tests/unit_tests/arelle/test_qname.py +0 -140
- tests/unit_tests/arelle/test_runtimeoptions.py +0 -56
- tests/unit_tests/arelle/test_system_info.py +0 -26
- tests/unit_tests/arelle/test_updater.py +0 -507
- tests/unit_tests/arelle/test_urlutil.py +0 -49
- tests/unit_tests/arelle/test_version.py +0 -46
- tests/unit_tests/arelle/utils/validate/test_decorator.py +0 -59
- /arelle/{examples/plugin/validate/XYZ → plugin/validate/EDINET}/rules/__init__.py +0 -0
- /arelle/plugin/validate/{HMRC → UK}/consistencyChecksByName.json +0 -0
- /arelle/plugin/validate/{HMRC → UK}/hmrc-taxonomies.xml +0 -0
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/entry_points.txt +0 -0
arelle/ModelXbrl.py
CHANGED
|
@@ -3,22 +3,29 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
'''
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
import os, sys, traceback, uuid
|
|
7
|
-
import regex as re
|
|
8
|
-
from collections import defaultdict
|
|
9
|
-
from collections.abc import Iterable
|
|
10
|
-
from typing import Dict, TYPE_CHECKING, Any, Type, TypeVar, Union, cast, Optional
|
|
11
6
|
import logging
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
import traceback
|
|
10
|
+
import uuid
|
|
11
|
+
from collections import defaultdict
|
|
12
|
+
from typing import TYPE_CHECKING, Any, TypeVar, Union, cast, Optional
|
|
13
|
+
|
|
14
|
+
import regex as re
|
|
15
|
+
from collections.abc import Iterable, Iterator
|
|
16
|
+
|
|
17
|
+
import arelle
|
|
18
|
+
from arelle import FileSource, ModelRelationshipSet, XmlUtil, ModelValue, XbrlConst, XmlValidate
|
|
19
|
+
from arelle.ErrorManager import ErrorManager
|
|
16
20
|
from arelle.Locale import format_string
|
|
21
|
+
from arelle.ModelObject import ModelObject
|
|
22
|
+
from arelle.ModelValue import dateUnionEqual
|
|
17
23
|
from arelle.PluginManager import pluginClassMethods
|
|
18
24
|
from arelle.PrototypeInstanceObject import FactPrototype, DimValuePrototype
|
|
19
|
-
from arelle.PythonUtil import flattenSequence
|
|
20
25
|
from arelle.UrlUtil import isHttpUrl
|
|
21
26
|
from arelle.ValidateXbrlDimensions import isFactDimensionallyValid
|
|
27
|
+
from arelle.XbrlConst import standardLabel
|
|
28
|
+
from arelle.XbrlUtil import sEqual
|
|
22
29
|
|
|
23
30
|
if TYPE_CHECKING:
|
|
24
31
|
from datetime import date, datetime
|
|
@@ -32,7 +39,8 @@ if TYPE_CHECKING:
|
|
|
32
39
|
from arelle.ModelRelationshipSet import ModelRelationshipSet as ModelRelationshipSetClass
|
|
33
40
|
from arelle.ModelValue import QName
|
|
34
41
|
from arelle.PrototypeDtsObject import LinkPrototype
|
|
35
|
-
from arelle.typing import
|
|
42
|
+
from arelle.typing import TypeGetText, LocaleDict
|
|
43
|
+
from arelle.ValidateUtr import UtrEntry
|
|
36
44
|
|
|
37
45
|
_: TypeGetText # Handle gettext
|
|
38
46
|
else:
|
|
@@ -46,10 +54,10 @@ AUTO_LOCATE_ELEMENT = '771407c0-1d0c-11e1-be5e-028037ec0200' # singleton meaning
|
|
|
46
54
|
DEFAULT = sys.intern("default")
|
|
47
55
|
NONDEFAULT = sys.intern("non-default")
|
|
48
56
|
DEFAULTorNONDEFAULT = sys.intern("default-or-non-default")
|
|
49
|
-
|
|
57
|
+
_NOT_FOUND = object()
|
|
50
58
|
|
|
51
59
|
|
|
52
|
-
def load(modelManager: ModelManager, url: str | FileSourceClass, nextaction: str | None = None, base: str | None = None, useFileSource: FileSourceClass | None = None, errorCaptureLevel:
|
|
60
|
+
def load(modelManager: ModelManager, url: str | FileSourceClass, nextaction: str | None = None, base: str | None = None, useFileSource: FileSourceClass | None = None, errorCaptureLevel: int | None = None, **kwargs: Any) -> ModelXbrl:
|
|
53
61
|
"""Each loaded instance, DTS, testcase, testsuite, versioning report, or RSS feed, is represented by an
|
|
54
62
|
instance of a ModelXbrl object. The ModelXbrl object has a collection of ModelDocument objects, each
|
|
55
63
|
representing an XML document (for now, with SQL whenever its time comes). One of the modelDocuments of
|
|
@@ -61,7 +69,6 @@ def load(modelManager: ModelManager, url: str | FileSourceClass, nextaction: str
|
|
|
61
69
|
:param useFileSource: for internal use (when an entry point is in a FileSource archive and discovered files expected to also be in the entry point's archive.
|
|
62
70
|
"""
|
|
63
71
|
if nextaction is None: nextaction = _("loading")
|
|
64
|
-
from arelle import (ModelDocument, FileSource)
|
|
65
72
|
modelXbrl = create(modelManager, errorCaptureLevel=errorCaptureLevel)
|
|
66
73
|
if "errors" in kwargs: # pre-load errors, such as from taxonomy package validation
|
|
67
74
|
modelXbrl.errors.extend(cast(str, kwargs.get("errors")))
|
|
@@ -84,10 +91,10 @@ def load(modelManager: ModelManager, url: str | FileSourceClass, nextaction: str
|
|
|
84
91
|
modelXbrl.closeFileSource= True
|
|
85
92
|
modelXbrl.modelDocument = None
|
|
86
93
|
if kwargs.get("isLoadable",True): # used for test cases to block taxonomy packages without discoverable contents
|
|
87
|
-
modelXbrl.modelDocument = ModelDocument.load(modelXbrl, url, base, isEntry=True, **kwargs)
|
|
94
|
+
modelXbrl.modelDocument = arelle.ModelDocument.load(modelXbrl, url, base, isEntry=True, **kwargs)
|
|
88
95
|
if supplementalUrls:
|
|
89
96
|
for url in supplementalUrls:
|
|
90
|
-
ModelDocument.load(modelXbrl, url, base, isEntry=False, isDiscovered=True, **kwargs)
|
|
97
|
+
arelle.ModelDocument.load(modelXbrl, url, base, isEntry=False, isDiscovered=True, **kwargs)
|
|
91
98
|
if hasattr(modelXbrl, "entryLoadingUrl"):
|
|
92
99
|
del modelXbrl.entryLoadingUrl
|
|
93
100
|
loadSchemalocatedSchemas(modelXbrl)
|
|
@@ -103,24 +110,22 @@ def load(modelManager: ModelManager, url: str | FileSourceClass, nextaction: str
|
|
|
103
110
|
|
|
104
111
|
def create(
|
|
105
112
|
modelManager: ModelManager, newDocumentType: int | None = None, url: str | None = None, schemaRefs: str|None = None, createModelDocument: bool = True, isEntry: bool = False,
|
|
106
|
-
errorCaptureLevel:
|
|
113
|
+
errorCaptureLevel: int | None = None, initialXml: str | None = None, initialComment: str | None = None, base: str | None = None, discover: bool = True, xbrliNamespacePrefix: str | None = None
|
|
107
114
|
) -> ModelXbrl:
|
|
108
|
-
from arelle import (ModelDocument, FileSource)
|
|
109
115
|
modelXbrl = ModelXbrl(modelManager, errorCaptureLevel=errorCaptureLevel)
|
|
110
116
|
modelXbrl.locale = modelManager.locale
|
|
111
117
|
if newDocumentType:
|
|
112
118
|
modelXbrl.fileSource = FileSource.FileSource(cast(str, url), modelManager.cntlr) # url may be an open file handle, use str(url) below
|
|
113
119
|
modelXbrl.closeFileSource= True
|
|
114
120
|
if createModelDocument:
|
|
115
|
-
modelXbrl.modelDocument = ModelDocument.create(modelXbrl, newDocumentType, str(url), schemaRefs=schemaRefs, isEntry=isEntry, initialXml=initialXml, initialComment=initialComment, base=base, discover=discover, xbrliNamespacePrefix=xbrliNamespacePrefix)
|
|
121
|
+
modelXbrl.modelDocument = arelle.ModelDocument.create(modelXbrl, newDocumentType, str(url), schemaRefs=schemaRefs, isEntry=isEntry, initialXml=initialXml, initialComment=initialComment, base=base, discover=discover, xbrliNamespacePrefix=xbrliNamespacePrefix)
|
|
116
122
|
if isEntry:
|
|
117
123
|
del modelXbrl.entryLoadingUrl
|
|
118
124
|
loadSchemalocatedSchemas(modelXbrl)
|
|
119
125
|
return modelXbrl
|
|
120
126
|
|
|
121
127
|
def loadSchemalocatedSchemas(modelXbrl: ModelXbrl) -> None:
|
|
122
|
-
|
|
123
|
-
if modelXbrl.modelDocument and modelXbrl.modelDocument.type <= ModelDocument.Type.INLINEXBRLDOCUMENTSET:
|
|
128
|
+
if modelXbrl.modelDocument and modelXbrl.modelDocument.type <= arelle.ModelDocument.Type.INLINEXBRLDOCUMENTSET:
|
|
124
129
|
# at this point DTS is fully discovered but schemaLocated xsd's are not yet loaded
|
|
125
130
|
modelDocumentsSchemaLocated: set[ModelDocumentClass] = set()
|
|
126
131
|
# loadSchemalocatedSchemas sometimes adds to modelXbrl.urlDocs
|
|
@@ -133,7 +138,7 @@ def loadSchemalocatedSchemas(modelXbrl: ModelXbrl) -> None:
|
|
|
133
138
|
modelDocumentsSchemaLocated |= modelDocuments
|
|
134
139
|
|
|
135
140
|
|
|
136
|
-
MatchSubstitutionGroupValueType = TypeVar('MatchSubstitutionGroupValueType',
|
|
141
|
+
MatchSubstitutionGroupValueType = TypeVar('MatchSubstitutionGroupValueType', type[ModelObject], bool)
|
|
137
142
|
|
|
138
143
|
|
|
139
144
|
class ModelXbrl:
|
|
@@ -286,7 +291,7 @@ class ModelXbrl:
|
|
|
286
291
|
entryLoadingUrl: str
|
|
287
292
|
fileSource: FileSourceClass
|
|
288
293
|
ixdsDocUrls: list[str]
|
|
289
|
-
ixdsHtmlElements: list[
|
|
294
|
+
ixdsHtmlElements: list[Any]
|
|
290
295
|
isDimensionsValidated: bool
|
|
291
296
|
locale: LocaleDict | None
|
|
292
297
|
modelDocument: ModelDocumentClass | None
|
|
@@ -302,20 +307,20 @@ class ModelXbrl:
|
|
|
302
307
|
_nonNilFactsInInstance: set[ModelFact]
|
|
303
308
|
_startedProfiledActivity: float
|
|
304
309
|
_startedTimeStat: float
|
|
310
|
+
_qnameUtrUnits: dict[QName, UtrEntry]
|
|
305
311
|
|
|
306
|
-
def __init__(self, modelManager: ModelManager, errorCaptureLevel:
|
|
312
|
+
def __init__(self, modelManager: ModelManager, errorCaptureLevel: int | None = None) -> None:
|
|
307
313
|
self.modelManager = modelManager
|
|
308
314
|
self.skipDTS: bool = modelManager.skipDTS
|
|
309
315
|
self.init(errorCaptureLevel=errorCaptureLevel)
|
|
310
316
|
|
|
311
|
-
def init(self, keepViews: bool = False, errorCaptureLevel:
|
|
317
|
+
def init(self, keepViews: bool = False, errorCaptureLevel: int | None = None) -> None:
|
|
312
318
|
self.uuid: str = uuid.uuid1().urn
|
|
313
319
|
self.namespaceDocs: defaultdict[str, list[ModelDocumentClass]] = defaultdict(list)
|
|
314
320
|
self.urlDocs: dict[str, ModelDocumentClass] = {}
|
|
315
321
|
self.urlUnloadableDocs: dict[bool, str] = {} # if entry is True, entry is blocked and unloadable, False means loadable but warned
|
|
316
|
-
self.errorCaptureLevel:
|
|
317
|
-
self.
|
|
318
|
-
self.logCount: dict[str, int] = {}
|
|
322
|
+
self.errorCaptureLevel: int = (errorCaptureLevel or logging._checkLevel("INCONSISTENCY")) # type: ignore[attr-defined]
|
|
323
|
+
self.errorManager = ErrorManager(self.modelManager, self.errorCaptureLevel)
|
|
319
324
|
self.arcroleTypes: defaultdict[str, list[ModelRoleType]] = defaultdict(list)
|
|
320
325
|
self.roleTypes: defaultdict[str, list[ModelRoleType]] = defaultdict(list)
|
|
321
326
|
self.qnameConcepts: dict[QName, ModelConcept] = {} # indexed by qname of element
|
|
@@ -325,13 +330,17 @@ class ModelXbrl:
|
|
|
325
330
|
self.qnameGroupDefinitions: dict[QName, Any] = {}
|
|
326
331
|
self.qnameTypes: dict[QName, ModelType] = {} # contains ModelTypes by qname key of type
|
|
327
332
|
self.baseSets: defaultdict[tuple[str, str | None, QName | None, QName | None], list[ModelObject | LinkPrototype]] = defaultdict(list) # contains ModelLinks for keys arcrole, arcrole#linkrole
|
|
328
|
-
self.relationshipSets: dict[tuple[str] | tuple[str, tuple[str, ...] | str | None, QName | None, QName | None, bool], ModelRelationshipSetClass] = {} # contains ModelRelationshipSets by bas set keys
|
|
333
|
+
self.relationshipSets: dict[tuple[str] | tuple[tuple[str, ...] | str, tuple[str, ...] | str | None, QName | None, QName | None, bool], ModelRelationshipSetClass] = {} # contains ModelRelationshipSets by bas set keys
|
|
329
334
|
self.qnameDimensionDefaults: dict[QName, QName] = {} # contains qname of dimension (index) and default member(value)
|
|
330
335
|
self.facts: list[ModelFact] = []
|
|
331
336
|
self.factsInInstance: set[ModelFact] = set()
|
|
332
337
|
self.undefinedFacts: list[ModelFact] = [] # elements presumed to be facts but not defined
|
|
333
|
-
self.contexts: dict[str,
|
|
338
|
+
self.contexts: dict[str, ModelContext] = {}
|
|
339
|
+
self.ixdsUnmappedContexts: dict[str, ModelContext] = {}
|
|
340
|
+
self._contextsInUseMarked = False
|
|
334
341
|
self.units: dict[str, ModelUnit] = {}
|
|
342
|
+
self.ixdsUnmappedUnits: dict[str, ModelUnit] = {}
|
|
343
|
+
self._unitsInUseMarked = False
|
|
335
344
|
self.modelObjects: list[ModelObject] = []
|
|
336
345
|
self.qnameParameters: dict[QName, Any] = {}
|
|
337
346
|
self.modelVariableSets: set[ModelVariableSet] = set()
|
|
@@ -342,19 +351,18 @@ class ModelXbrl:
|
|
|
342
351
|
if not keepViews:
|
|
343
352
|
self.views: list[Any] = []
|
|
344
353
|
self.langs: set[str] = {self.modelManager.defaultLang}
|
|
345
|
-
from arelle.XbrlConst import standardLabel
|
|
346
354
|
self.labelroles: set[str] = {standardLabel}
|
|
347
355
|
self.hasXDT: bool = False
|
|
348
356
|
self.hasTableRendering: bool = False
|
|
349
357
|
self.hasTableIndexing: bool = False
|
|
350
358
|
self.hasFormulae: bool = False
|
|
359
|
+
self.loadedFromOIM = False
|
|
360
|
+
self.loadedFromOimErrorCount = 0
|
|
351
361
|
self.formulaOutputInstance: ModelXbrl | None = None
|
|
352
|
-
self.logger:
|
|
362
|
+
self.logger: logging.Logger | None = self.modelManager.cntlr.logger
|
|
353
363
|
self.logRefObjectProperties: bool = getattr(self.logger, "logRefObjectProperties", False)
|
|
354
364
|
self.logRefHasPluginAttrs: bool = any(True for m in pluginClassMethods("Logging.Ref.Attributes"))
|
|
355
365
|
self.logRefHasPluginProperties: bool = any(True for m in pluginClassMethods("Logging.Ref.Properties"))
|
|
356
|
-
self.logHasRelevelerPlugin: bool = any(True for m in pluginClassMethods("Logging.Severity.Releveler"))
|
|
357
|
-
self.logRefFileRelUris: defaultdict[Any, dict[str, str]] = defaultdict(dict)
|
|
358
366
|
self.profileStats: dict[str, tuple[int, float, float | int]] = {}
|
|
359
367
|
self.schemaDocsToValidate: set[ModelDocumentClass] = set()
|
|
360
368
|
self.modelXbrl = self # for consistency in addressing modelXbrl
|
|
@@ -392,9 +400,8 @@ class ModelXbrl:
|
|
|
392
400
|
:param nextAction: status line text string, if any, to show upon completion
|
|
393
401
|
:param reloadCache: True to force clearing and reloading of web cache, if working online.
|
|
394
402
|
"""
|
|
395
|
-
from arelle import ModelDocument
|
|
396
403
|
self.init(keepViews=True)
|
|
397
|
-
self.modelDocument = ModelDocument.load(self, self.fileSource.url, isEntry=True, reloadCache=reloadCache)
|
|
404
|
+
self.modelDocument = arelle.ModelDocument.load(self, self.fileSource.url, isEntry=True, reloadCache=reloadCache)
|
|
398
405
|
self.modelManager.showStatus(_("xbrl loading finished, {0}...").format(nextaction),5000)
|
|
399
406
|
self.modelManager.reloadViews(self)
|
|
400
407
|
|
|
@@ -415,7 +422,17 @@ class ModelXbrl:
|
|
|
415
422
|
else:
|
|
416
423
|
return self.fileSource.url
|
|
417
424
|
|
|
418
|
-
def
|
|
425
|
+
def contextsByDocument(self) -> dict[str, list[ModelContext]]:
|
|
426
|
+
contextsByDocument = defaultdict(list)
|
|
427
|
+
for context in self.contexts.values():
|
|
428
|
+
contextsByDocument[context.modelDocument.filepath].append(context)
|
|
429
|
+
contextsByDocument.default_factory = None
|
|
430
|
+
return contextsByDocument
|
|
431
|
+
|
|
432
|
+
def entityIdentifiersInDocument(self) -> set[tuple[str, str]]:
|
|
433
|
+
return {context.entityIdentifier for context in self.contexts.values()}
|
|
434
|
+
|
|
435
|
+
def relationshipSet(self, arcrole: tuple[str, ...] | str, linkrole: tuple[str, ...] | str | None = None, linkqname: QName | None = None, arcqname: QName | None = None, includeProhibits: bool = False) -> ModelRelationshipSetClass:
|
|
419
436
|
"""Returns a relationship set matching specified parameters (only arcrole is required).
|
|
420
437
|
|
|
421
438
|
Resolve and determine relationship set. If a relationship set of the same parameters was previously resolved, it is returned from a cache.
|
|
@@ -425,7 +442,6 @@ class ModelXbrl:
|
|
|
425
442
|
:param arcqname: Arc element qname (wild if None)
|
|
426
443
|
:param includeProhibits: True to include prohibiting arc elements as relationships
|
|
427
444
|
"""
|
|
428
|
-
from arelle import ModelRelationshipSet
|
|
429
445
|
key = (arcrole, linkrole, linkqname, arcqname, includeProhibits)
|
|
430
446
|
if key not in self.relationshipSets:
|
|
431
447
|
ModelRelationshipSet.create(self, arcrole, linkrole, linkqname, arcqname, includeProhibits)
|
|
@@ -438,7 +454,7 @@ class ModelXbrl:
|
|
|
438
454
|
return None
|
|
439
455
|
|
|
440
456
|
def roleUriTitle(self, roleURI: str) -> str:
|
|
441
|
-
return re.sub(r"([A-Z]
|
|
457
|
+
return re.sub(r"(?!^)[A-Z]", r" \g<0>", os.path.basename(roleURI)).title()
|
|
442
458
|
|
|
443
459
|
def roleTypeDefinition(self, roleURI: str, lang: str | None = None) -> str:
|
|
444
460
|
modelRoles = self.roleTypes.get(roleURI, ())
|
|
@@ -463,15 +479,17 @@ class ModelXbrl:
|
|
|
463
479
|
:param elementQname: Element/Concept QName to find substitution group
|
|
464
480
|
:param subsGrpMatchTable: Table of substitutions used to determine xml proxy object class for xml elements and substitution group membership
|
|
465
481
|
"""
|
|
466
|
-
|
|
467
|
-
|
|
482
|
+
result = subsGrpMatchTable.get(elementQname, _NOT_FOUND)
|
|
483
|
+
if result is not _NOT_FOUND:
|
|
484
|
+
return cast(MatchSubstitutionGroupValueType, result) # head of substitution group
|
|
468
485
|
elementMdlObj = self.qnameConcepts.get(elementQname)
|
|
469
486
|
if elementMdlObj is not None:
|
|
470
487
|
subsGrpMdlObj = elementMdlObj.substitutionGroup
|
|
471
488
|
while subsGrpMdlObj is not None:
|
|
472
489
|
subsGrpQname = subsGrpMdlObj.qname
|
|
473
|
-
|
|
474
|
-
|
|
490
|
+
result = subsGrpMatchTable.get(subsGrpQname, _NOT_FOUND)
|
|
491
|
+
if result is not _NOT_FOUND:
|
|
492
|
+
return cast(MatchSubstitutionGroupValueType, result)
|
|
475
493
|
subsGrpMdlObj = subsGrpMdlObj.substitutionGroup
|
|
476
494
|
return subsGrpMatchTable.get(None)
|
|
477
495
|
|
|
@@ -499,8 +517,7 @@ class ModelXbrl:
|
|
|
499
517
|
|
|
500
518
|
:param url: File name to save the new instance document
|
|
501
519
|
"""
|
|
502
|
-
|
|
503
|
-
if self.modelDocument and self.modelDocument.type == ModelDocument.Type.INSTANCE:
|
|
520
|
+
if self.modelDocument and self.modelDocument.type == arelle.ModelDocument.Type.INSTANCE:
|
|
504
521
|
# entry already is an instance, delete facts etc.
|
|
505
522
|
del self.facts[:]
|
|
506
523
|
self.factsInInstance.clear()
|
|
@@ -522,7 +539,7 @@ class ModelXbrl:
|
|
|
522
539
|
schemaRefUri = self.uri
|
|
523
540
|
else: # relativize local paths
|
|
524
541
|
schemaRefUri = os.path.relpath(self.uri, os.path.dirname(url))
|
|
525
|
-
self.modelDocument = ModelDocument.create(self, ModelDocument.Type.INSTANCE, url, schemaRefs=[schemaRefUri], isEntry=True)
|
|
542
|
+
self.modelDocument = arelle.ModelDocument.create(self, arelle.ModelDocument.Type.INSTANCE, url, schemaRefs=[schemaRefUri], isEntry=True)
|
|
526
543
|
if priorFileSource:
|
|
527
544
|
priorFileSource.close()
|
|
528
545
|
self.closeFileSource= True
|
|
@@ -571,13 +588,10 @@ class ModelXbrl:
|
|
|
571
588
|
:param segOCCs: Segment non-dimensional nodes
|
|
572
589
|
:param scenOCCs: Scenario non-dimensional nodes
|
|
573
590
|
"""
|
|
574
|
-
from arelle.ModelFormulaObject import Aspect
|
|
575
|
-
from arelle.ModelValue import dateUnionEqual
|
|
576
|
-
from arelle.XbrlUtil import sEqual
|
|
577
591
|
if dims:
|
|
578
|
-
segAspect, scenAspect = (Aspect.NON_XDT_SEGMENT, Aspect.NON_XDT_SCENARIO)
|
|
592
|
+
segAspect, scenAspect = (arelle.ModelFormulaObject.Aspect.NON_XDT_SEGMENT, arelle.ModelFormulaObject.Aspect.NON_XDT_SCENARIO)
|
|
579
593
|
else:
|
|
580
|
-
segAspect, scenAspect = (Aspect.COMPLETE_SEGMENT, Aspect.COMPLETE_SCENARIO)
|
|
594
|
+
segAspect, scenAspect = (arelle.ModelFormulaObject.Aspect.COMPLETE_SEGMENT, arelle.ModelFormulaObject.Aspect.COMPLETE_SCENARIO)
|
|
581
595
|
for c in self.contexts.values():
|
|
582
596
|
if (c.entityIdentifier == (entityIdentScheme, entityIdentValue) and
|
|
583
597
|
((c.isInstantPeriod and periodType == "instant" and dateUnionEqual(c.instantDatetime, periodEndInstant, instantEndDate=True)) or
|
|
@@ -594,7 +608,7 @@ class ModelXbrl:
|
|
|
594
608
|
for cOCCs,mOCCs in ((c.nonDimValues(segAspect),segOCCs),
|
|
595
609
|
(c.nonDimValues(scenAspect),scenOCCs)))
|
|
596
610
|
):
|
|
597
|
-
return
|
|
611
|
+
return c
|
|
598
612
|
return None
|
|
599
613
|
|
|
600
614
|
def createContext(
|
|
@@ -639,7 +653,6 @@ class ModelXbrl:
|
|
|
639
653
|
text=XmlUtil.dateunionValue(periodEndInstant, subtractOneDay=True))
|
|
640
654
|
segmentElt = None
|
|
641
655
|
scenarioElt = None
|
|
642
|
-
from arelle.ModelInstanceObject import ModelDimensionValue
|
|
643
656
|
if dims: # requires primary item to determin ambiguous concepts
|
|
644
657
|
''' in theory we have to check full set of dimensions for validity in source or any other
|
|
645
658
|
context element, but for shortcut will see if each dimension is already reported in an
|
|
@@ -655,13 +668,13 @@ class ModelXbrl:
|
|
|
655
668
|
self.info("arelle:info",
|
|
656
669
|
_("Create context for %(priItem)s, cannot determine valid context elements, no suitable hypercubes"),
|
|
657
670
|
modelObject=self, priItem=priItem)
|
|
658
|
-
# fp.context.qnameDims is actually of type
|
|
659
|
-
fpDims = cast(
|
|
671
|
+
# fp.context.qnameDims is actually of type dict[QName, DimValuePrototype]
|
|
672
|
+
fpDims = cast(dict[Union[int, 'QName'], Union['QName', DimValuePrototype]], fp.context.qnameDims)
|
|
660
673
|
else:
|
|
661
674
|
fpDims = dims # dims known to be valid (such as for inline extraction)
|
|
662
675
|
for dimQname in sorted(fpDims.keys()):
|
|
663
676
|
dimValue:DimValuePrototype | ModelDimensionValue | QName = fpDims[dimQname]
|
|
664
|
-
if isinstance(dimValue, (DimValuePrototype,ModelDimensionValue)):
|
|
677
|
+
if isinstance(dimValue, (DimValuePrototype,arelle.ModelInstanceObject.ModelDimensionValue)):
|
|
665
678
|
dimMemberQname = dimValue.memberQname # None if typed dimension
|
|
666
679
|
contextEltName = dimValue.contextElement
|
|
667
680
|
else: # qname for explicit or node for typed
|
|
@@ -684,7 +697,7 @@ class ModelXbrl:
|
|
|
684
697
|
if cast('DimValuePrototype | ModelDimensionValue', dimValue).isTyped: #Typing thinks that this can also be a QName
|
|
685
698
|
dimElt = XmlUtil.addChild(contextElt, XbrlConst.xbrldi, "xbrldi:typedMember",
|
|
686
699
|
attributes=dimAttr)
|
|
687
|
-
if isinstance(dimValue, (ModelDimensionValue, DimValuePrototype)) and dimValue.isTyped:
|
|
700
|
+
if isinstance(dimValue, (arelle.ModelInstanceObject.ModelDimensionValue, DimValuePrototype)) and dimValue.isTyped:
|
|
688
701
|
XmlUtil.copyNodes(dimElt, cast(ModelObject, dimValue.typedMember))
|
|
689
702
|
elif dimMemberQname:
|
|
690
703
|
dimElt = XmlUtil.addChild(contextElt, XbrlConst.xbrldi, "xbrldi:explicitMember",
|
|
@@ -803,7 +816,7 @@ class ModelXbrl:
|
|
|
803
816
|
self._factsByDatatype[notStrict, typeQname] = fbdt = set()
|
|
804
817
|
for f in self.factsInInstance:
|
|
805
818
|
c = f.concept
|
|
806
|
-
if c.typeQname == typeQname or (notStrict and c.type.isDerivedFrom(typeQname)):
|
|
819
|
+
if c is not None and (c.typeQname == typeQname or (notStrict and c.type is not None and c.type.isDerivedFrom(typeQname))):
|
|
807
820
|
fbdt.add(f)
|
|
808
821
|
return fbdt
|
|
809
822
|
|
|
@@ -859,23 +872,30 @@ class ModelXbrl:
|
|
|
859
872
|
return fbdq[memQname]
|
|
860
873
|
|
|
861
874
|
@property
|
|
862
|
-
def contextsInUse(self) ->
|
|
863
|
-
|
|
864
|
-
if self._contextsInUseMarked:
|
|
865
|
-
return (cntx for cntx in self.contexts.values() if getattr(cntx, "_inUse", False))
|
|
866
|
-
except AttributeError:
|
|
875
|
+
def contextsInUse(self) -> Iterator[ModelContext]:
|
|
876
|
+
if not self._contextsInUseMarked:
|
|
867
877
|
for fact in self.factsInInstance:
|
|
868
878
|
cntx = fact.context
|
|
869
879
|
if cntx is not None:
|
|
870
880
|
cntx._inUse = True
|
|
871
|
-
self._contextsInUseMarked
|
|
872
|
-
|
|
881
|
+
self._contextsInUseMarked = True
|
|
882
|
+
return (cntx for cntx in self.contexts.values() if getattr(cntx, "_inUse", False))
|
|
883
|
+
|
|
884
|
+
@property
|
|
885
|
+
def unitsInUse(self) -> Iterator[ModelUnit]:
|
|
886
|
+
if not self._unitsInUseMarked:
|
|
887
|
+
for fact in self.factsInInstance:
|
|
888
|
+
unit = fact.unit
|
|
889
|
+
if unit is not None:
|
|
890
|
+
unit._inUse = True
|
|
891
|
+
self._unitsInUseMarked = True
|
|
892
|
+
return (unit for unit in self.units.values() if getattr(unit, "_inUse", False))
|
|
873
893
|
|
|
874
894
|
@property
|
|
875
895
|
def dimensionsInUse(self) -> set[Any]:
|
|
876
896
|
self._dimensionsInUse: set[Any]
|
|
877
897
|
try:
|
|
878
|
-
return self._dimensionsInUse
|
|
898
|
+
return cast(set[Any], self._dimensionsInUse)
|
|
879
899
|
except AttributeError:
|
|
880
900
|
self._dimensionsInUse = set(dim.dimension
|
|
881
901
|
for cntx in self.contexts.values() # use contextsInUse? slower?
|
|
@@ -925,16 +945,13 @@ class ModelXbrl:
|
|
|
925
945
|
assert self.modelDocument is not None
|
|
926
946
|
parent = self.modelDocument.xmlRootElement
|
|
927
947
|
self.makeelementParentModelObject = parent
|
|
928
|
-
global ModelFact
|
|
929
|
-
if ModelFact is None:
|
|
930
|
-
from arelle.ModelInstanceObject import ModelFact
|
|
931
948
|
newFact = cast(
|
|
932
|
-
ModelFact, XmlUtil.addChild(parent, conceptQname, attributes=attributes, text=text,
|
|
949
|
+
'ModelFact', XmlUtil.addChild(parent, conceptQname, attributes=attributes, text=text,
|
|
933
950
|
afterSibling=afterSibling, beforeSibling=beforeSibling)
|
|
934
951
|
)
|
|
935
952
|
if hasattr(self, "_factsByQname"):
|
|
936
953
|
self._factsByQname[newFact.qname].add(newFact)
|
|
937
|
-
if not isinstance(newFact, ModelFact):
|
|
954
|
+
if not isinstance(newFact, arelle.ModelInstanceObject.ModelFact):
|
|
938
955
|
return newFact # unable to create fact for this concept OR DTS not loaded for target instance (e.g., inline extraction, summary output)
|
|
939
956
|
del self.makeelementParentModelObject
|
|
940
957
|
if validate:
|
|
@@ -1001,188 +1018,12 @@ class ModelXbrl:
|
|
|
1001
1018
|
modelObject,
|
|
1002
1019
|
err, traceback.format_tb(sys.exc_info()[2])))
|
|
1003
1020
|
|
|
1004
|
-
def effectiveMessageCode(self, messageCodes: tuple[Any] | str) -> str | None:
|
|
1005
|
-
"""
|
|
1006
|
-
If codes includes EFM, GFM, HMRC, or SBR-coded error then the code chosen (if a sequence)
|
|
1007
|
-
corresponds to whether EFM, GFM, HMRC, or SBR validation is in effect.
|
|
1008
|
-
"""
|
|
1009
|
-
effectiveMessageCode = None
|
|
1010
|
-
_validationType = self.modelManager.disclosureSystem.validationType
|
|
1011
|
-
_exclusiveTypesPattern = self.modelManager.disclosureSystem.exclusiveTypesPattern
|
|
1012
|
-
|
|
1013
|
-
for argCode in messageCodes if isinstance(messageCodes,tuple) else (messageCodes,):
|
|
1014
|
-
if (isinstance(argCode, ModelValue.QName) or
|
|
1015
|
-
(_validationType and argCode.startswith(_validationType)) or
|
|
1016
|
-
(not _exclusiveTypesPattern or _exclusiveTypesPattern.match(argCode) == None)):
|
|
1017
|
-
effectiveMessageCode = argCode
|
|
1018
|
-
break
|
|
1019
|
-
return effectiveMessageCode
|
|
1020
|
-
|
|
1021
1021
|
# isLoggingEffectiveFor( messageCodes= messageCode= level= )
|
|
1022
|
-
def isLoggingEffectiveFor(self, **kwargs: Any) ->
|
|
1022
|
+
def isLoggingEffectiveFor(self, **kwargs: Any) -> bool: # args can be messageCode(s) and level
|
|
1023
1023
|
logger = self.logger
|
|
1024
|
-
if
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
else:
|
|
1028
|
-
messageCodes = kwargs["messageCode"]
|
|
1029
|
-
messageCode = self.effectiveMessageCode(messageCodes)
|
|
1030
|
-
codeEffective = (messageCode and
|
|
1031
|
-
(not logger.messageCodeFilter or logger.messageCodeFilter.match(messageCode)))
|
|
1032
|
-
else:
|
|
1033
|
-
codeEffective = True
|
|
1034
|
-
if "level" in kwargs and logger.messageLevelFilter:
|
|
1035
|
-
levelEffective = logger.messageLevelFilter.match(kwargs["level"].lower())
|
|
1036
|
-
else:
|
|
1037
|
-
levelEffective = True
|
|
1038
|
-
return codeEffective and levelEffective
|
|
1039
|
-
|
|
1040
|
-
def logArguments(self, messageCode: str, msg: str, codedArgs: dict[str, str]) -> Any:
|
|
1041
|
-
# Prepares arguments for logger function as per info() below.
|
|
1042
|
-
|
|
1043
|
-
def propValues(properties: Any) -> Any:
|
|
1044
|
-
# deref objects in properties
|
|
1045
|
-
return [(p[0], str(p[1])) if len(p) == 2 else (p[0], str(p[1]), propValues(p[2]))
|
|
1046
|
-
for p in properties if 2 <= len(p) <= 3]
|
|
1047
|
-
# determine message and extra arguments
|
|
1048
|
-
fmtArgs = {}
|
|
1049
|
-
extras: dict[str, Any] = {"messageCode":messageCode}
|
|
1050
|
-
modelObjectArgs: tuple[Any, ...] | list[Any] = ()
|
|
1051
|
-
|
|
1052
|
-
for argName, argValue in codedArgs.items():
|
|
1053
|
-
if argName in ("modelObject", "modelXbrl", "modelDocument"):
|
|
1054
|
-
try:
|
|
1055
|
-
entryUrl = self.modelDocument.uri # type: ignore[union-attr]
|
|
1056
|
-
except AttributeError:
|
|
1057
|
-
try:
|
|
1058
|
-
entryUrl = self.entryLoadingUrl
|
|
1059
|
-
except AttributeError:
|
|
1060
|
-
entryUrl = self.fileSource.url
|
|
1061
|
-
refs: list[dict[str, Any]] = []
|
|
1062
|
-
modelObjectArgs_complex = argValue if isinstance(argValue, (tuple,list,set)) else (argValue,)
|
|
1063
|
-
modelObjectArgs = flattenSequence(modelObjectArgs_complex)
|
|
1064
|
-
for arg in modelObjectArgs:
|
|
1065
|
-
if arg is not None:
|
|
1066
|
-
if isinstance(arg, str):
|
|
1067
|
-
objectUrl = arg
|
|
1068
|
-
else:
|
|
1069
|
-
try:
|
|
1070
|
-
objectUrl = arg.modelDocument.displayUri
|
|
1071
|
-
except AttributeError:
|
|
1072
|
-
try:
|
|
1073
|
-
objectUrl = arg.displayUri
|
|
1074
|
-
except AttributeError:
|
|
1075
|
-
try:
|
|
1076
|
-
objectUrl = self.modelDocument.displayUri # type: ignore[union-attr]
|
|
1077
|
-
except AttributeError:
|
|
1078
|
-
objectUrl = getattr(self, "entryLoadingUrl", "")
|
|
1079
|
-
try:
|
|
1080
|
-
if objectUrl.endswith("/_IXDS"):
|
|
1081
|
-
file = objectUrl[:-6] # inline document set or report package
|
|
1082
|
-
elif objectUrl in self.logRefFileRelUris.get(entryUrl, EMPTY_TUPLE):
|
|
1083
|
-
file = self.logRefFileRelUris[entryUrl][objectUrl]
|
|
1084
|
-
else:
|
|
1085
|
-
file = UrlUtil.relativeUri(entryUrl, objectUrl)
|
|
1086
|
-
self.logRefFileRelUris[entryUrl][objectUrl] = file
|
|
1087
|
-
except:
|
|
1088
|
-
file = ""
|
|
1089
|
-
ref: dict[str, Any] = {}
|
|
1090
|
-
if isinstance(arg,(ModelObject, ObjectPropertyViewWrapper)):
|
|
1091
|
-
_arg:ModelObject = arg.modelObject if isinstance(arg, ObjectPropertyViewWrapper) else arg
|
|
1092
|
-
if len(modelObjectArgs) > 1 and getattr(arg,"tag",None) == "instance":
|
|
1093
|
-
continue # skip IXDS top level element
|
|
1094
|
-
ref["href"] = file + "#" + cast(str, XmlUtil.elementFragmentIdentifier(_arg))
|
|
1095
|
-
ref["sourceLine"] = _arg.sourceline
|
|
1096
|
-
ref["objectId"] = _arg.objectId()
|
|
1097
|
-
if self.logRefObjectProperties:
|
|
1098
|
-
try:
|
|
1099
|
-
ref["properties"] = propValues(arg.propertyView)
|
|
1100
|
-
except AttributeError:
|
|
1101
|
-
pass # is a default properties entry appropriate or needed?
|
|
1102
|
-
if self.logRefHasPluginProperties:
|
|
1103
|
-
refProperties: Any = ref.get("properties", {})
|
|
1104
|
-
for pluginXbrlMethod in pluginClassMethods("Logging.Ref.Properties"):
|
|
1105
|
-
pluginXbrlMethod(arg, refProperties, codedArgs)
|
|
1106
|
-
if refProperties:
|
|
1107
|
-
ref["properties"] = refProperties
|
|
1108
|
-
else:
|
|
1109
|
-
ref["href"] = file
|
|
1110
|
-
try:
|
|
1111
|
-
ref["sourceLine"] = arg.sourceline
|
|
1112
|
-
except AttributeError:
|
|
1113
|
-
pass # arg may not have sourceline, ignore if so
|
|
1114
|
-
if self.logRefHasPluginAttrs:
|
|
1115
|
-
refAttributes: dict[str, str] = {}
|
|
1116
|
-
for pluginXbrlMethod in pluginClassMethods("Logging.Ref.Attributes"):
|
|
1117
|
-
pluginXbrlMethod(arg, refAttributes, codedArgs)
|
|
1118
|
-
if refAttributes:
|
|
1119
|
-
ref["customAttributes"] = refAttributes
|
|
1120
|
-
refs.append(ref)
|
|
1121
|
-
extras["refs"] = refs
|
|
1122
|
-
elif argName == "sourceFileLine":
|
|
1123
|
-
# sourceFileLines is pairs of file and line numbers, e.g., ((file,line),(file2,line2),...)
|
|
1124
|
-
ref = {}
|
|
1125
|
-
if isinstance(argValue, (tuple,list)):
|
|
1126
|
-
ref["href"] = str(argValue[0])
|
|
1127
|
-
if len(argValue) > 1 and argValue[1]:
|
|
1128
|
-
ref["sourceLine"] = str(argValue[1])
|
|
1129
|
-
else:
|
|
1130
|
-
ref["href"] = str(argValue)
|
|
1131
|
-
extras["refs"] = [ref]
|
|
1132
|
-
elif argName == "sourceFileLines":
|
|
1133
|
-
# sourceFileLines is tuple/list of pairs of file and line numbers, e.g., ((file,line),(file2,line2),...)
|
|
1134
|
-
sf_refs: list[dict[str, str]] = []
|
|
1135
|
-
argvalues: tuple[Any, ...] | list[Any] = argValue if isinstance(argValue, (tuple, list)) else (argValue,)
|
|
1136
|
-
for arg in argvalues:
|
|
1137
|
-
ref = {}
|
|
1138
|
-
if isinstance(arg, (tuple, list)):
|
|
1139
|
-
arg_: tuple[Any, ...] | list[Any] = arg
|
|
1140
|
-
ref["href"] = str(arg_[0])
|
|
1141
|
-
if len(arg_) > 1 and arg_[1]:
|
|
1142
|
-
ref["sourceLine"] = str(arg_[1])
|
|
1143
|
-
else:
|
|
1144
|
-
ref["href"] = str(arg)
|
|
1145
|
-
sf_refs.append(ref)
|
|
1146
|
-
extras["refs"] = sf_refs
|
|
1147
|
-
elif argName == "sourceLine":
|
|
1148
|
-
if isinstance(argValue, int): # must be sortable with int's in logger
|
|
1149
|
-
extras["sourceLine"] = argValue
|
|
1150
|
-
elif argName not in ("exc_info", "messageCodes"):
|
|
1151
|
-
fmtArgs[argName] = self.loggableValue(argValue) # dereference anything not loggable
|
|
1152
|
-
|
|
1153
|
-
if "refs" not in extras:
|
|
1154
|
-
try:
|
|
1155
|
-
file = os.path.basename(cast('ModelDocumentClass', self.modelDocument).displayUri)
|
|
1156
|
-
except AttributeError:
|
|
1157
|
-
try:
|
|
1158
|
-
file = os.path.basename(self.entryLoadingUrl)
|
|
1159
|
-
except:
|
|
1160
|
-
file = ""
|
|
1161
|
-
extras["refs"] = [{"href": file}]
|
|
1162
|
-
for pluginXbrlMethod in pluginClassMethods("Logging.Message.Parameters"):
|
|
1163
|
-
# plug in can rewrite msg string or return msg if not altering msg
|
|
1164
|
-
msg = pluginXbrlMethod(messageCode, msg, modelObjectArgs, fmtArgs) or msg
|
|
1165
|
-
return (messageCode,
|
|
1166
|
-
(msg, fmtArgs) if fmtArgs else (msg,),
|
|
1167
|
-
extras)
|
|
1168
|
-
|
|
1169
|
-
def loggableValue(self, argValue: Any) -> str | dict[Any, Any]: # must be dereferenced and not related to object lifetimes
|
|
1170
|
-
if isinstance(argValue, (ModelValue.QName, ModelObject, FileNamedStringIO, tuple, list, set)): # might be a set of lxml objects not dereferencable at shutdown
|
|
1171
|
-
return str(argValue)
|
|
1172
|
-
elif argValue is None:
|
|
1173
|
-
return "(none)"
|
|
1174
|
-
elif isinstance(argValue, bool):
|
|
1175
|
-
return str(argValue).lower() # show lower case true/false xml values
|
|
1176
|
-
elif isinstance(argValue, int):
|
|
1177
|
-
# need locale-dependent formatting
|
|
1178
|
-
return format_string(self.modelManager.locale, '%i', argValue)
|
|
1179
|
-
elif isinstance(argValue,(float,Decimal)):
|
|
1180
|
-
# need locale-dependent formatting
|
|
1181
|
-
return format_string(self.modelManager.locale, '%f', argValue)
|
|
1182
|
-
elif isinstance(argValue, dict):
|
|
1183
|
-
return dict((self.loggableValue(k), self.loggableValue(v)) for k,v in argValue.items())
|
|
1184
|
-
else:
|
|
1185
|
-
return str(argValue)
|
|
1024
|
+
if logger is None:
|
|
1025
|
+
return False
|
|
1026
|
+
return self.errorManager.isLoggingEffectiveFor(logger, **kwargs)
|
|
1186
1027
|
|
|
1187
1028
|
def debug(self, codes: str | tuple[str, ...], msg: str, **args: Any) -> None:
|
|
1188
1029
|
"""Same as error(), but as info
|
|
@@ -1205,29 +1046,24 @@ class ModelXbrl:
|
|
|
1205
1046
|
def log(self, level: str, codes: Any, msg: str, **args: Any) -> None:
|
|
1206
1047
|
"""Same as error(), but level passed in as argument
|
|
1207
1048
|
"""
|
|
1208
|
-
|
|
1209
|
-
# determine logCode
|
|
1210
|
-
messageCode = self.effectiveMessageCode(codes)
|
|
1211
|
-
if messageCode == "asrtNoLog":
|
|
1212
|
-
self.errors.append(args["assertionResults"])
|
|
1049
|
+
if self.logger is None:
|
|
1213
1050
|
return
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
logger.log(numericLevel, *logArgs, exc_info=args.get("exc_info"), extra=extras)
|
|
1051
|
+
entryLoadingUrl = None
|
|
1052
|
+
try:
|
|
1053
|
+
entryLoadingUrl = self.entryLoadingUrl
|
|
1054
|
+
except AttributeError:
|
|
1055
|
+
pass
|
|
1056
|
+
self.errorManager.log(
|
|
1057
|
+
self.logger,
|
|
1058
|
+
level,
|
|
1059
|
+
codes,
|
|
1060
|
+
msg,
|
|
1061
|
+
sourceModelXbrl=self,
|
|
1062
|
+
fileSource=self.fileSource,
|
|
1063
|
+
entryLoadingUrl=entryLoadingUrl,
|
|
1064
|
+
logRefObjectProperties=self.logRefObjectProperties,
|
|
1065
|
+
**args
|
|
1066
|
+
)
|
|
1231
1067
|
|
|
1232
1068
|
def error(self, codes: str | tuple[str, ...], msg: str, **args: Any) -> None:
|
|
1233
1069
|
"""Logs a message as info, by code, logging-system message text (using %(name)s named arguments
|
|
@@ -1336,3 +1172,27 @@ class ModelXbrl:
|
|
|
1336
1172
|
_("DTS of %(entryFile)s has %(numberOfFiles)s files packaged into %(packageOutputFile)s"),
|
|
1337
1173
|
modelObject=self,
|
|
1338
1174
|
entryFile=os.path.basename(entryFilename), packageOutputFile=pkgFilename, numberOfFiles=numFiles)
|
|
1175
|
+
|
|
1176
|
+
@property
|
|
1177
|
+
def qnameUtrUnits(self) -> dict[QName, UtrEntry]:
|
|
1178
|
+
try:
|
|
1179
|
+
return self._qnameUtrUnits
|
|
1180
|
+
except AttributeError:
|
|
1181
|
+
from arelle.ValidateUtr import ValidateUtr
|
|
1182
|
+
utrEntries = ValidateUtr(self).utrItemTypeEntries
|
|
1183
|
+
qnameUtrUnits = {}
|
|
1184
|
+
for unitType, unitMap in utrEntries.items():
|
|
1185
|
+
for unitId, unit in unitMap.items():
|
|
1186
|
+
unitQName = unit.qname()
|
|
1187
|
+
if unitQName:
|
|
1188
|
+
qnameUtrUnits[unitQName] = unit
|
|
1189
|
+
self._qnameUtrUnits = qnameUtrUnits
|
|
1190
|
+
return self._qnameUtrUnits
|
|
1191
|
+
|
|
1192
|
+
@property
|
|
1193
|
+
def errors(self) -> list[str | None]:
|
|
1194
|
+
return self.errorManager.errors
|
|
1195
|
+
|
|
1196
|
+
@property
|
|
1197
|
+
def logCount(self) -> dict[str, int]:
|
|
1198
|
+
return self.errorManager.logCount
|