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.
Files changed (893) hide show
  1. arelle/Aspect.py +6 -3
  2. arelle/BetaFeatures.py +3 -0
  3. arelle/Cntlr.py +117 -413
  4. arelle/CntlrCmdLine.py +364 -227
  5. arelle/CntlrQuickBooks.py +4 -2
  6. arelle/CntlrWebMain.py +179 -119
  7. arelle/CntlrWinMain.py +342 -124
  8. arelle/DialogAbout.py +1 -1
  9. arelle/DialogArcroleGroup.py +1 -1
  10. arelle/DialogFind.py +1 -1
  11. arelle/DialogFormulaParameters.py +2 -2
  12. arelle/DialogLanguage.py +45 -36
  13. arelle/DialogNewFactItem.py +1 -1
  14. arelle/DialogOpenArchive.py +30 -34
  15. arelle/DialogPackageManager.py +11 -8
  16. arelle/DialogPluginManager.py +43 -89
  17. arelle/DialogRssWatch.py +2 -2
  18. arelle/DialogURL.py +1 -1
  19. arelle/DialogUserPassword.py +1 -1
  20. arelle/DisclosureSystem.py +69 -1
  21. arelle/ErrorManager.py +321 -0
  22. arelle/FileSource.py +201 -99
  23. arelle/FunctionFn.py +44 -5
  24. arelle/FunctionIxt.py +16 -13
  25. arelle/FunctionUtil.py +1 -1
  26. arelle/FunctionXfi.py +68 -24
  27. arelle/FunctionXs.py +1 -1
  28. arelle/HtmlUtil.py +5 -4
  29. arelle/LeiUtil.py +63 -43
  30. arelle/LinkbaseType.py +94 -0
  31. arelle/LocalViewer.py +8 -2
  32. arelle/Locale.py +239 -79
  33. arelle/ModelDocument.py +180 -48
  34. arelle/ModelDtsObject.py +32 -27
  35. arelle/ModelFormulaObject.py +14 -6
  36. arelle/ModelInstanceObject.py +43 -14
  37. arelle/ModelManager.py +6 -1
  38. arelle/ModelObject.py +12 -8
  39. arelle/ModelObjectFactory.py +18 -2
  40. arelle/ModelRelationshipSet.py +46 -3
  41. arelle/ModelRenderingObject.py +899 -951
  42. arelle/ModelRssItem.py +2 -4
  43. arelle/ModelTestcaseObject.py +41 -4
  44. arelle/ModelValue.py +42 -14
  45. arelle/ModelVersReport.py +1 -1
  46. arelle/ModelXbrl.py +133 -273
  47. arelle/PackageManager.py +202 -176
  48. arelle/PluginManager.py +551 -239
  49. arelle/PluginUtils.py +54 -0
  50. arelle/PrototypeInstanceObject.py +53 -12
  51. arelle/PythonUtil.py +166 -25
  52. arelle/RuntimeOptions.py +32 -18
  53. arelle/SocketUtils.py +3 -0
  54. arelle/SystemInfo.py +1 -1
  55. arelle/TkTableWrapper.py +33 -5
  56. arelle/UITkTable.py +27 -21
  57. arelle/Updater.py +7 -3
  58. arelle/UrlUtil.py +6 -2
  59. arelle/Validate.py +596 -402
  60. arelle/ValidateDuplicateFacts.py +584 -0
  61. arelle/ValidateFileSource.py +38 -0
  62. arelle/ValidateFilingText.py +46 -29
  63. arelle/ValidateInfoset.py +104 -32
  64. arelle/ValidateUtr.py +31 -4
  65. arelle/ValidateXbrl.py +144 -120
  66. arelle/ValidateXbrlCalcs.py +51 -66
  67. arelle/ValidateXbrlDTS.py +98 -29
  68. arelle/Version.py +2 -7
  69. arelle/ViewFile.py +2 -0
  70. arelle/ViewFileDTS.py +7 -2
  71. arelle/ViewFileFactList.py +1 -1
  72. arelle/ViewFileFactTable.py +4 -4
  73. arelle/ViewFileRelationshipSet.py +36 -19
  74. arelle/ViewFileRenderedGrid.py +164 -753
  75. arelle/ViewFileRenderedLayout.py +174 -0
  76. arelle/ViewFileRenderedStructure.py +108 -0
  77. arelle/ViewWinDTS.py +4 -1
  78. arelle/ViewWinFactList.py +1 -1
  79. arelle/ViewWinFactTable.py +1 -1
  80. arelle/ViewWinRelationshipSet.py +14 -8
  81. arelle/ViewWinRenderedGrid.py +397 -287
  82. arelle/ViewWinRssFeed.py +4 -0
  83. arelle/ViewWinTree.py +15 -9
  84. arelle/ViewWinXml.py +1 -1
  85. arelle/WebCache.py +510 -272
  86. arelle/XbrlConst.py +202 -196
  87. arelle/XbrlUtil.py +2 -1
  88. arelle/XhtmlValidate.py +9 -23
  89. arelle/XmlUtil.py +24 -19
  90. arelle/XmlValidate.py +95 -67
  91. arelle/XmlValidateParticles.py +4 -4
  92. arelle/_version.py +33 -3
  93. arelle/api/Session.py +183 -0
  94. arelle/config/creationSoftwareNames.json +24 -10
  95. arelle/config/disclosuresystems.xml +1 -1
  96. arelle/config/disclosuresystems.xsd +3 -0
  97. arelle/config/sbr-text-formatting.xsd +737 -0
  98. arelle/conformance/CSVTestcaseLoader.py +102 -0
  99. arelle/formula/FactAspectsCache.py +10 -4
  100. arelle/formula/ValidateFormula.py +82 -194
  101. arelle/formula/XPathContext.py +42 -28
  102. arelle/formula/XPathParser.py +15 -9
  103. arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po +3 -4
  104. arelle/locale/messages.pot +1 -2
  105. arelle/locale/ru/LC_MESSAGES/ru.po +2 -2
  106. arelle/logging/formatters/LogFormatter.py +47 -0
  107. arelle/logging/handlers/LogHandlerWithXml.py +94 -0
  108. arelle/logging/handlers/LogToBufferHandler.py +20 -0
  109. arelle/logging/handlers/LogToPrintHandler.py +41 -0
  110. arelle/logging/handlers/LogToXmlHandler.py +244 -0
  111. arelle/logging/handlers/StructuredMessageLogHandler.py +74 -0
  112. arelle/model/CommentBase.py +3 -0
  113. arelle/model/ElementBase.py +3 -0
  114. arelle/model/PIBase.py +3 -0
  115. arelle/model/__init__.py +3 -0
  116. arelle/oim/Load.py +2869 -0
  117. arelle/oim/Validate.py +155 -0
  118. arelle/oim/xml/Save.py +21 -0
  119. arelle/packages/PackageConst.py +7 -0
  120. arelle/packages/PackageType.py +13 -0
  121. arelle/packages/PackageUtils.py +22 -0
  122. arelle/packages/PackageValidation.py +200 -0
  123. arelle/packages/report/DetectReportPackage.py +13 -0
  124. arelle/packages/report/ReportPackage.py +265 -0
  125. arelle/packages/report/ReportPackageConst.py +79 -0
  126. arelle/packages/report/ReportPackageValidator.py +207 -0
  127. arelle/plugin/EdgarRendererAllReports.py +12 -12
  128. arelle/plugin/OimTaxonomy/ModelValueMore.py +15 -0
  129. arelle/plugin/OimTaxonomy/ValidateDTS.py +484 -0
  130. arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +239 -0
  131. arelle/plugin/OimTaxonomy/XbrlAbstract.py +16 -0
  132. arelle/plugin/OimTaxonomy/XbrlConcept.py +68 -0
  133. arelle/plugin/OimTaxonomy/XbrlConst.py +261 -0
  134. arelle/plugin/OimTaxonomy/XbrlCube.py +91 -0
  135. arelle/plugin/OimTaxonomy/XbrlDimension.py +38 -0
  136. arelle/plugin/OimTaxonomy/XbrlDts.py +152 -0
  137. arelle/plugin/OimTaxonomy/XbrlEntity.py +16 -0
  138. arelle/plugin/OimTaxonomy/XbrlGroup.py +22 -0
  139. arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +22 -0
  140. arelle/plugin/OimTaxonomy/XbrlLabel.py +31 -0
  141. arelle/plugin/OimTaxonomy/XbrlNetwork.py +100 -0
  142. arelle/plugin/OimTaxonomy/XbrlProperty.py +28 -0
  143. arelle/plugin/OimTaxonomy/XbrlReference.py +33 -0
  144. arelle/plugin/OimTaxonomy/XbrlReport.py +24 -0
  145. arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +35 -0
  146. arelle/plugin/OimTaxonomy/XbrlTaxonomy.py +93 -0
  147. arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py +154 -0
  148. arelle/plugin/OimTaxonomy/XbrlTransform.py +17 -0
  149. arelle/plugin/OimTaxonomy/XbrlTypes.py +23 -0
  150. arelle/plugin/OimTaxonomy/XbrlUnit.py +17 -0
  151. arelle/plugin/OimTaxonomy/__init__.py +1037 -0
  152. arelle/plugin/OimTaxonomy/resources/iso4217.json +4479 -0
  153. arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json +935 -0
  154. arelle/plugin/OimTaxonomy/resources/ref.json +333 -0
  155. arelle/plugin/OimTaxonomy/resources/transform-types.json +2481 -0
  156. arelle/plugin/OimTaxonomy/resources/types.json +727 -0
  157. arelle/plugin/OimTaxonomy/resources/utr.json +3046 -0
  158. arelle/plugin/OimTaxonomy/resources/xbrlSpec.json +1082 -0
  159. arelle/plugin/formulaLoader.py +3 -3
  160. arelle/plugin/formulaSaver.py +4 -4
  161. arelle/plugin/inlineXbrlDocumentSet.py +331 -102
  162. arelle/plugin/internet/proxyNTLM/HTTPNtlmAuthHandler.py +1 -1
  163. arelle/plugin/loadFromExcel.py +13 -10
  164. arelle/plugin/loadFromOIM.py +16 -3096
  165. arelle/plugin/logging/saveMessages.py +1 -1
  166. arelle/plugin/saveHtmlEBAtables.py +293 -213
  167. arelle/plugin/saveLoadableOIM.py +652 -361
  168. arelle/plugin/saveOIMTaxonomy.py +311 -0
  169. arelle/plugin/streamingExtensions.py +1 -1
  170. arelle/plugin/systemInfo.py +46 -0
  171. arelle/plugin/transforms/tester.py +4 -4
  172. arelle/plugin/validate/CIPC/Const.py +18 -0
  173. arelle/plugin/validate/CIPC/__init__.py +34 -13
  174. arelle/plugin/validate/DBA/DisclosureSystems.py +12 -0
  175. arelle/plugin/validate/DBA/PluginValidationDataExtension.py +165 -0
  176. arelle/plugin/validate/DBA/ValidationPluginExtension.py +545 -0
  177. arelle/plugin/validate/DBA/__init__.py +49 -0
  178. arelle/plugin/validate/DBA/resources/config.xml +21 -0
  179. arelle/plugin/validate/DBA/rules/__init__.py +323 -0
  180. arelle/plugin/validate/DBA/rules/fr.py +1377 -0
  181. arelle/plugin/validate/DBA/rules/tc.py +45 -0
  182. arelle/plugin/validate/DBA/rules/th.py +172 -0
  183. arelle/plugin/validate/DBA/rules/tm.py +351 -0
  184. arelle/plugin/validate/DBA/rules/tr.py +373 -0
  185. arelle/plugin/validate/EBA/__init__.py +11 -12
  186. arelle/plugin/validate/EDINET/Constants.py +208 -0
  187. arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
  188. arelle/plugin/validate/EDINET/ControllerPluginData.py +298 -0
  189. arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
  190. arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
  191. arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
  192. arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
  193. arelle/plugin/validate/EDINET/FormType.py +134 -0
  194. arelle/plugin/validate/EDINET/ManifestInstance.py +236 -0
  195. arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +640 -0
  196. arelle/plugin/validate/EDINET/ReportFolderType.py +162 -0
  197. arelle/plugin/validate/EDINET/Statement.py +139 -0
  198. arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +493 -0
  199. arelle/plugin/validate/EDINET/UploadContents.py +48 -0
  200. arelle/plugin/validate/EDINET/ValidationPluginExtension.py +64 -0
  201. arelle/plugin/validate/EDINET/__init__.py +109 -0
  202. arelle/plugin/validate/EDINET/resources/config.xml +22 -0
  203. arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
  204. arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
  205. arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +62 -0
  206. arelle/plugin/validate/EDINET/rules/contexts.py +547 -0
  207. arelle/plugin/validate/EDINET/rules/edinet.py +1991 -0
  208. arelle/plugin/validate/EDINET/rules/frta.py +301 -0
  209. arelle/plugin/validate/EDINET/rules/gfm.py +2394 -0
  210. arelle/plugin/validate/EDINET/rules/manifests.py +88 -0
  211. arelle/plugin/validate/EDINET/rules/upload.py +1370 -0
  212. arelle/plugin/validate/ESEF/Const.py +16 -75
  213. arelle/plugin/validate/ESEF/Dimensions.py +2 -2
  214. arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +6 -1
  215. arelle/plugin/validate/ESEF/ESEF_2021/Image.py +7 -4
  216. arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +80 -57
  217. arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +60 -22
  218. arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +272 -133
  219. arelle/plugin/validate/ESEF/Util.py +5 -19
  220. arelle/plugin/validate/ESEF/__init__.py +61 -46
  221. arelle/plugin/validate/ESEF/resources/authority-validations.json +120 -10
  222. arelle/plugin/validate/ESEF/resources/config.xml +44 -3
  223. arelle/plugin/validate/FERC/__init__.py +31 -18
  224. arelle/plugin/validate/FERC/config.xml +18 -18
  225. arelle/plugin/validate/NL/DisclosureSystems.py +19 -3
  226. arelle/plugin/validate/NL/PluginValidationDataExtension.py +710 -7
  227. arelle/plugin/validate/NL/ValidationPluginExtension.py +117 -12
  228. arelle/plugin/validate/NL/__init__.py +21 -10
  229. arelle/plugin/validate/NL/resources/config.xml +27 -6
  230. arelle/plugin/validate/NL/rules/br_kvk.py +81 -21
  231. arelle/plugin/validate/NL/rules/fg_nl.py +292 -0
  232. arelle/plugin/validate/NL/rules/fr_kvk.py +60 -7
  233. arelle/plugin/validate/NL/rules/fr_nl.py +705 -24
  234. arelle/plugin/validate/NL/rules/nl_kvk.py +2182 -0
  235. arelle/plugin/validate/ROS/DisclosureSystems.py +1 -0
  236. arelle/plugin/validate/ROS/PluginValidationDataExtension.py +109 -0
  237. arelle/plugin/validate/ROS/ValidationPluginExtension.py +27 -0
  238. arelle/plugin/validate/ROS/__init__.py +28 -341
  239. arelle/plugin/validate/ROS/resources/config.xml +20 -0
  240. arelle/plugin/validate/ROS/rules/__init__.py +56 -0
  241. arelle/plugin/validate/ROS/rules/ros.py +393 -0
  242. arelle/plugin/validate/UK/ValidateUK.py +1372 -0
  243. arelle/plugin/validate/{HMRC → UK}/__init__.py +195 -189
  244. arelle/plugin/validate/{HMRC → UK}/config.xml +1 -1
  245. arelle/plugin/xbrlDB/SqlDb.py +1 -1
  246. arelle/plugin/xbrlDB/XbrlOpenSqlDB.py +5 -5
  247. arelle/plugin/xbrlDB/XbrlPublicPostgresDB.py +1 -1
  248. arelle/plugin/xbrlDB/XbrlSemanticJsonDB.py +1 -1
  249. arelle/plugin/xbrlDB/XbrlSemanticRdfDB.py +1 -1
  250. arelle/plugin/xbrlDB/__init__.py +4 -1
  251. arelle/{RenderingEvaluator.py → rendering/RenderingEvaluator.py} +120 -99
  252. arelle/rendering/RenderingLayout.py +476 -0
  253. arelle/rendering/RenderingResolution.py +814 -0
  254. arelle/resources/cache/http/www.eurofiling.info/eu/fr/xbrl/ext/filing-indicators.xsd +20 -0
  255. arelle/resources/cache/http/www.w3.org/2001/03/xml.xsd +117 -0
  256. arelle/resources/cache/http/www.w3.org/2001/XMLSchema.xsd +2534 -0
  257. arelle/resources/cache/http/www.w3.org/2001/xml.xsd +287 -0
  258. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd +779 -0
  259. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd +486 -0
  260. arelle/resources/cache/http/www.xbrl.org/2003/xl-2003-12-31.xsd +251 -0
  261. arelle/resources/cache/http/www.xbrl.org/2003/xlink-2003-12-31.xsd +121 -0
  262. arelle/resources/cache/http/www.xbrl.org/2004/ref-2004-08-10.xsd +129 -0
  263. arelle/resources/cache/http/www.xbrl.org/2005/xbrldt-2005.xsd +53 -0
  264. arelle/resources/cache/http/www.xbrl.org/2006/ref-2006-02-27.xsd +120 -0
  265. arelle/resources/cache/http/www.xbrl.org/2006/xbrldi-2006.xsd +41 -0
  266. arelle/resources/cache/http/www.xbrl.org/2008/boolean-filter.xsd +51 -0
  267. arelle/resources/cache/http/www.xbrl.org/2008/concept-filter.xsd +127 -0
  268. arelle/resources/cache/http/www.xbrl.org/2008/conformance.xsd +116 -0
  269. arelle/resources/cache/http/www.xbrl.org/2008/conformanceFunction.xsd +51 -0
  270. arelle/resources/cache/http/www.xbrl.org/2008/consistency-assertion.xsd +66 -0
  271. arelle/resources/cache/http/www.xbrl.org/2008/dimension-filter.xsd +86 -0
  272. arelle/resources/cache/http/www.xbrl.org/2008/entity-filter.xsd +92 -0
  273. arelle/resources/cache/http/www.xbrl.org/2008/existence-assertion.xsd +44 -0
  274. arelle/resources/cache/http/www.xbrl.org/2008/formula.xsd +261 -0
  275. arelle/resources/cache/http/www.xbrl.org/2008/function.xsd +90 -0
  276. arelle/resources/cache/http/www.xbrl.org/2008/general-filter.xsd +38 -0
  277. arelle/resources/cache/http/www.xbrl.org/2008/generic-label.xsd +80 -0
  278. arelle/resources/cache/http/www.xbrl.org/2008/generic-link.xsd +81 -0
  279. arelle/resources/cache/http/www.xbrl.org/2008/generic-reference.xsd +63 -0
  280. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  281. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  282. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xl-2003-12-31.xsd +248 -0
  283. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xlink-2003-12-31.xsd +117 -0
  284. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xframes-1.xsd +166 -0
  285. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-applet-1.xsd +66 -0
  286. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-attribs-1.xsd +72 -0
  287. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-base-1.xsd +36 -0
  288. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-form-1.xsd +195 -0
  289. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-table-1.xsd +169 -0
  290. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-model-1.xsd +376 -0
  291. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  292. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  293. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10.xsd +98 -0
  294. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-bdo-1.xsd +78 -0
  295. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkphras-1.xsd +161 -0
  296. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkpres-1.xsd +37 -0
  297. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkstruct-1.xsd +49 -0
  298. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-charent-1.xsd +38 -0
  299. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-copyright-1.xsd +29 -0
  300. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-csismap-1.xsd +96 -0
  301. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-datatypes-1.xsd +128 -0
  302. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-edit-1.xsd +39 -0
  303. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-events-1.xsd +130 -0
  304. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-form-1.xsd +326 -0
  305. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-frames-1.xsd +113 -0
  306. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-framework-1.xsd +66 -0
  307. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-hypertext-1.xsd +47 -0
  308. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-iframe-1.xsd +68 -0
  309. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-image-1.xsd +45 -0
  310. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlphras-1.xsd +163 -0
  311. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlpres-1.xsd +39 -0
  312. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstruct-1.xsd +50 -0
  313. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstyle-1.xsd +27 -0
  314. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-legacy-1.xsd +97 -0
  315. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-link-1.xsd +45 -0
  316. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-list-1.xsd +99 -0
  317. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-meta-1.xsd +42 -0
  318. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-misc-1.xsd +441 -0
  319. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-nameident-1.xsd +63 -0
  320. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-notations-1.xsd +69 -0
  321. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-object-1.xsd +76 -0
  322. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-param-1.xsd +51 -0
  323. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-pres-1.xsd +51 -0
  324. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-1.xsd +171 -0
  325. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  326. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-script-1.xsd +70 -0
  327. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ssismap-1.xsd +43 -0
  328. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-struct-1.xsd +112 -0
  329. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-style-1.xsd +52 -0
  330. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-table-1.xsd +272 -0
  331. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-target-1.xsd +53 -0
  332. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-text-1.xsd +67 -0
  333. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-model-1.xsd +677 -0
  334. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  335. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-modules-1.xsd +528 -0
  336. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11.xsd +104 -0
  337. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml2.xsd +21 -0
  338. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-1.xsd +73 -0
  339. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-2.xsd +74 -0
  340. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-1.xsd +73 -0
  341. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-2.xsd +75 -0
  342. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-1.xsd +34 -0
  343. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-2.xsd +34 -0
  344. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-handlers-2.xsd +98 -0
  345. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-definitions.xsd +225 -0
  346. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-model.xsd +681 -0
  347. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-modules.xsd +535 -0
  348. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0.xsd +40 -0
  349. arelle/resources/cache/http/www.xbrl.org/2008/match-filter.xsd +94 -0
  350. arelle/resources/cache/http/www.xbrl.org/2008/period-filter.xsd +86 -0
  351. arelle/resources/cache/http/www.xbrl.org/2008/registry.xsd +145 -0
  352. arelle/resources/cache/http/www.xbrl.org/2008/relative-filter.xsd +38 -0
  353. arelle/resources/cache/http/www.xbrl.org/2008/segment-scenario-filter.xsd +41 -0
  354. arelle/resources/cache/http/www.xbrl.org/2008/tuple-filter.xsd +83 -0
  355. arelle/resources/cache/http/www.xbrl.org/2008/unit-filter.xsd +58 -0
  356. arelle/resources/cache/http/www.xbrl.org/2008/validation.xsd +78 -0
  357. arelle/resources/cache/http/www.xbrl.org/2008/value-assertion.xsd +43 -0
  358. arelle/resources/cache/http/www.xbrl.org/2008/value-filter.xsd +43 -0
  359. arelle/resources/cache/http/www.xbrl.org/2008/variable.xsd +240 -0
  360. arelle/resources/cache/http/www.xbrl.org/2010/aspect-cover-filter.xsd +67 -0
  361. arelle/resources/cache/http/www.xbrl.org/2010/concept-relation-filter.xsd +108 -0
  362. arelle/resources/cache/http/www.xbrl.org/2010/custom-function-implementation.xsd +71 -0
  363. arelle/resources/cache/http/www.xbrl.org/2010/generic-message.xsd +68 -0
  364. arelle/resources/cache/http/www.xbrl.org/2010/validation-message.xsd +50 -0
  365. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  366. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  367. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xl-2003-12-31.xsd +248 -0
  368. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xlink-2003-12-31.xsd +117 -0
  369. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xframes-1.xsd +166 -0
  370. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-applet-1.xsd +66 -0
  371. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-attribs-1.xsd +72 -0
  372. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-base-1.xsd +36 -0
  373. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-form-1.xsd +195 -0
  374. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-table-1.xsd +169 -0
  375. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-model-1.xsd +376 -0
  376. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  377. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  378. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10.xsd +98 -0
  379. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-bdo-1.xsd +78 -0
  380. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkphras-1.xsd +161 -0
  381. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkpres-1.xsd +37 -0
  382. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkstruct-1.xsd +49 -0
  383. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-charent-1.xsd +38 -0
  384. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-copyright-1.xsd +29 -0
  385. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-csismap-1.xsd +96 -0
  386. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-datatypes-1.xsd +128 -0
  387. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-edit-1.xsd +39 -0
  388. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-events-1.xsd +130 -0
  389. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-form-1.xsd +326 -0
  390. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-frames-1.xsd +113 -0
  391. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-framework-1.xsd +66 -0
  392. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-hypertext-1.xsd +47 -0
  393. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-iframe-1.xsd +68 -0
  394. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-image-1.xsd +45 -0
  395. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlphras-1.xsd +163 -0
  396. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlpres-1.xsd +39 -0
  397. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstruct-1.xsd +50 -0
  398. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstyle-1.xsd +27 -0
  399. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-legacy-1.xsd +97 -0
  400. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-link-1.xsd +45 -0
  401. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-list-1.xsd +99 -0
  402. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-meta-1.xsd +42 -0
  403. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-misc-1.xsd +441 -0
  404. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-nameident-1.xsd +63 -0
  405. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-notations-1.xsd +69 -0
  406. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-object-1.xsd +76 -0
  407. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-param-1.xsd +51 -0
  408. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-pres-1.xsd +51 -0
  409. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-1.xsd +171 -0
  410. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  411. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-script-1.xsd +70 -0
  412. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ssismap-1.xsd +43 -0
  413. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-struct-1.xsd +112 -0
  414. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-style-1.xsd +52 -0
  415. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-table-1.xsd +272 -0
  416. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-target-1.xsd +53 -0
  417. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-text-1.xsd +67 -0
  418. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-model-1.xsd +677 -0
  419. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  420. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-modules-1.xsd +528 -0
  421. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11.xsd +104 -0
  422. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml2.xsd +21 -0
  423. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-1.xsd +73 -0
  424. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-2.xsd +74 -0
  425. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-1.xsd +73 -0
  426. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-2.xsd +75 -0
  427. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-1.xsd +34 -0
  428. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-2.xsd +34 -0
  429. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-handlers-2.xsd +98 -0
  430. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-definitions.xsd +252 -0
  431. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-model.xsd +681 -0
  432. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-modules.xsd +535 -0
  433. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1.xsd +40 -0
  434. arelle/resources/cache/http/www.xbrl.org/2013/match-filter.xsd +94 -0
  435. arelle/resources/cache/http/www.xbrl.org/2013/preferred-label.xsd +12 -0
  436. arelle/resources/cache/http/www.xbrl.org/2013/versioning-base.xsd +142 -0
  437. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-details.xsd +143 -0
  438. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-use.xsd +64 -0
  439. arelle/resources/cache/http/www.xbrl.org/2013/versioning-dimensions.xsd +162 -0
  440. arelle/resources/cache/http/www.xbrl.org/2014/extensible-enumerations.xsd +27 -0
  441. arelle/resources/cache/http/www.xbrl.org/2014/table.xsd +356 -0
  442. arelle/resources/cache/http/www.xbrl.org/2014/tablemodel.xsd +156 -0
  443. arelle/resources/cache/http/www.xbrl.org/2016/assertion-severity.xsd +29 -0
  444. arelle/resources/cache/http/www.xbrl.org/2016/severities.xml +21 -0
  445. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package-catalog.xsd +38 -0
  446. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package.xsd +154 -0
  447. arelle/resources/cache/http/www.xbrl.org/2022/assertion-severity.xsd +43 -0
  448. arelle/resources/cache/http/www.xbrl.org/2022/severities.xml +21 -0
  449. arelle/resources/cache/http/www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd +76 -0
  450. arelle/resources/cache/http/www.xbrl.org/dtr/type/numeric-2009-12-16.xsd +78 -0
  451. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/accounting-arcrole-2023-01-04.xsd +39 -0
  452. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd +29 -0
  453. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/esma-arcrole-2018-11-21.xsd +14 -0
  454. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd +13 -0
  455. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/jpfr-arcrole-2007-11-07.xsd +27 -0
  456. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/parent-child-2013-09-19.xsd +12 -0
  457. arelle/resources/cache/http/www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd +17 -0
  458. arelle/resources/cache/http/www.xbrl.org/lrr/role/jpfr-role-2007-11-07.xsd +47 -0
  459. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2008-03-31.xsd +30 -0
  460. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2009-12-16.xsd +33 -0
  461. arelle/resources/cache/http/www.xbrl.org/lrr/role/negative-2009-12-16.xsd +25 -0
  462. arelle/resources/cache/http/www.xbrl.org/lrr/role/net-2009-12-16.xsd +13 -0
  463. arelle/resources/cache/http/www.xbrl.org/lrr/role/positive-2009-12-16.xsd +25 -0
  464. arelle/resources/cache/http/www.xbrl.org/lrr/role/property-2022-09-28.xsd +15 -0
  465. arelle/resources/cache/http/www.xbrl.org/lrr/role/reference-2009-12-16.xsd +21 -0
  466. arelle/resources/cache/http/www.xbrl.org/lrr/role/restated-2006-02-21.xsd +19 -0
  467. arelle/resources/cache/http/www.xbrl.org/utr/2012-01-30/utr.xml +4543 -0
  468. arelle/resources/cache/http/www.xbrl.org/utr/2012-10-31/utr.xml +4510 -0
  469. arelle/resources/cache/http/www.xbrl.org/utr/2012-11-30/utr.xml +4567 -0
  470. arelle/resources/cache/http/www.xbrl.org/utr/2013-02-28/utr.xml +5180 -0
  471. arelle/resources/cache/http/www.xbrl.org/utr/2013-05-17/utr.xml +5349 -0
  472. arelle/resources/cache/http/www.xbrl.org/utr/2016-08-10/utr.xml +5363 -0
  473. arelle/resources/cache/http/www.xbrl.org/utr/2017-07-12/utr.xml +6164 -0
  474. arelle/resources/cache/http/www.xbrl.org/utr/2021-02-16/utr.xml +6370 -0
  475. arelle/resources/cache/http/www.xbrl.org/utr/2021-12-08/utr.xml +6493 -0
  476. arelle/resources/cache/http/www.xbrl.org/utr/2022-02-16/utr.xml +6551 -0
  477. arelle/resources/cache/http/www.xbrl.org/utr/2022-07-20/utr.xml +6638 -0
  478. arelle/resources/cache/http/www.xbrl.org/utr/2023-12-20/utr.xml +6680 -0
  479. arelle/resources/cache/http/www.xbrl.org/utr/2024-01-31/utr.xml +6680 -0
  480. arelle/resources/cache/http/www.xbrl.org/utr/2024-10-22/utr.xml +6693 -0
  481. arelle/resources/cache/http/www.xbrl.org/utr/utr.xml +6693 -0
  482. arelle/resources/cache/https/www.xbrl.org/2005/conformance.xsd +87 -0
  483. arelle/resources/cache/https/www.xbrl.org/2020/extensible-enumerations-2.0.xsd +51 -0
  484. arelle/resources/cache/https/www.xbrl.org/2023/calculation-1.1.xsd +27 -0
  485. arelle/resources/cache/https/www.xbrl.org/dtr/type/2020-01-21/types.xsd +812 -0
  486. arelle/resources/cache/https/www.xbrl.org/dtr/type/2022-03-31/types.xsd +847 -0
  487. arelle/resources/cache/https/www.xbrl.org/dtr/type/2024-01-31/types.xsd +897 -0
  488. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-def.xml +68 -0
  489. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-label.xml +84 -0
  490. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators.xsd +67 -0
  491. arelle/resources/libs/Tktable2.11/linux-x86_64/README.txt +149 -0
  492. arelle/resources/libs/Tktable2.11/linux-x86_64/html/tkTable.html +2039 -0
  493. arelle/resources/libs/Tktable2.11/linux-x86_64/libTktable2.11.so +0 -0
  494. arelle/resources/libs/Tktable2.11/linux-x86_64/license.txt +51 -0
  495. arelle/resources/libs/Tktable2.11/linux-x86_64/pkgIndex.tcl +3 -0
  496. arelle/resources/libs/Tktable2.11/linux-x86_64/tkTable.tcl +825 -0
  497. arelle/resources/libs/Tktable2.11/linux-x86_64/tktable.py +674 -0
  498. arelle/resources/libs/Tktable2.11/macos-arm64/README.txt +149 -0
  499. arelle/resources/libs/Tktable2.11/macos-arm64/html/tkTable.html +2039 -0
  500. arelle/resources/libs/Tktable2.11/macos-arm64/libTktable2.11.dylib +0 -0
  501. arelle/resources/libs/Tktable2.11/macos-arm64/license.txt +51 -0
  502. arelle/resources/libs/Tktable2.11/macos-arm64/pkgIndex.tcl +2 -0
  503. arelle/resources/libs/Tktable2.11/macos-arm64/tkTable.tcl +825 -0
  504. arelle/resources/libs/Tktable2.11/macos-arm64/tktable.py +674 -0
  505. arelle/resources/libs/Tktable2.11/macos-x86_64/README.txt +149 -0
  506. arelle/resources/libs/Tktable2.11/macos-x86_64/html/tkTable.html +2039 -0
  507. arelle/resources/libs/Tktable2.11/macos-x86_64/libTktable2.11.dylib +0 -0
  508. arelle/resources/libs/Tktable2.11/macos-x86_64/license.txt +51 -0
  509. arelle/resources/libs/Tktable2.11/macos-x86_64/pkgIndex.tcl +2 -0
  510. arelle/resources/libs/Tktable2.11/macos-x86_64/tkTable.tcl +825 -0
  511. arelle/resources/libs/Tktable2.11/macos-x86_64/tktable.py +674 -0
  512. arelle/resources/libs/Tktable2.11/win-x86_64/Tktable.dll +0 -0
  513. arelle/resources/libs/Tktable2.11/win-x86_64/pkgIndex.tcl +2 -0
  514. arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl +825 -0
  515. arelle/typing.py +9 -4
  516. arelle/utils/Contexts.py +38 -0
  517. arelle/utils/EntryPointDetection.py +139 -0
  518. arelle/utils/Equivalence.py +22 -0
  519. arelle/utils/{validate/PluginValidationData.py → PluginData.py} +5 -2
  520. arelle/utils/PluginHooks.py +256 -5
  521. arelle/utils/Units.py +36 -0
  522. arelle/utils/validate/Decorator.py +5 -3
  523. arelle/utils/validate/DetectScriptsInXhtml.py +99 -0
  524. arelle/utils/validate/ESEFImage.py +283 -0
  525. arelle/utils/validate/Validation.py +9 -1
  526. arelle/utils/validate/ValidationPlugin.py +74 -11
  527. arelle/utils/validate/ValidationUtil.py +55 -0
  528. arelle/webserver/bottle.py +5 -4424
  529. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/METADATA +51 -42
  530. arelle_release-2.37.71.dist-info/RECORD +697 -0
  531. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/WHEEL +1 -1
  532. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info/licenses}/LICENSE.md +1 -4
  533. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/top_level.txt +0 -1
  534. arelle/DialogOpenTaxonomyPackage.py +0 -1
  535. arelle/RenderingResolver.py +0 -624
  536. arelle/examples/.pydevproject +0 -5
  537. arelle/examples/CustomLogger.py +0 -43
  538. arelle/examples/LoadEFMvalidate.py +0 -32
  539. arelle/examples/LoadSavePreLbCsv.py +0 -26
  540. arelle/examples/LoadValidate.cs +0 -31
  541. arelle/examples/LoadValidate.py +0 -36
  542. arelle/examples/LoadValidateCmdLine.java +0 -69
  543. arelle/examples/LoadValidatePostedZip.java +0 -57
  544. arelle/examples/LoadValidateWebService.java +0 -34
  545. arelle/examples/SaveTableToExelle.py +0 -140
  546. arelle/examples/TR3toTR4.py +0 -88
  547. arelle/examples/plugin/bigInstance.py +0 -394
  548. arelle/examples/plugin/cmdWebServerExtension.py +0 -42
  549. arelle/examples/plugin/crashTest.py +0 -38
  550. arelle/examples/plugin/formulaSuiteConverter.py +0 -212
  551. arelle/examples/plugin/functionsCustom.py +0 -59
  552. arelle/examples/plugin/hello_dolly.py +0 -64
  553. arelle/examples/plugin/hello_i18n.pot +0 -26
  554. arelle/examples/plugin/hello_i18n.py +0 -32
  555. arelle/examples/plugin/importTestChild1.py +0 -21
  556. arelle/examples/plugin/importTestChild2.py +0 -22
  557. arelle/examples/plugin/importTestGrandchild1.py +0 -21
  558. arelle/examples/plugin/importTestGrandchild2.py +0 -21
  559. arelle/examples/plugin/importTestImported1.py +0 -23
  560. arelle/examples/plugin/importTestImported11.py +0 -22
  561. arelle/examples/plugin/importTestParent.py +0 -48
  562. arelle/examples/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
  563. arelle/examples/plugin/packagedImportTest/__init__.py +0 -47
  564. arelle/examples/plugin/packagedImportTest/importTestChild1.py +0 -21
  565. arelle/examples/plugin/packagedImportTest/importTestChild2.py +0 -22
  566. arelle/examples/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
  567. arelle/examples/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
  568. arelle/examples/plugin/packagedImportTest/importTestImported1.py +0 -24
  569. arelle/examples/plugin/packagedImportTest/importTestImported11.py +0 -21
  570. arelle/examples/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
  571. arelle/examples/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
  572. arelle/examples/plugin/sakaCalendar.py +0 -215
  573. arelle/examples/plugin/saveInstanceInfoset.py +0 -121
  574. arelle/examples/plugin/streamingExtensions.py +0 -335
  575. arelle/examples/plugin/testcaseCalc11ValidateSetup.py +0 -32
  576. arelle/examples/plugin/testcaseIxExpectedHtmlFixup.py +0 -45
  577. arelle/examples/plugin/updateTableLB.py +0 -242
  578. arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
  579. arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
  580. arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
  581. arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
  582. arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
  583. arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -109
  584. arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -58
  585. arelle/examples/plugin/validateSchemaLxml.py +0 -156
  586. arelle/examples/plugin/validateTableInfoset.py +0 -52
  587. arelle/examples/us-gaap-dei-docType-extraction-frm.xml +0 -90
  588. arelle/examples/us-gaap-dei-ratio-cash-frm.xml +0 -150
  589. arelle/plugin/functionsXmlCreation.py +0 -106
  590. arelle/plugin/instanceInfo.py +0 -306
  591. arelle/plugin/loadFromOIM-2018.py +0 -1282
  592. arelle/plugin/objectmaker.py +0 -285
  593. arelle/plugin/sphinx/FormulaGenerator.py +0 -823
  594. arelle/plugin/sphinx/SphinxContext.py +0 -404
  595. arelle/plugin/sphinx/SphinxEvaluator.py +0 -783
  596. arelle/plugin/sphinx/SphinxMethods.py +0 -1287
  597. arelle/plugin/sphinx/SphinxParser.py +0 -1093
  598. arelle/plugin/sphinx/SphinxValidator.py +0 -163
  599. arelle/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
  600. arelle/plugin/sphinx/__init__.py +0 -285
  601. arelle/plugin/transforms/SEC/__init__.py +0 -308
  602. arelle/plugin/transforms/SEC/conf/README.md +0 -39
  603. arelle/plugin/transforms/SEC/conf/extractTestcase.sh +0 -2
  604. arelle/plugin/transforms/SEC/conf/extractTestcase.xsl +0 -109
  605. arelle/plugin/transforms/SEC/conf/runIxtSecTests.sh +0 -16
  606. arelle/plugin/transforms/SEC/conf/saxon9.jar +0 -0
  607. arelle/plugin/transforms/SEC/conf/testcase.xml +0 -7117
  608. arelle/plugin/transforms/SEC/conf/tests.xml +0 -848
  609. arelle/plugin/transforms/SEC/text2num.py +0 -110
  610. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-boolballotbox.xml +0 -66
  611. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-countrynameen.xml +0 -65
  612. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-datequarterend.xml +0 -66
  613. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durday.xml +0 -61
  614. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durhour.xml +0 -69
  615. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durmonth.xml +0 -71
  616. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durweek.xml +0 -70
  617. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durwordsen.xml +0 -56
  618. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-duryear.xml +0 -64
  619. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-edgarprovcountryen.xml +0 -65
  620. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-entityfilercategoryen.xml +0 -63
  621. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-exchnameen.xml +0 -86
  622. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-numwordsen.xml +0 -55
  623. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-stateprovnameen.xml +0 -64
  624. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-yesnoballotbox.xml +0 -66
  625. arelle/plugin/transforms/SEC/transformationRegistry/registry/transform-registry.xml +0 -314
  626. arelle/plugin/transforms/SEC/transformationRegistry/schema/inlinexbrl-sec-transformation.xsd +0 -418
  627. arelle/plugin/validate/EFM/Consts.py +0 -362
  628. arelle/plugin/validate/EFM/DTS.py +0 -569
  629. arelle/plugin/validate/EFM/Dimensions.py +0 -264
  630. arelle/plugin/validate/EFM/Document.py +0 -206
  631. arelle/plugin/validate/EFM/Filing.py +0 -4383
  632. arelle/plugin/validate/EFM/IsolateSeparateIXDSes.py +0 -19
  633. arelle/plugin/validate/EFM/MessageNumericId.py +0 -142
  634. arelle/plugin/validate/EFM/PreCalAlignment.py +0 -324
  635. arelle/plugin/validate/EFM/Util.py +0 -688
  636. arelle/plugin/validate/EFM/__init__.py +0 -843
  637. arelle/plugin/validate/EFM/config.xml +0 -333
  638. arelle/plugin/validate/EFM/resources/README.md +0 -57
  639. arelle/plugin/validate/EFM/resources/axiswarnings.json +0 -27
  640. arelle/plugin/validate/EFM/resources/cef-deprecated-concepts.json +0 -8
  641. arelle/plugin/validate/EFM/resources/country-deprecated-concepts.json +0 -19
  642. arelle/plugin/validate/EFM/resources/currency-deprecated-concepts.json +0 -7
  643. arelle/plugin/validate/EFM/resources/dei-deprecated-concepts.json +0 -8
  644. arelle/plugin/validate/EFM/resources/dei-validations.json +0 -2884
  645. arelle/plugin/validate/EFM/resources/dqc-us-rules.json +0 -1389
  646. arelle/plugin/validate/EFM/resources/ecd-deprecated-concepts.json +0 -1
  647. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-16-4.xml +0 -115
  648. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-0-4.xml +0 -300
  649. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-1.xml +0 -304
  650. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-2.xml +0 -290
  651. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-3-1.xml +0 -294
  652. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.1.xml +0 -549
  653. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.2.xml +0 -506
  654. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.3.xml +0 -496
  655. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-1.xml +0 -662
  656. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-2.xml +0 -3761
  657. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-3.xml +0 -3577
  658. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-1.xml +0 -4020
  659. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-2.xml +0 -3320
  660. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-3.xml +0 -2998
  661. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2012.xml +0 -957
  662. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2013.xml +0 -982
  663. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2014.xml +0 -1001
  664. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2015.xml +0 -1076
  665. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2016.xml +0 -120
  666. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-1.xml +0 -3329
  667. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-2.xml +0 -1230
  668. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-3.xml +0 -1113
  669. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-4.xml +0 -1321
  670. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1-preview.xml +0 -1721
  671. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1.xml +0 -1841
  672. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2-2.xml +0 -1450
  673. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2.xml +0 -1429
  674. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-4.xml +0 -1527
  675. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1-1.xml +0 -2049
  676. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1.xml +0 -2065
  677. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-2.xml +0 -1674
  678. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-3.xml +0 -1715
  679. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-all-years.xml +0 -10671
  680. arelle/plugin/validate/EFM/resources/edgartaxonomies/erxl.xsd +0 -69
  681. arelle/plugin/validate/EFM/resources/edgartaxonomies/extendedtaxonomies-all-years.xml +0 -18
  682. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrs-taxonomies.xml +0 -3126
  683. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrstaxonomies-all-years.xml +0 -22
  684. arelle/plugin/validate/EFM/resources/ex26-validations.json +0 -255
  685. arelle/plugin/validate/EFM/resources/exch-deprecated-concepts.json +0 -163
  686. arelle/plugin/validate/EFM/resources/ifrs-full-deprecated-concepts.json +0 -204
  687. arelle/plugin/validate/EFM/resources/invest-deprecated-concepts.json +0 -99
  688. arelle/plugin/validate/EFM/resources/ixbrl-transform-registries.json +0 -16
  689. arelle/plugin/validate/EFM/resources/naics-deprecated-concepts.json +0 -295
  690. arelle/plugin/validate/EFM/resources/oef-deprecated-concepts.json +0 -59
  691. arelle/plugin/validate/EFM/resources/other-standard-taxonomies.json +0 -12
  692. arelle/plugin/validate/EFM/resources/rr-deprecated-concepts.json +0 -14
  693. arelle/plugin/validate/EFM/resources/rxp-deprecated-concepts.json +0 -1
  694. arelle/plugin/validate/EFM/resources/shr-deprecated-concepts.json +0 -1
  695. arelle/plugin/validate/EFM/resources/sic-deprecated-concepts.json +0 -1
  696. arelle/plugin/validate/EFM/resources/signwarnings.json +0 -112
  697. arelle/plugin/validate/EFM/resources/srt-deprecated-concepts.json +0 -1
  698. arelle/plugin/validate/EFM/resources/stpr-deprecated-concepts.json +0 -1
  699. arelle/plugin/validate/EFM/resources/taxonomy-compatibility.json +0 -79
  700. arelle/plugin/validate/EFM/resources/us-gaap-deprecated-concepts.json +0 -2886
  701. arelle/plugin/validate/EFM/resources/us-gaap-rels-2020.json +0 -29068
  702. arelle/plugin/validate/EFM/resources/us-gaap-rels-2021.json +0 -29598
  703. arelle/plugin/validate/EFM/resources/us-gaap-rels-2022.json +0 -29141
  704. arelle/plugin/validate/EFM/resources/us-gaap-rels-2023.json +0 -29400
  705. arelle/plugin/validate/EFM/resources/vip-deprecated-concepts.json +0 -1
  706. arelle/plugin/validate/EFM/tools/CheckTxmyRefs.py +0 -180
  707. arelle/plugin/validate/EFM-htm/Const.py +0 -205
  708. arelle/plugin/validate/EFM-htm/__init__.py +0 -217
  709. arelle/plugin/validate/EFM-htm/config.xml +0 -17
  710. arelle/plugin/validate/EFM-htm/resources/efm-htm.dtd +0 -664
  711. arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -199
  712. arelle/plugin/validate/ESEF_2022/__init__.py +0 -47
  713. arelle/plugin/validate/GFM/__init__.py +0 -59
  714. arelle/plugin/validate/GFM/config.xml +0 -82
  715. arelle/plugin/validate/SBRnl/CustomLoader.py +0 -19
  716. arelle/plugin/validate/SBRnl/DTS.py +0 -305
  717. arelle/plugin/validate/SBRnl/Dimensions.py +0 -357
  718. arelle/plugin/validate/SBRnl/Document.py +0 -799
  719. arelle/plugin/validate/SBRnl/Filing.py +0 -467
  720. arelle/plugin/validate/SBRnl/__init__.py +0 -75
  721. arelle/plugin/validate/SBRnl/config.xml +0 -26
  722. arelle/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
  723. arelle/plugin/validate/USBestPractices.py +0 -570
  724. arelle/plugin/validate/USCorpAction.py +0 -557
  725. arelle/plugin/validate/USSecTagging.py +0 -337
  726. arelle/plugin/validate/XDC/__init__.py +0 -77
  727. arelle/plugin/validate/XDC/config.xml +0 -20
  728. arelle/plugin/validate/XFsyntax/__init__.py +0 -64
  729. arelle/plugin/validate/XFsyntax/xf.py +0 -2227
  730. arelle/plugin/validate/__init__.py +0 -20
  731. arelle/plugin/validate/calc2.py +0 -536
  732. arelle/plugin/validateSBRnl.py +0 -530
  733. arelle/scripts-macOS/startWebServer.command +0 -3
  734. arelle/scripts-unix/startWebServer.sh +0 -1
  735. arelle/scripts-windows/startWebServer.bat +0 -5
  736. arelle_release-2.17.1.dist-info/RECORD +0 -676
  737. tests/__init__.py +0 -0
  738. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/ArelleGUITest.csproj +0 -30
  739. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs +0 -381
  740. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs +0 -1
  741. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest.sln +0 -31
  742. tests/integration_tests/ui_tests/resources/workiva.zip +0 -0
  743. tests/integration_tests/validation/README.md +0 -50
  744. tests/integration_tests/validation/conformance_suite_config.py +0 -59
  745. tests/integration_tests/validation/conformance_suite_configs.py +0 -63
  746. tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +0 -261
  747. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py +0 -85
  748. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2022.py +0 -90
  749. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2021.py +0 -15
  750. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2022.py +0 -15
  751. tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py +0 -13
  752. tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py +0 -13
  753. tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py +0 -13
  754. tests/integration_tests/validation/conformance_suite_configurations/xbrl_2_1.py +0 -34
  755. tests/integration_tests/validation/conformance_suite_configurations/xbrl_calculations_1_1.py +0 -40
  756. tests/integration_tests/validation/conformance_suite_configurations/xbrl_dimensions_1_0.py +0 -28
  757. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_1_0.py +0 -10
  758. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py +0 -10
  759. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py +0 -9
  760. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py +0 -9
  761. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +0 -14
  762. tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py +0 -22
  763. tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py +0 -11
  764. tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py +0 -19
  765. tests/integration_tests/validation/conformance_suite_configurations/xbrl_table_linkbase_1_0.py +0 -296
  766. tests/integration_tests/validation/conformance_suite_configurations/xbrl_taxonomy_packages_1_0.py +0 -13
  767. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_3.py +0 -13
  768. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_4.py +0 -13
  769. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_5.py +0 -13
  770. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_malformed_1_0.py +0 -31
  771. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_registry_1_0.py +0 -22
  772. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_structure_1_0.py +0 -18
  773. tests/integration_tests/validation/conftest.py +0 -24
  774. tests/integration_tests/validation/discover_tests.py +0 -22
  775. tests/integration_tests/validation/download_conformance_suites.py +0 -47
  776. tests/integration_tests/validation/run_conformance_suites.py +0 -175
  777. tests/integration_tests/validation/test_conformance_suites.py +0 -14
  778. tests/integration_tests/validation/validation_util.py +0 -271
  779. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl +0 -63
  780. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-testcase.xml +0 -22
  781. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-missing.xbrl +0 -53
  782. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-multiple.xbrl +0 -60
  783. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-testcase.xml +0 -33
  784. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-invalid.xbrl +0 -57
  785. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-testcase.xml +0 -22
  786. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-invalid.xbrl +0 -58
  787. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-testcase.xml +0 -22
  788. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-invalid.xbrl +0 -63
  789. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-testcase.xml +0 -22
  790. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-missing.xbrl +0 -61
  791. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-testcase.xml +0 -22
  792. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-invalid-date.xbrl +0 -89
  793. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-testcase.xml +0 -22
  794. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  795. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-testcase.xml +0 -22
  796. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  797. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-missing-lang.xbrl +0 -55
  798. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-testcase.xml +0 -33
  799. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-entrypoint.xsd +0 -6
  800. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  801. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-testcase.xml +0 -22
  802. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  803. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-testcase.xml +0 -22
  804. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  805. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-testcase.xml +0 -22
  806. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-file.xbrl +0 -2
  807. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-zip.zip +0 -0
  808. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-testcase.xml +0 -33
  809. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  810. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml +0 -22
  811. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  812. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml +0 -22
  813. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06-testcase.xml +0 -22
  814. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06.invalid.xbrl +0 -2
  815. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-file.xbrl +0 -8
  816. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-zip.zip +0 -0
  817. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-testcase.xml +0 -33
  818. tests/resources/conformance_suites/nl_nt16/index.xml +0 -20
  819. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-invalid-period.xbrl +0 -63
  820. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-testcase.xml +0 -22
  821. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-missing.xbrl +0 -53
  822. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-multiple.xbrl +0 -60
  823. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-testcase.xml +0 -33
  824. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-invalid.xbrl +0 -57
  825. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-testcase.xml +0 -22
  826. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-invalid.xbrl +0 -58
  827. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-testcase.xml +0 -22
  828. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-invalid.xbrl +0 -63
  829. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-testcase.xml +0 -22
  830. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-missing.xbrl +0 -61
  831. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-testcase.xml +0 -22
  832. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-invalid-date.xbrl +0 -89
  833. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-testcase.xml +0 -22
  834. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  835. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-testcase.xml +0 -22
  836. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  837. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-missing-lang.xbrl +0 -55
  838. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-testcase.xml +0 -33
  839. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-entrypoint.xsd +0 -6
  840. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  841. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-testcase.xml +0 -22
  842. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  843. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-testcase.xml +0 -22
  844. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  845. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-testcase.xml +0 -22
  846. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-file.xbrl +0 -2
  847. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-zip.zip +0 -0
  848. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-testcase.xml +0 -33
  849. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  850. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml +0 -22
  851. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  852. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcases.xml +0 -22
  853. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06-testcase.xml +0 -22
  854. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06.invalid.xbrl +0 -2
  855. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-file.xbrl +0 -8
  856. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-zip.zip +0 -0
  857. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-testcase.xml +0 -33
  858. tests/resources/conformance_suites/nl_nt17/index.xml +0 -20
  859. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  860. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml +0 -22
  861. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  862. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcases.xml +0 -22
  863. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06-testcase.xml +0 -22
  864. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06.invalid.xbrl +0 -2
  865. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-file.xbrl +0 -2
  866. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-zip.zip +0 -0
  867. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-testcase.xml +0 -33
  868. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-file.xbrl +0 -8
  869. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-zip.zip +0 -0
  870. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-testcase.xml +0 -33
  871. tests/resources/conformance_suites/nl_nt18/index.xml +0 -8
  872. tests/unit_tests/arelle/conftest.py +0 -16
  873. tests/unit_tests/arelle/formula/test_fact_aspects_cache.py +0 -170
  874. tests/unit_tests/arelle/plugin/test_loadfromoim.py +0 -40
  875. tests/unit_tests/arelle/plugin/test_plugin_imports.py +0 -27
  876. tests/unit_tests/arelle/test_betafeatures.py +0 -81
  877. tests/unit_tests/arelle/test_cntlr.py +0 -28
  878. tests/unit_tests/arelle/test_import.py +0 -40
  879. tests/unit_tests/arelle/test_locale.py +0 -73
  880. tests/unit_tests/arelle/test_modelmanager.py +0 -15
  881. tests/unit_tests/arelle/test_packagemanager.py +0 -65
  882. tests/unit_tests/arelle/test_pluginmanager.py +0 -176
  883. tests/unit_tests/arelle/test_qname.py +0 -140
  884. tests/unit_tests/arelle/test_runtimeoptions.py +0 -56
  885. tests/unit_tests/arelle/test_system_info.py +0 -26
  886. tests/unit_tests/arelle/test_updater.py +0 -507
  887. tests/unit_tests/arelle/test_urlutil.py +0 -49
  888. tests/unit_tests/arelle/test_version.py +0 -46
  889. tests/unit_tests/arelle/utils/validate/test_decorator.py +0 -59
  890. /arelle/{examples/plugin/validate/XYZ → plugin/validate/EDINET}/rules/__init__.py +0 -0
  891. /arelle/plugin/validate/{HMRC → UK}/consistencyChecksByName.json +0 -0
  892. /arelle/plugin/validate/{HMRC → UK}/hmrc-taxonomies.xml +0 -0
  893. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/entry_points.txt +0 -0
@@ -1,1287 +0,0 @@
1
- '''
2
- sphinxMethods processes the Sphinx language in the context of an XBRL DTS and instance.
3
-
4
- See COPYRIGHT.md for copyright information.
5
-
6
- Sphinx is a Rules Language for XBRL described by a Sphinx 2 Primer
7
- (c) Copyright 2012 CoreFiling, Oxford UK.
8
- Sphinx copyright applies to the Sphinx language, not to this software.
9
- Workiva, Inc. conveys neither rights nor license for the Sphinx language.
10
- '''
11
-
12
- from math import exp, fabs, isinf, isnan, log, log10, pow, sqrt
13
- import datetime
14
- from arelle.ModelDtsObject import ModelConcept, ModelRelationship
15
- from arelle.ModelDocument import Type
16
- from arelle.ModelInstanceObject import ModelFact
17
- from arelle.ModelRelationshipSet import ModelRelationshipSet
18
- from arelle.ModelValue import QName, dayTimeDuration, DayTimeDuration
19
- from arelle.ModelXbrl import ModelXbrl
20
- from arelle.ValidateXbrlCalcs import inferredDecimals, inferredPrecision, roundValue
21
- from arelle import XbrlConst, XmlUtil
22
- from numbers import Number
23
- evaluate = None # initialized at end
24
- SphinxException = None
25
- UNBOUND = None
26
- NONE = None
27
-
28
-
29
- def moduleInit():
30
- global evaluate, SphinxException, UNBOUND, NONE
31
- from .SphinxEvaluator import evaluate, SphinxException, UNBOUND, NONE
32
-
33
- class Balance(): # fake class for balance type
34
- pass
35
-
36
- class PeriodType(): # fake class for period type
37
- pass
38
-
39
- class Period():
40
- def __init__(self, start=None, end=None):
41
- self.start = start
42
- self.end = end
43
- @property
44
- def isForever(self):
45
- return self.start is None and self.end is None
46
- @property
47
- def isInstant(self):
48
- return self.start is None and self.end is not None
49
- @property
50
- def isStartEnd(self):
51
- return self.start is not None and self.end is not None
52
- def __repr__(self):
53
- return "({0},{1})".format(self.start, self.end)
54
- def __eq__(self, other):
55
- if isinstance(other, Period):
56
- return self.start == other.start and self.end == other.end
57
- return False
58
- def __ne__(self, other):
59
- if isinstance(other, Period):
60
- return self.start != other.start or self.end != other.end
61
- return False
62
- def __lt__(self, other):
63
- if not isinstance(other, Period):
64
- return False
65
- if self.isInstant:
66
- if other.isInstant:
67
- return self.end < other.end
68
- elif other.isStartEnd:
69
- return self.end <= other.start
70
- elif self.isStartEnd:
71
- if other.isInstant:
72
- return self.end < other.end
73
- elif other.isStartEnd:
74
- return self.end <= other.start
75
- return False
76
- def __le__(self, other):
77
- if not isinstance(other, Period):
78
- return False
79
- if self.isInstant:
80
- if other.isInstant:
81
- return self.end <= other.end
82
- elif other.isStartEnd:
83
- return self.end <= other.start or self == other
84
- elif self.isStartEnd:
85
- if other.isInstant:
86
- return self.end <= other.end
87
- elif other.isStartEnd:
88
- return self.end <= other.start or self == other
89
- return False
90
- def __gt__(self, other):
91
- if not isinstance(other, Period):
92
- return False
93
- if self.isInstant:
94
- if other.isInstant:
95
- return self.end > other.end
96
- elif other.isStartEnd:
97
- return self.start > other.end
98
- elif self.isStartEnd:
99
- if other.isInstant:
100
- return self.end > other.end
101
- elif other.isStartEnd:
102
- return self.start > other.end
103
- return False
104
- def __ge__(self, other):
105
- if not isinstance(other, Period):
106
- return False
107
- if self.isInstant:
108
- if other.isInstant:
109
- return self.end >= other.end
110
- elif other.isStartEnd:
111
- return self.start >= other.start or self == other
112
- elif self.isStartEnd:
113
- if other.isInstant:
114
- return self.end >= other.end
115
- elif other.isStartEnd:
116
- return self.start >= other.start or self == other
117
- return False
118
-
119
-
120
- def hasArg(node, sphinxContext, args, i):
121
- if i >= len(args):
122
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
123
- _("Function %(name)s requires %(required)s parameters but %(provided)s are provided"),
124
- name=node.name, required=i, provided=len(node.args))
125
-
126
- def numericArg(node, sphinxContext, args, i):
127
- hasArg(node, sphinxContext, args, i)
128
- arg = args[i]
129
- if isinstance(arg, Number):
130
- return arg
131
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
132
- _("Function %(name)s numeric parameter %(num)s is not a number: %(value)s"),
133
- name=node.name, num=i, value=arg)
134
-
135
- def numericArgs(node, sphinxContext, args, expectedArgsLen):
136
- if expectedArgsLen != len(args):
137
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
138
- _("Function %(name)s requires %(required)s parameters but %(provided)s are provided"),
139
- name=node.name, required=expectedArgsLen, provided=len(args))
140
- numArgs = []
141
- for i, arg in enumerate(args):
142
- if i >= expectedArgsLen:
143
- break
144
- value = evaluate(arg, sphinxContext, args, value=True)
145
- if not isinstance(value, Number):
146
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
147
- _("Function %(name)s numeric parameters but %(num)s is not numeric: %(value)s"),
148
- num=i, value=value)
149
- value = 0
150
- numArgs.append(value)
151
- for i in range(i, expectedArgsLen):
152
- numArgs.append(0)
153
- return numArgs
154
-
155
- def strArg(node, sphinxContext, args, i):
156
- hasArg(node, sphinxContext, args, i)
157
- arg = args[i]
158
- if isinstance(arg, str):
159
- return arg
160
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
161
- _("Function %(name)s string parameter %(num)s is not a string: %(value)s"),
162
- name=node.name, num=i, value=arg)
163
-
164
- def strArgs(node, sphinxContext, args, expectedArgsLen):
165
- if expectedArgsLen != len(args):
166
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
167
- _("Function %(name)s requires %(required)s parameters but %(provided)s are provided"),
168
- name=node.name, required=expectedArgsLen, provided=len(args))
169
- strArgs = []
170
- for i, arg in enumerate(args):
171
- if i >= expectedArgsLen:
172
- break
173
- value = evaluate(arg, sphinxContext, value=True)
174
- if not isinstance(value, str):
175
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
176
- _("Function %(name)s string parameters but %(num)s is not numeric: %(value)s"),
177
- name=node.name, num=i, value=value)
178
- value = 0
179
- strArgs.append(value)
180
- for i in range(i, expectedArgsLen):
181
- strArgs.append(0)
182
- return strArgs
183
-
184
- def factArg(node, sphinxContext, args, i):
185
- hasArg(node, sphinxContext, args, i)
186
- fact = evaluate(args[i], sphinxContext, value=False, hsBoundFact=True)
187
- if isinstance(fact, ModelFact):
188
- return fact
189
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
190
- _("Function %(name)s fact parameter %(num)s is not a fact: %(value)s"),
191
- name=node.name,
192
- num=i, value=fact)
193
-
194
- def conceptOrFactArg(node, sphinxContext, args, i):
195
- hasArg(node, sphinxContext, args, i)
196
- conceptOrFact = evaluate(args[i], sphinxContext, value=False)
197
- if isinstance(conceptOrFact, (ModelConcept,ModelFact)):
198
- return conceptOrFact
199
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
200
- _("Function %(name)s parameter %(num)s is not a concept or fact: %(value)s"),
201
- name=node.name,
202
- num=i, value=conceptOrFact)
203
-
204
- def conceptArg(node, sphinxContext, args, i):
205
- hasArg(node, sphinxContext, args, i)
206
- concept = evaluate(args[i], sphinxContext, value=False)
207
- if isinstance(concept, ModelConcept):
208
- return concept
209
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
210
- _("Function %(name)s fact parameter %(num)s is not a concept: %(value)s"),
211
- name=node.name,
212
- num=i, value=concept)
213
-
214
- def dtsArg(node, sphinxContext, args):
215
- hasArg(node, sphinxContext, args, 0)
216
- dts = evaluate(args[0], sphinxContext, value=False)
217
- if isinstance(dts, ModelXbrl):
218
- return dts
219
- raise SphinxException(node, "sphinx.methodArgumentsMismatch",
220
- _("Method %(name)s taxonomy parameter is not a DTS: %(value)s"),
221
- name=node.name, value=dts)
222
-
223
- def networkArg(node, sphinxContext, args):
224
- hasArg(node, sphinxContext, args, 0)
225
- network = evaluate(args[0], sphinxContext, value=False)
226
- if isinstance(network, ModelRelationshipSet):
227
- return network
228
- raise SphinxException(node, "sphinx.methodArgumentsMismatch",
229
- _("Method %(name)s taxonomy parameter is not a network: %(value)s"),
230
- name=node.name, value=network)
231
-
232
- def networkConceptArg(node, sphinxContext, args):
233
- hasArg(node, sphinxContext, args, 1)
234
- arg = args[1]
235
- if isinstance(arg, QName):
236
- arg = network.modelXbrl.qnameConcepts.get(arg, NONE)
237
- if isinstance(arg, ModelConcept):
238
- return arg
239
- raise SphinxException(node, "sphinx.methodArgumentsMismatch",
240
- _("Method %(name)s network concept parameter is not a concept: %(value)s"),
241
- name=node.name, value=arg)
242
-
243
- def relationshipArg(node, sphinxContext, args):
244
- hasArg(node, sphinxContext, args, 0)
245
- rel = evaluate(args[0], sphinxContext, value=False)
246
- if isinstance(rel, ModelRelationship):
247
- return rel
248
- raise SphinxException(node, "sphinx.methodArgumentsMismatch",
249
- _("Method %(name)s taxonomy parameter is not a relationship: %(value)s"),
250
- name=node.name, value=rel)
251
-
252
- # numeric functions
253
- NaN = float("NaN")
254
- POSINF = float("INF")
255
- NEGINF = float("-INF")
256
-
257
- def _addTimePeriod(node, sphinxContext, args, subtract=False):
258
- hasArg(node, sphinxContext, args, 0)
259
- arg = args[0]
260
- hasArg(node, sphinxContext, args, 1)
261
- duration = args[1]
262
- if isinstance(arg, Period) and arg.isInstant and isinstance(duration, DayTimeDuration):
263
- try:
264
- return Period(None, (arg.end - duration) if subtract else (arg.end + duration))
265
- except ValueError:
266
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
267
- _("Function %(name)s argument is not an day time duration %(value)s"),
268
- name=node.name, value=duration)
269
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
270
- _("Function %(name)s argument is not an instant period %(value)s"),
271
- name=node.name, value=arg)
272
-
273
- def _abs(node, sphinxContext, args):
274
- args = numericArgs(node, sphinxContext, args, 1)
275
- return fabs(args[0])
276
-
277
- def _balance(node, sphinxContext, args):
278
- if len(node.args) == 1 and node.args[0] is None:
279
- return Balance()
280
- fact = factArg(node, sphinxContext, args, 0)
281
- return fact.balance
282
-
283
- def _booleanFunction(node, sphinxContext, args):
284
- hasArg(node, sphinxContext, args, 0)
285
- arg = args[0]
286
- # >>>> arg can be XML, what does this mean???
287
- if arg == "true":
288
- return True
289
- if args[0] == "false":
290
- return False
291
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
292
- _("Function %(name)s fact parameter %(num)s is not \"true\" or \"false\": %(value)s"),
293
- name=node.name,
294
- num=0, value=arg)
295
-
296
- def _concept(node, sphinxContext, args):
297
- hasArg(node, sphinxContext, args, 0)
298
- if isinstance(args[0], ModelXbrl):
299
- dts = dtsArg(node, sphinxContext, args)
300
- hasArg(node, sphinxContext, args, 1)
301
- return dts.qnameConcepts.get(args[1], UNBOUND)
302
- fact = factArg(node, sphinxContext, args, 0)
303
- return fact.concept
304
-
305
-
306
- def _concepts(node, sphinxContext, args):
307
- hasArg(node, sphinxContext, args, 0)
308
- if isinstance(args[0], ModelXbrl): # taxonomy concepts
309
- dts = dtsArg(node, sphinxContext, args)
310
- return set(concept
311
- for concept in dts.qnameConcepts.values()
312
- if concept.isItem or concept.isTuple)
313
- # otherwise must be network concepts
314
- network = networkArg(node, sphinxContext, args)
315
- return network.toModelObjects.keys() | network.fromModelObjects.keys()
316
-
317
-
318
- def _contains(node, sphinxContext, args):
319
- hasArg(node, sphinxContext, args, 1)
320
- collection = args[0]
321
- arg = args[1]
322
- # period contains
323
- if isinstance(arg, (Period, datetime.datetime)) and isinstance(collection, Period):
324
- if collection.isForever:
325
- return True
326
- if collection.isDuration:
327
- if isinstance(arg, datetime):
328
- return collection.start <= arg <= collection.end
329
- elif arg.isInstant:
330
- return collection.start <= arg.end <= collection.end
331
- elif arg.isDuration:
332
- return collection.start <= arg.start <= collection.end and collection.start <= arg.end <= collection.end
333
- if collection.isInstant:
334
- if isinstance(arg, datetime):
335
- return collection.end == arg
336
- if arg.isInstant:
337
- return collection.end == arg.end
338
- return False
339
- # non-period contains
340
- if isinstance(collection, (tuple, list, set, str)):
341
- return arg in collection
342
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
343
- _("Function %(name)s argument is not a collection %(value)s"),
344
- name=node.name, value=collection)
345
-
346
- def _credit(node, sphinxContext, args):
347
- hasArg(node, sphinxContext, args, 0)
348
- if isinstance(args[0], Balance):
349
- return "credit"
350
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
351
- _("Function %(name)s argument is not a ::balance %(value)s"),
352
- name=node.name, value=args[0])
353
-
354
- def _days(node, sphinxContext, args):
355
- hasArg(node, sphinxContext, args, 0)
356
- arg = args[0]
357
- if isinstance(arg, Period):
358
- if arg.isInstant:
359
- return 0
360
- elif arg.isForever:
361
- return float("inf")
362
- return (arg.end - arg.start).days
363
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
364
- _("Function %(name)s argument is not a period %(value)s"),
365
- name=node.name, value=arg)
366
-
367
- def _debit(node, sphinxContext, args):
368
- hasArg(node, sphinxContext, args, 0)
369
- if isinstance(args[0], Balance):
370
- return "debit"
371
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
372
- _("Function %(name)s argument is not a ::balance %(value)s"),
373
- name=node.name, value=args[0])
374
-
375
- def _decimals(node, sphinxContext, args):
376
- fact = factArg(node, sphinxContext, args, 0)
377
- return inferredDecimals(fact)
378
-
379
- def _dimension(node, sphinxContext, args):
380
- fact = factArg(node, sphinxContext, args, 0)
381
- hasArg(node, sphinxContext, args, 1)
382
- dimQName = args[1]
383
- context = fact.context
384
- if context is not None and dimQName in context.qnameDims:
385
- modelDimension = context.qnameDims[dimQName]
386
- if modelDimension.isExplicit:
387
- return modelDimension.memberQname
388
- else:
389
- return modelDimension.typedMember
390
- return NONE
391
-
392
- def _dtsDocumentLocations(node, sphinxContext, args):
393
- dts = dtsArg(node, sphinxContext, args)
394
- return set(modelDocument.uri
395
- for modelDocument in dts.urlDocs.values()
396
- if modelDocument.type in (Type.SCHEMA, Type.LINKBASE))
397
-
398
- def _duration(node, sphinxContext, args):
399
- hasArg(node, sphinxContext, args, 0)
400
- if isinstance(args[0], PeriodType):
401
- return "duration"
402
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
403
- _("Function %(name)s argument is not a ::period-type %(value)s"),
404
- name=node.name, value=args[0])
405
-
406
- def _durationFunction(node, sphinxContext, args):
407
- hasArg(node, sphinxContext, args, 1)
408
- startArg = args[0]
409
- if isinstance(startArg, str):
410
- startDateTime = Period(None, XmlUtil.datetimeValue(startArg, none=NONE))
411
- elif isinstance(startArg, datetime.datetime):
412
- startDateTime = startArg
413
- elif isinstance(arg, datetime.date):
414
- startDateTime = datetime.date(startArg.year, startArg.month, startArg.day)
415
- endArg = args[1]
416
- if isinstance(endArg, str):
417
- endDateTime = Period(None, XmlUtil.datetimeValue(startArg, addOneDay=True, none=NONE))
418
- elif isinstance(endArg, datetime.datetime):
419
- endDateTime = endArg
420
- elif isinstance(endArg, datetime.date):
421
- endDateTime = datetime.date(endArg.year, endArg.month, endArg.day) + datetime.timedelta(1)
422
- if (startDateTime and endDateTime):
423
- return Period(startDateTime, endDateTime)
424
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
425
- _("Function %(name)s requires two argument that are a date or datetime string or value: %(start)s and %(end)s", ),
426
- name=node.name, start=startArg, end=endArg)
427
-
428
- def _endDate(node, sphinxContext, args):
429
- hasArg(node, sphinxContext, args, 0)
430
- arg = args[0]
431
- if isinstance(arg, Period):
432
- if arg.isForever:
433
- return UNBOUND
434
- return arg.end
435
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
436
- _("Function %(name)s argument is not a period %(value)s"),
437
- name=node.name, value=arg)
438
-
439
- def _endsWith(node, sphinxContext, args):
440
- value = strArgs(node, sphinxContext, args, 0)
441
- suffix = strArgs(node, sphinxContext, args, 1)
442
- return value.endswith(suffix)
443
-
444
- def _entityMethod(node, sphinxContext, args):
445
- fact = factArg(node, sphinxContext, args, 0)
446
- if fact.context is not None:
447
- return fact.context.entityIdentifier
448
- else:
449
- return UNBOUND
450
-
451
- def _entityFunction(node, sphinxContext, args):
452
- args = strArgs(node, sphinxContext, args, 2)
453
- return (args[0], args[1])
454
-
455
- def _exp(node, sphinxContext, args):
456
- args = numericArgs(node, sphinxContext, args, 1)
457
- x = args[0]
458
- if isnan(x): return NaN
459
- if x == POSINF: return POSINF
460
- if x == NEGINF: return 0
461
- return exp(x)
462
-
463
- def _foreverFunction(node, sphinxContext, args):
464
- return Period(None, None)
465
-
466
- def _identifier(node, sphinxContext, args):
467
- hasArg(node, sphinxContext, args, 0)
468
- arg = args[0]
469
- if isinstance(arg, tuple) and len(arg) == 2:
470
- return arg[1]
471
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
472
- _("Function %(name)s argument is not an entity identifier %(value)s"),
473
- name=node.name, value=arg)
474
-
475
- def _hasDecimals(node, sphinxContext, args):
476
- fact = factArg(node, sphinxContext, args, 0)
477
- return fact.decimals is not None
478
-
479
- def _indexOf(node, sphinxContext, args):
480
- value = strArgs(node, sphinxContext, args, 0)
481
- arg = strArgs(node, sphinxContext, args, 1)
482
- return value.find(arg)
483
-
484
- def _hasPrecision(node, sphinxContext, args):
485
- fact = factArg(node, sphinxContext, args, 0)
486
- return fact.precision is not None
487
-
488
- def _instant(node, sphinxContext, args):
489
- hasArg(node, sphinxContext, args, 0)
490
- if isinstance(args[0], PeriodType):
491
- return "instant"
492
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
493
- _("Function %(name)s argument is not a ::period-type %(value)s"),
494
- name=node.name, value=args[0])
495
-
496
- def _instantFunction(node, sphinxContext, args):
497
- hasArg(node, sphinxContext, args, 0)
498
- arg = args[0]
499
- if isinstance(arg, str):
500
- instDateTime = Period(None, XmlUtil.datetimeValue(arg, addOneDay=True, none=NONE))
501
- if instDateTime: # none if date is not valid
502
- return instDateTime
503
- elif isinstance(arg, datetime.datetime):
504
- return Period(None, arg)
505
- elif isinstance(arg, datetime.date): # must be turned into midnight of the day reported
506
- return Period(None, datetime.date(arg.year, arg.month, arg.day) + datetime.timedelta(1))
507
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
508
- _("Function %(name)s argument is not a date or datetime string or value %(value)s"),
509
- name=node.name, value=arg)
510
-
511
- def _isForever(node, sphinxContext, args):
512
- hasArg(node, sphinxContext, args, 0)
513
- arg = args[0]
514
- if isinstance(arg, Period):
515
- return arg.isForever
516
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
517
- _("Function %(name)s argument is not a period %(value)s"),
518
- name=node.name, value=arg)
519
-
520
- def _isMonetary(node, sphinxContext, args):
521
- conceptOrFact = conceptOrFactArg(node, sphinxContext, args, 0)
522
- if isinstance(conceptOrFact, ModelFact):
523
- return conceptOrFact.concept.isMonetary
524
- else:
525
- return conceptOrFact.isMonetary
526
-
527
- def _isNumeric(node, sphinxContext, args):
528
- conceptOrFact = conceptOrFactArg(node, sphinxContext, args, 0)
529
- return conceptOrFact.isNumeric
530
-
531
- def _lastIndexOf(node, sphinxContext, args):
532
- value = strArgs(node, sphinxContext, args, 0)
533
- arg = strArgs(node, sphinxContext, args, 1)
534
- return value.rfind(arg)
535
-
536
- def _length(node, sphinxContext, args):
537
- value = strArgs(node, sphinxContext, args, 0)
538
- return len(value)
539
-
540
- def _lowerCase(node, sphinxContext, args):
541
- value = strArgs(node, sphinxContext, args, 0)
542
- return value.lower()
543
-
544
- def _ln(node, sphinxContext, args):
545
- args = numericArgs(node, sphinxContext, args, 1)
546
- x = args[0]
547
- if x < 0 or isnan(x): return NaN
548
- if x == POSINF: return POSINF
549
- if x == 0: return NEGINF
550
- return log(x)
551
-
552
- def _localPart(node, sphinxContext, args):
553
- hasArg(node, sphinxContext, args, 0)
554
- qn = args[0]
555
- if isinstance(qn, QName):
556
- return qn.localName
557
- elif isinstance(qn, str):
558
- return qn
559
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
560
- _("Function %(name)s argument is not a QName %(value)s"),
561
- name=node.name, value=args[0])
562
-
563
- def _log(node, sphinxContext, args):
564
- args = numericArgs(node, sphinxContext, args, 2)
565
- x = args[0]
566
- base = args[1]
567
- if x < 0 or isnan(x): return NaN
568
- if x == POSINF: return POSINF
569
- if x == 0: return POSINF
570
- if base == 0 or base == POSINF: return 0
571
- if base == 10: return log10(x)
572
- return log(x, base)
573
-
574
- def _log10(node, sphinxContext, args):
575
- args = numericArgs(node, sphinxContext, args, 1)
576
- x = args[0]
577
- base = args[1]
578
- if x < 0 or isnan(x): return NaN
579
- if x == POSINF: return POSINF
580
- if x == 0: return POSINF
581
- return log10(x)
582
-
583
- def _name(node, sphinxContext, args):
584
- concept = conceptArg(node, sphinxContext, args, 0)
585
- return concept.qname
586
-
587
- def _numberFunction(node, sphinxContext, args):
588
- hasArg(node, sphinxContext, args, 0)
589
- arg = args[0]
590
- try:
591
- return float(arg)
592
- except Exception as ex:
593
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
594
- _("Function %(name)s argument: %(value)s, error converting to number: %(error)s"),
595
- name=node.name, value=arg, error=str(ex))
596
- def _period(node, sphinxContext, args):
597
- fact = factArg(node, sphinxContext, args, 0)
598
- context = fact.context
599
- if context is not None:
600
- if context.isForeverPeriod:
601
- return Period()
602
- if context.isStartEndPeriod:
603
- return Period(context.startDatetime, context.endDatetime)
604
- return Period(None, context.instantDatetime)
605
- return NONE
606
-
607
- def _periodType(node, sphinxContext, args):
608
- if len(node.args) == 1 and node.args[0] is None:
609
- return PeriodType()
610
- hasArg(node, sphinxContext, args, 0)
611
- if isinstance(args[0], Period):
612
- arg = args[0]
613
- if arg.isForever:
614
- return "forever"
615
- elif arg.isStartEnd:
616
- return "duration"
617
- return "instant"
618
- elif args[0] is NONE: # special case, such as for tuples
619
- return "none"
620
- concept = conceptArg(node, sphinxContext, args, 0)
621
- return concept.periodType
622
-
623
- def _power(node, sphinxContext, args):
624
- args = numericArgs(node, sphinxContext, args, 2)
625
- x = args[0]
626
- exp = args[1]
627
- if isnan(exp) or (isnan(x) and exp != 0) or (isinf(exp) and x in (1, -1)):
628
- return NaN
629
- if ((x == POSINF and exp > 0) or
630
- (x == NEGINF and x > 0 and not x & 1) or
631
- (exp == POSINF and not -1 <= x <= 1) or
632
- (x == 0 and exp < 0)):
633
- return POSINF
634
- if x == NEGINF and x > 0 and x & 1:
635
- return NEGINF
636
- return pow(x, exp)
637
-
638
- def _precision(node, sphinxContext, args):
639
- fact = factArg(node, sphinxContext, args, 0)
640
- return inferredPrecision(fact)
641
-
642
- def _primary(node, sphinxContext, args):
643
- fact = factArg(node, sphinxContext, args, 0)
644
- return fact.qname
645
-
646
- def _replace(node, sphinxContext, args):
647
- value = strArgs(node, sphinxContext, args, 0)
648
- old = strArgs(node, sphinxContext, args, 1)
649
- new = strArgs(node, sphinxContext, args, 2)
650
- return value.replace(old, new)
651
-
652
- def _roundItem(node, sphinxContext, args):
653
- fact = factArg(node, sphinxContext, args, 0)
654
- return roundValue(fact.xValue, decimals=fact.decimals, precision=fact.precision)
655
-
656
- def _roundDecimals(node, sphinxContext, args):
657
- args = numericArgs(node, sphinxContext, args, 2)
658
- return roundValue(args[0], decmials=args[1])
659
-
660
- def _roundPrecision(node, sphinxContext, args):
661
- args = numericArgs(node, sphinxContext, args, 2)
662
- return roundValue(args[0], precision=args[1])
663
-
664
- def _schemaTypeFunction(node, sphinxContext, args):
665
- hasArg(node, sphinxContext, args, 0)
666
- schemaTypeQn = args[0]
667
- return schemaTypeQn
668
-
669
- def _schemaTypeMethod(node, sphinxContext, args):
670
- concept = conceptArg(node, sphinxContext, args, 0)
671
- return concept.typeQname
672
-
673
- def _signum(node, sphinxContext, args):
674
- args = numericArgs(node, sphinxContext, args, 1)
675
- x = args[0]
676
- if x == 0 or isnan(x): return 0
677
- if x > 0: return 1
678
- return -1
679
-
680
- def _scenario(node, sphinxContext, args):
681
- fact = factArg(node, sphinxContext, args, 0)
682
- return fact.context.segment.nonDimValues("scenario")
683
-
684
- def _scheme(node, sphinxContext, args):
685
- hasArg(node, sphinxContext, args, 0)
686
- arg = args[0]
687
- if isinstance(arg, tuple) and len(arg) == 2:
688
- return arg[0]
689
- raise SphinxException(node, "sphinx.methodArgumentsMismatch",
690
- _("Method %(name)s argument is not an entity identifier %(value)s"),
691
- name=node.name, value=arg)
692
-
693
- def _segment(node, sphinxContext, args):
694
- fact = factArg(node, sphinxContext, args, 0)
695
- return fact.context.segment.nonDimValues("segment")
696
-
697
- def _size(node, sphinxContext, args):
698
- hasArg(node, sphinxContext, args, 0)
699
- collection = args[0]
700
- if isinstance(collection, (tuple, list, set)):
701
- return len(collection)
702
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
703
- _("Function %(name)s argument is not a collection %(value)s"),
704
- name=node.name, value=collection)
705
-
706
- def _sqrt(node, sphinxContext, args):
707
- args = numericArgs(node, sphinxContext, args, 1)
708
- x = args[0]
709
- if x < 0 or isnan(x): return NaN
710
- if x == POSINF: return POSINF
711
- return sqrt(x)
712
-
713
- def _startDate(node, sphinxContext, args):
714
- hasArg(node, sphinxContext, args, 0)
715
- arg = args[0]
716
- if isinstance(arg, Period):
717
- if arg.isForever:
718
- return UNBOUND
719
- if arg.isDuration:
720
- return arg.start
721
- return arg.end
722
- raise SphinxException(node, "sphinx.functionArgumentsMismatch",
723
- _("Function %(name)s argument is not a period %(value)s"),
724
- name=node.name, value=arg)
725
-
726
- def _startsWith(node, sphinxContext, args):
727
- value = strArgs(node, sphinxContext, args, 0)
728
- suffix = strArgs(node, sphinxContext, args, 1)
729
- return value.startswith(suffix)
730
-
731
- def _substring(node, sphinxContext, args):
732
- value = strArgs(node, sphinxContext, args, 0)
733
- start = strArgs(node, sphinxContext, args, 1)
734
- end = strArgs(node, sphinxContext, args, 2)
735
- if isinf(start): start = len(value)
736
- if isinf(end): end = len(value)
737
- return value[start:end]
738
-
739
- def _subtractTimePeriod(node, sphinxContext, args):
740
- return _addTimePeriod(node, sphinxContext, args, subtract=True)
741
-
742
- def _taxonomy(node, sphinxContext, args):
743
- return sphinxContext.modelXbrl
744
-
745
- def _timePeriodFunction(node, sphinxContext, args):
746
- duration = strArgs(node, sphinxContext, args, 0)
747
- return dayTimeDuration(duration)
748
-
749
- nowUTC = datetime.datetime.utcnow()
750
- todayUTC = datetime.date(nowUTC.year, nowUTC.month, nowUTC.day)
751
-
752
- def _todayUTC(node, sphinxContext, args):
753
- return todayUTC
754
-
755
- def _timeDuration(node, sphinxContext, args):
756
- duration = strArgs(node, sphinxContext, args, 0)
757
- return dayTimeDuration(duration)
758
-
759
- def toCollection(node, sphinxContext, args, collectionCreator):
760
- hasArg(node, sphinxContext, args, 0)
761
- collection = args[0]
762
- if isinstance(collection, (tuple, list, set)):
763
- return collectionCreator(collection)
764
- raise SphinxException(node, "sphinx.methodArgumentsMismatch",
765
- _("Method %(name)s argument is not a collection %(value)s"),
766
- name=node.name, value=collection)
767
-
768
- def _toList(node, sphinxContext, args):
769
- return toCollection(node, sphinxContext, args, list)
770
-
771
- def _toSet(node, sphinxContext, args):
772
- return toCollection(node, sphinxContext, args, set)
773
-
774
- def _trim(node, sphinxContext, args):
775
- value = strArgs(node, sphinxContext, args, 0)
776
- return value.strip()
777
-
778
- def _tuple(node, sphinxContext, args):
779
- fact = factArg(node, sphinxContext, args, 0)
780
- parentModelObject = fact.getparent()
781
- parentQn = parentModelObject.qname
782
- if parentQn == XbrlConst.qnXbrliXbrl:
783
- return NONE
784
- return parentQn
785
-
786
- def _unitMethod(node, sphinxContext, args):
787
- fact = factArg(node, sphinxContext, args, 0)
788
- return fact.unit.measures
789
-
790
- def _unitFunction(node, sphinxContext, args):
791
- hasArg(node, sphinxContext, args, 0)
792
- unitQn = args[0]
793
- return ([unitQn],[])
794
-
795
- def _upperCase(node, sphinxContext, args):
796
- value = strArgs(node, sphinxContext, args, 0)
797
- return value.upper()
798
-
799
- def _xbrlTypeMethod(node, sphinxContext, args):
800
- concept = conceptArg(node, sphinxContext, args, 0)
801
- baseTypeLocalName = concept.baseXbrliType
802
- if not baseTypeLocalName:
803
- return NONE
804
- return QName("{http://www.xbrl.org/2003/instance}xbrli:" + baseTypeLocalName)
805
-
806
-
807
- # netework functions
808
-
809
- def network(node, sphinxContext, args, linkqname=None, linkrole=None, arcqname=None, arcrole=None):
810
- dts = dtsArg(node, sphinxContext, args)
811
- return ModelRelationshipSet(dts, arcrole, linkrole=linkrole, linkqname=linkqname, arcqname=arcqname)
812
-
813
- def networks(node, sphinxContext, args, linkqname=None, linkrole=None, arcqname=None, arcrole=None):
814
- networkAllLinkroles = network(node, sphinxContext, args, linkqname, None, arcqname, arcrole)
815
- linkroles = networkAllLinkroles.linkRoleUris
816
- return set(network(node, sphinxContext, args, linkqname, linkrole, arcqname, arcrole)
817
- for linkrole in linkroles)
818
-
819
- def _conceptHypercubeAll(node, sphinxContext, args):
820
- linkrole = strArg(node, sphinxContext, args, 1)
821
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.all)
822
-
823
- def _conceptHypercubeAllNetworks(node, sphinxContext, args):
824
- return networks(node, sphinxContext, args, arcrole=XbrlConst.all)
825
-
826
- def _conceptHypercubeNotAll(node, sphinxContext, args):
827
- linkrole = strArg(node, sphinxContext, args, 1)
828
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.notAll)
829
-
830
- def _conceptHypercubeNotAllNetworks(node, sphinxContext, args):
831
- return networks(node, sphinxContext, args, arcrole=XbrlConst.notAll)
832
-
833
- def _dimensionDefault(node, sphinxContext, args):
834
- linkrole = strArg(node, sphinxContext, args, 1)
835
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.dimensionDefault)
836
-
837
- def _dimensionDefaultNetworks(node, sphinxContext, args):
838
- return networks(node, sphinxContext, args, arcrole=XbrlConst.dimensionDefault)
839
-
840
- def _dimensionDomain(node, sphinxContext, args):
841
- linkrole = strArg(node, sphinxContext, args, 1)
842
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.dimensionDomain)
843
-
844
- def _dimensionDomainNetworks(node, sphinxContext, args):
845
- return networks(node, sphinxContext, args, arcrole=XbrlConst.dimensionDomain)
846
-
847
- def _domainMember(node, sphinxContext, args):
848
- linkrole = strArg(node, sphinxContext, args, 1)
849
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.domainMember)
850
-
851
- def _domainMemberNetworks(node, sphinxContext, args):
852
- return networks(node, sphinxContext, args, arcrole=XbrlConst.domainMember)
853
-
854
- def _essenceAlias(node, sphinxContext, args):
855
- linkrole = strArg(node, sphinxContext, args, 1)
856
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.essenceAlias)
857
-
858
- def _essenceAliasNetworks(node, sphinxContext, args):
859
- return networks(node, sphinxContext, args, arcrole=XbrlConst.essenceAlias)
860
-
861
- def _generalSpecial(node, sphinxContext, args):
862
- linkrole = strArg(node, sphinxContext, args, 1)
863
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.generalSpecial)
864
-
865
- def _generalSpecialNetworks(node, sphinxContext, args):
866
- return networks(node, sphinxContext, args, arcrole=XbrlConst.generalSpecial)
867
-
868
- def _genericLink(node, sphinxContext, args):
869
- linkrole = strArg(node, sphinxContext, args, 1)
870
- arcrole = strArg(node, sphinxContext, args, 2)
871
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=arcrole)
872
-
873
- def _genericLinkNetworks(node, sphinxContext, args):
874
- arcrole = strArg(node, sphinxContext, args, 1)
875
- return networks(node, sphinxContext, args, arcrole=arcrole)
876
-
877
- def _hypercubeDimension(node, sphinxContext, args):
878
- linkrole = strArg(node, sphinxContext, args, 1)
879
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.hypercubeDimension)
880
-
881
- def _hypercubeDimensionNetworks(node, sphinxContext, args):
882
- return networks(node, sphinxContext, args, arcrole=XbrlConst.hypercubeDimension)
883
-
884
- def _network(node, sphinxContext, args, linkqname, linkrole, arcqname, arcrole):
885
- return network(node, sphinxContext, args, linkqname, linkrole, arcqname, arcrole)
886
-
887
- def _networks(node, sphinxContext, args, linkqname, linkrole, arcqname, arcrole):
888
- return networks(node, sphinxContext, args, linkqname, linkrole, arcqname, arcrole)
889
-
890
- def _parentChild(node, sphinxContext, args):
891
- linkrole = strArg(node, sphinxContext, args, 1)
892
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.parentChild)
893
-
894
- def _parentChildNetworks(node, sphinxContext, args):
895
- return networks(node, sphinxContext, args, arcrole=XbrlConst.parentChild)
896
-
897
- def _requiresElement(node, sphinxContext, args):
898
- linkrole = strArg(node, sphinxContext, args, 1)
899
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.requiresElement)
900
-
901
- def _requiresElementNetworks(node, sphinxContext, args):
902
- return networks(node, sphinxContext, args, arcrole=XbrlConst.requiresElement)
903
-
904
- def _similarTuples(node, sphinxContext, args):
905
- linkrole = strArg(node, sphinxContext, args, 1)
906
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.similarTuples)
907
-
908
- def _similarTuplesNetworks(node, sphinxContext, args):
909
- return networks(node, sphinxContext, args, arcrole=XbrlConst.similarTuples)
910
-
911
- def _summationItem(node, sphinxContext, args):
912
- linkrole = strArg(node, sphinxContext, args, 1)
913
- return network(node, sphinxContext, args, linkrole=linkrole, arcrole=XbrlConst.summationItem)
914
-
915
- def _summationItemNetworks(node, sphinxContext, args):
916
- return networks(node, sphinxContext, args, arcrole=XbrlConst.summationItem)
917
-
918
- # network methods
919
-
920
- def _ancestors(node, sphinxContext, args):
921
- return set(rel.toModelObject
922
- for rel in _ancestorRelationships(node, sphinxContext, args))
923
-
924
- def _ancestorRelationships(node, sphinxContext, args):
925
- network = networkArg(node, sphinxContext, args)
926
- concept = networkConceptArg(node, sphinxContext, args)
927
- def descRels(fromConcept, depth, visited, rels):
928
- if depth > 0 and concept not in visited:
929
- visited.add(concept)
930
- for rel in network.toModelObject(fromConcept):
931
- rels.add(rel)
932
- descRels(rel.fromModelObject, depth - 1, visited, rels)
933
- visited.discard(concept)
934
- rels = set()
935
- descRels(concept, numericArg(node, sphinxContext, args, 2), set(), rels)
936
- return rels
937
-
938
- def _arcName(node, sphinxContext, args):
939
- network = networkArg(node, sphinxContext, args)
940
- return network.arcqname
941
-
942
- def _arcrole(node, sphinxContext, args):
943
- network = networkArg(node, sphinxContext, args)
944
- return network.arcrole
945
-
946
- def _children(node, sphinxContext, args):
947
- network = networkArg(node, sphinxContext, args)
948
- concept = networkConceptArg(node, sphinxContext, args)
949
- return set(rel.fromModelObject for rel in network.fromModelObject(concept))
950
-
951
- def _descendantRelationships(node, sphinxContext, args):
952
- network = networkArg(node, sphinxContext, args)
953
- concept = networkConceptArg(node, sphinxContext, args)
954
- def descRels(fromConcept, depth, visited, rels):
955
- if depth > 0 and concept not in visited:
956
- visited.add(concept)
957
- for rel in network.fromModelObject(fromConcept):
958
- rels.add(rel)
959
- descRels(rel.toModelObject, depth - 1, visited, rels)
960
- visited.discard(concept)
961
- rels = set()
962
- descRels(concept, numericArg(node, sphinxContext, args, 2), set(), rels)
963
- return rels
964
-
965
- def _descendants(node, sphinxContext, args):
966
- return set(rel.toModelObject
967
- for rel in _descendantRelationships(node, sphinxContext, args))
968
-
969
- def _extendedLinkName(node, sphinxContext, args):
970
- network = networkArg(node, sphinxContext, args)
971
- return network.linkrole
972
-
973
- def _incomingRelationships(node, sphinxContext, args):
974
- network = networkArg(node, sphinxContext, args)
975
- concept = networkConceptArg(node, sphinxContext, args)
976
- return set(network.toModelObject(concept))
977
-
978
- def _outgoingRelationships(node, sphinxContext, args):
979
- network = networkArg(node, sphinxContext, args)
980
- concept = networkConceptArg(node, sphinxContext, args)
981
- return set(network.fromModelObject(concept))
982
-
983
- def _parents(node, sphinxContext, args):
984
- network = networkArg(node, sphinxContext, args)
985
- concept = networkConceptArg(node, sphinxContext, args)
986
- return set(rel.fromModelObject for rel in network.toModelObject(concept))
987
-
988
- def _relationships(node, sphinxContext, args):
989
- network = networkArg(node, sphinxContext, args)
990
- return set(network.modelRelationships)
991
-
992
- def _linkRole(node, sphinxContext, args):
993
- network = networkArg(node, sphinxContext, args)
994
- return network.linkrole
995
-
996
- def _sourceConcepts(node, sphinxContext, args):
997
- network = networkArg(node, sphinxContext, args)
998
- return network.fromModelObjects().keys()
999
-
1000
- def _targetConcepts(node, sphinxContext, args):
1001
- network = networkArg(node, sphinxContext, args)
1002
- return network.toModelObjects().keys()
1003
-
1004
- # relationship methods
1005
-
1006
- def _order(node, sphinxContext, args):
1007
- relationship = relationshipArg(node, sphinxContext, args)
1008
- return relationship.order
1009
-
1010
- def _preferredLabel(node, sphinxContext, args):
1011
- relationship = relationshipArg(node, sphinxContext, args)
1012
- return relationship.preferredLabel
1013
-
1014
- def _source(node, sphinxContext, args):
1015
- relationship = relationshipArg(node, sphinxContext, args)
1016
- return relationship.fromModelObject
1017
-
1018
- def _target(node, sphinxContext, args):
1019
- relationship = relationshipArg(node, sphinxContext, args)
1020
- return relationship.toModelObject
1021
-
1022
- def _weight(node, sphinxContext, args):
1023
- relationship = relationshipArg(node, sphinxContext, args)
1024
- return relationship.weight
1025
-
1026
- # aggregative functions
1027
-
1028
- def _all(node, sphinxContext, args):
1029
- return all(args)
1030
-
1031
- def _any(node, sphinxContext, args):
1032
- return any(args)
1033
-
1034
- def _avg(node, sphinxContext, args):
1035
- return sum(args) / len(args)
1036
-
1037
- def _count(node, sphinxContext, args):
1038
- return len(args)
1039
-
1040
- def _exists(node, sphinxContext, args):
1041
- return len(args) > 0
1042
-
1043
- def _first(node, sphinxContext, args):
1044
- if len(args):
1045
- return args[0]
1046
- return UNBOUND
1047
-
1048
- def _list(node, sphinxContext, args):
1049
- return [args]
1050
-
1051
- def _max(node, sphinxContext, args):
1052
- return max(args)
1053
-
1054
- def _median(node, sphinxContext, args):
1055
- if not args: # empty list
1056
- return 0
1057
- args = sorted(args) # don't sort in place, args may be reused by caller
1058
- middle = int(len(list) / 2)
1059
- if len(list) % 2 == 0:
1060
- return (args[middle - 1] + args[middle]) / 2 # average middle args
1061
- else:
1062
- return args[middle] # middle item
1063
-
1064
- def _min(node, sphinxContext, args):
1065
- return min(args)
1066
-
1067
- def _missing(node, sphinxContext, args):
1068
- return len(args) == 0
1069
-
1070
- def modes(args):
1071
- counts = {}
1072
- firstAt = {}
1073
- maxcount = 0
1074
- for i, arg in enumerate(args):
1075
- newcount = counts.get(arg, 0) + 1
1076
- counts[arg] = newcount
1077
- if newcount > maxcount:
1078
- maxcount = newcount
1079
- if arg not in firstAt:
1080
- firstAt[arg] = i
1081
- return [(maxcount - count, firstAt[value], value)
1082
- for value, count in counts.items()
1083
- if count == maxcount].sort()
1084
-
1085
- def _mode(node, sphinxContext, args):
1086
- return modes(args)[0][2]
1087
-
1088
- def _modes(node, sphinxContext, args):
1089
- return set(mode[2] for mode in modes(args))
1090
-
1091
- def _stdevp(node, sphinxContext, args):
1092
- return _notImplemented(node, sphinxContext)
1093
-
1094
- def _set(node, sphinxContext, args):
1095
- return set(args)
1096
-
1097
- def _sum(node, sphinxContext, args):
1098
- return sum(args)
1099
-
1100
- def _var(node, sphinxContext, args):
1101
- return _notImplemented(node, sphinxContext)
1102
-
1103
- def _varp(node, sphinxContext, args):
1104
- return _notImplemented(node, sphinxContext)
1105
-
1106
-
1107
- # miscellaneous methods
1108
-
1109
- def _notImplemented(node, sphinxContext, args):
1110
- sphinxContext.modelXbrl.log("ERROR", "sphinx.functionNotImplemented",
1111
- _("Function %(name)s is not currently implemented"),
1112
- sourceFileLine=node.sourceFileLine,
1113
- name=node.name)
1114
- return NaN
1115
-
1116
- methodImplementation = {
1117
- "abs": _abs,
1118
- "add-time-period": _addTimePeriod,
1119
- "balance": _balance,
1120
- "concept": _concept,
1121
- "concepts": _concepts,
1122
- "contains": _contains,
1123
- "credit": _credit,
1124
- "days": _days,
1125
- "debit": _debit,
1126
- "decimals": _decimals,
1127
- "dimension": _dimension,
1128
- "dts-document-locations": _dtsDocumentLocations,
1129
- "duration": _duration,
1130
- "end-date": _endDate,
1131
- "ends-with": _endsWith,
1132
- "entity": _entityMethod,
1133
- "exp": _exp,
1134
- "has-decimals": _hasDecimals,
1135
- "has-precision":_hasPrecision,
1136
- "identifier": _identifier,
1137
- "index-of": _indexOf,
1138
- "instant": _instant,
1139
- "is-forever": _isForever,
1140
- "is-monetary": _isMonetary,
1141
- "is-numeric": _isNumeric,
1142
- "last-index-of":_lastIndexOf,
1143
- "ln": _ln,
1144
- "length": _length,
1145
- "local-part": _localPart,
1146
- "log": _log,
1147
- "log10": _log10,
1148
- "lower-case": _lowerCase,
1149
- "name": _name,
1150
- "period": _period,
1151
- "period-type": _periodType,
1152
- "power": _power,
1153
- "precision": _precision,
1154
- "primary": _primary,
1155
- "replace": _replace,
1156
- "round": _roundItem,
1157
- "round-by-decimals": _roundDecimals,
1158
- "round-by-precision": _roundPrecision,
1159
- "scenario": _scenario,
1160
- "schema-type": _schemaTypeMethod,
1161
- "scheme": _scheme,
1162
- "segment": _segment,
1163
- "signum": _signum,
1164
- "size": _size,
1165
- "sqrt": _sqrt,
1166
- "start-date": _startDate,
1167
- "starts-with": _startsWith,
1168
- "subtract-time-period": _subtractTimePeriod,
1169
- "taxonomy": _taxonomy,
1170
- "to-list": _toList,
1171
- "to-set": _toSet,
1172
- "tuple": _tuple,
1173
- "unit": _unitMethod,
1174
- "unknown": _notImplemented,
1175
- "upper-case": _upperCase,
1176
- "xbrl-type": _xbrlTypeMethod,
1177
-
1178
- #networks
1179
- "concept-hypercube-all": _conceptHypercubeAll,
1180
- "concept-hypercube-all-networks": _conceptHypercubeAllNetworks,
1181
- "concept-hypercube-not-all": _conceptHypercubeNotAll,
1182
- "concept-hypercube-not-all-networks": _conceptHypercubeNotAllNetworks,
1183
- "dimension-default": _dimensionDefault,
1184
- "dimension-default-networks": _dimensionDefaultNetworks,
1185
- "dimension-domain": _dimensionDomain,
1186
- "dimension-domain-networks": _dimensionDomainNetworks,
1187
- "domain-member": _domainMember,
1188
- "domain-member-networks": _domainMemberNetworks,
1189
- "essence-alias": _essenceAlias,
1190
- "essence-alias-networks": _essenceAliasNetworks,
1191
- "general-special": _generalSpecial,
1192
- "general-special-networks": _generalSpecialNetworks,
1193
- "generic-link": _genericLink,
1194
- "generic-link-networks": _genericLinkNetworks,
1195
- "hypercube-dimension": _hypercubeDimension,
1196
- "hypercube-dimension-networks": _hypercubeDimensionNetworks,
1197
- "network": _network,
1198
- "networks": _networks,
1199
- "parent-child": _parentChild,
1200
- "parent-child-networks": _parentChildNetworks,
1201
- "requires-element": _requiresElement,
1202
- "requires-element-networks": _requiresElementNetworks,
1203
- "similar-tuples": _similarTuples,
1204
- "similar-tuples-networks": _similarTuplesNetworks,
1205
- "summation-item": _summationItem,
1206
- "summation-item-networks": _summationItemNetworks,
1207
-
1208
- #network methods
1209
- "ancestors": _ancestors,
1210
- "ancestor-relationships": _ancestorRelationships,
1211
- "arc-name": _arcName,
1212
- "arcrole": _arcrole,
1213
- "children": _children,
1214
- "concepts": _concepts,
1215
- "descendant-relationships": _descendantRelationships,
1216
- "descendants": _descendants,
1217
- "extended-link-name": _extendedLinkName,
1218
- "incoming-relationships": _incomingRelationships,
1219
- "outgoing-relationships": _outgoingRelationships,
1220
- "parents": _parents,
1221
- "relationships": _relationships,
1222
- "role": _linkRole,
1223
- "source-concepts": _sourceConcepts,
1224
- "target-concepts": _targetConcepts,
1225
-
1226
- #relationship methods
1227
- "order": _order,
1228
- "preferred-label": _preferredLabel,
1229
- "source": _source,
1230
- "target": _target,
1231
- "weight": _weight,
1232
- }
1233
-
1234
- functionImplementation = {
1235
- "boolean": _booleanFunction,
1236
- "current-date-as-utc": _todayUTC,
1237
- "duration": _durationFunction,
1238
- "entity": _entityFunction,
1239
- "forever": _foreverFunction,
1240
- "instant": _instantFunction,
1241
- "number": _numberFunction,
1242
- "schema-type": _schemaTypeFunction,
1243
- "time-period": _timePeriodFunction,
1244
- "unit": _unitFunction,
1245
- }
1246
-
1247
- aggreateFunctionImplementation = {
1248
- "all": _all,
1249
- "any": _any,
1250
- "avg": _avg,
1251
- "count": _count,
1252
- "exists": _exists,
1253
- "first": _first,
1254
- "list": _list,
1255
- "max": _max,
1256
- "median": _median,
1257
- "min": _min,
1258
- "missing": _missing,
1259
- "mode": _mode,
1260
- "modes": _modes,
1261
- "set": _set,
1262
- "stdevp": _stdevp,
1263
- "sum": _sum,
1264
- "var": _var,
1265
- "varp": _varp,
1266
- }
1267
-
1268
- aggreateFunctionAcceptsFactArgs = {
1269
- "all": False,
1270
- "any": False,
1271
- "avg": False,
1272
- "count": True,
1273
- "exists": True,
1274
- "first": True,
1275
- "list": True,
1276
- "max": True,
1277
- "median": False,
1278
- "min": False,
1279
- "missing": True,
1280
- "mode": False,
1281
- "modes": False,
1282
- "set": True,
1283
- "stdevp": False,
1284
- "sum": False,
1285
- "var": False,
1286
- "varp": False,
1287
- }