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,17 +1,18 @@
1
1
  '''
2
2
  See COPYRIGHT.md for copyright information.
3
3
  '''
4
- import os, threading, time, logging
4
+ import os, threading, time, logging, sys, traceback
5
5
  from tkinter import Menu, BooleanVar, font as tkFont
6
+ from arelle.ModelFormulaObject import Aspect, aspectModels, aspectModelAspect
6
7
  from arelle import (ViewWinTkTable, ModelDocument, ModelDtsObject, ModelInstanceObject, XbrlConst,
7
8
  ModelXbrl, Locale, FunctionXfi,
8
- ValidateXbrlDimensions)
9
+ ValidateXbrlDimensions, ViewFileRenderedGrid, ViewFileRenderedLayout, ViewFileRenderedStructure)
9
10
  from arelle.ModelValue import qname, QName
10
- from arelle.RenderingResolver import resolveAxesStructure, RENDER_UNITS_PER_CHAR
11
- from arelle.ModelFormulaObject import Aspect, aspectModels, aspectModelAspect
11
+ from arelle.rendering.RenderingResolution import RENDER_UNITS_PER_CHAR
12
+ from arelle.rendering.RenderingLayout import layoutTable
12
13
  from arelle.ModelInstanceObject import ModelDimensionValue
13
- from arelle.ModelRenderingObject import (ModelClosedDefinitionNode, ModelEuAxisCoord,
14
- ModelFilterDefinitionNode,
14
+ from arelle.ModelRenderingObject import (StrctMdlBreakdown, DefnMdlDefinitionNode,
15
+ DefnMdlClosedDefinitionNode, DefnMdlAspectNode,
15
16
  OPEN_ASPECT_ENTRY_SURROGATE)
16
17
  from arelle.formula.FormulaEvaluator import init as formulaEvaluatorInit, aspectMatches
17
18
 
@@ -23,6 +24,9 @@ from arelle.ValidateXbrl import ValidateXbrl
23
24
  from arelle.XbrlConst import eurofilingModelNamespace, eurofilingModelPrefix
24
25
  from arelle.ValidateXbrlDimensions import isFactDimensionallyValid
25
26
  from arelle.XmlValidate import UNVALIDATED, validate as xmlValidate
27
+ from numbers import Number
28
+
29
+ TRACE_TK = False # print trace messages of tk table interface
26
30
 
27
31
  try:
28
32
  from tkinter import ttk
@@ -43,7 +47,7 @@ integerItemTypes = {"integerItemType", "nonPositiveIntegerItemType", "negativeIn
43
47
  "longItemType", "intItemType", "shortItemType", "byteItemType",
44
48
  "nonNegativeIntegerItemType", "unsignedLongItemType", "unsignedIntItemType",
45
49
  "unsignedShortItemType", "unsignedByteItemType", "positiveIntegerItemType"}
46
- TABLE_AXIS_ROLES = (XbrlConst.euTableAxis, XbrlConst.tableBreakdown, XbrlConst.tableBreakdownMMDD, XbrlConst.tableBreakdown201305, XbrlConst.tableBreakdown201301, XbrlConst.tableAxis2011)
50
+ TABLE_AXIS_ROLES = (XbrlConst.tableBreakdown, XbrlConst.tableBreakdownMMDD)
47
51
 
48
52
  '''
49
53
  Returns a tuple with all known table axis roles
@@ -54,6 +58,8 @@ def getTableAxisArcroles():
54
58
  def viewRenderedGrid(modelXbrl, tabWin, lang=None):
55
59
  modelXbrl.modelManager.showStatus(_("viewing rendering"))
56
60
  view = ViewRenderedGrid(modelXbrl, tabWin, lang)
61
+ if not view.table.isInitialized: # unable to load or initialize tktable
62
+ return None
57
63
 
58
64
  view.blockMenuEvents = 1
59
65
 
@@ -63,18 +69,18 @@ def viewRenderedGrid(modelXbrl, tabWin, lang=None):
63
69
  optionsMenu.add_command(label=_("Open breakdown entry rows"), underline=0, command=view.setOpenBreakdownEntryRows)
64
70
  view.ignoreDimValidity.trace("w", view.viewReloadDueToMenuAction)
65
71
  optionsMenu.add_checkbutton(label=_("Ignore Dimensional Validity"), underline=0, variable=view.ignoreDimValidity, onvalue=True, offvalue=False)
66
- view.xAxisChildrenFirst.trace("w", view.viewReloadDueToMenuAction)
67
- optionsMenu.add_checkbutton(label=_("X-Axis Children First"), underline=0, variable=view.xAxisChildrenFirst, onvalue=True, offvalue=False)
68
- view.yAxisChildrenFirst.trace("w", view.viewReloadDueToMenuAction)
69
- optionsMenu.add_checkbutton(label=_("Y-Axis Children First"), underline=0, variable=view.yAxisChildrenFirst, onvalue=True, offvalue=False)
70
72
  menu.add_cascade(label=_("Options"), menu=optionsMenu, underline=0)
71
73
  view.tablesMenu = Menu(view.viewFrame, tearoff=0)
72
74
  menu.add_cascade(label=_("Tables"), menu=view.tablesMenu, underline=0)
73
75
  view.tablesMenuLength = 0
74
76
  view.menuAddLangs()
75
77
  saveMenu = Menu(view.viewFrame, tearoff=0)
76
- saveMenu.add_command(label=_("HTML file"), underline=0, command=lambda: view.modelXbrl.modelManager.cntlr.fileSave(view=view, fileType="html"))
77
- saveMenu.add_command(label=_("Layout model"), underline=0, command=lambda: view.modelXbrl.modelManager.cntlr.fileSave(view=view, fileType="xml"))
78
+ saveMenu.add_command(label=_("HTML table"), underline=0, command=lambda: view.modelXbrl.modelManager.cntlr.fileSave(
79
+ view=view, fileType="html", method=ViewFileRenderedGrid.viewRenderedGrid, caption=_("arelle - Save HTML-rendered Table")))
80
+ saveMenu.add_command(label=_("Layout model"), underline=0, command=lambda: view.modelXbrl.modelManager.cntlr.fileSave(
81
+ view=view, fileType="xml", method=ViewFileRenderedLayout.viewRenderedLayout, caption=_("arelle - Save Table Layout Model")))
82
+ saveMenu.add_command(label=_("Structural model"), underline=0, command=lambda: view.modelXbrl.modelManager.cntlr.fileSave(
83
+ view=view, fileType="json", method=ViewFileRenderedStructure.viewRenderedStructuralModel, caption=_("arelle - Save Table Structural Model")))
78
84
  saveMenu.add_command(label=_("XBRL instance"), underline=0, command=view.saveInstance)
79
85
  menu.add_cascade(label=_("Save"), menu=saveMenu, underline=0)
80
86
  view.view()
@@ -86,6 +92,18 @@ def viewRenderedGrid(modelXbrl, tabWin, lang=None):
86
92
  view.viewFrame.bind("<1>", view.onClick, '+') # does not currently work (since tktable changes)
87
93
  view.viewFrame.bind("<Configure>", view.onConfigure, '+') # frame resized, redo column header wrap length ratios
88
94
  view.blockMenuEvents = 0
95
+ if "saveTableStructuralModel" in modelXbrl.modelManager.formulaOptions.parameterValues:
96
+ ViewFileRenderedStructure.viewRenderedStructuralModel(modelXbrl,
97
+ modelXbrl.modelManager.formulaOptions.parameterValues["saveTableStructuralModel"][1],
98
+ lang=lang, sourceView=view)
99
+ if "saveTableLayoutModel" in modelXbrl.modelManager.formulaOptions.parameterValues:
100
+ ViewFileRenderedLayout.viewRenderedLayout(modelXbrl,
101
+ modelXbrl.modelManager.formulaOptions.parameterValues["saveTableLayoutModel"][1],
102
+ lang=lang, sourceView=view)
103
+ if "saveTable" in modelXbrl.modelManager.formulaOptions.parameterValues:
104
+ ViewFileRenderedGrid.viewRenderedGrid(modelXbrl,
105
+ modelXbrl.modelManager.formulaOptions.parameterValues["saveTable"][1],
106
+ lang=lang, sourceView=view)
89
107
  return view
90
108
 
91
109
  class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
@@ -97,14 +115,15 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
97
115
  self.aspectEntryObjectIdsNode = {}
98
116
  self.aspectEntryObjectIdsCell = {}
99
117
  self.factPrototypeAspectEntryObjectIds = defaultdict(set)
100
- self.zOrdinateChoices = None
118
+ self.zBreakdownStrctNodes = [] # effective structural node for each breakdown node
119
+ self.zBreakdownLeafParents = []
120
+ self.zBreakdownLeafNbr = []
101
121
  # context menu Boolean vars
102
122
  self.options = self.modelXbrl.modelManager.cntlr.config.setdefault("viewRenderedGridOptions", {})
103
123
  self.openBreakdownLines = self.options.setdefault("openBreakdownLines", 5) # ensure there is a default entry
104
124
  self.ignoreDimValidity = BooleanVar(value=self.options.setdefault("ignoreDimValidity",True))
105
- self.xAxisChildrenFirst = BooleanVar(value=self.options.setdefault("xAxisChildrenFirst",True))
106
- self.yAxisChildrenFirst = BooleanVar(value=self.options.setdefault("yAxisChildrenFirst",False))
107
125
  formulaEvaluatorInit() # one-time module initialization
126
+ self.conceptMessageIssued = False
108
127
 
109
128
  def close(self):
110
129
  super(ViewRenderedGrid, self).close()
@@ -150,8 +169,6 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
150
169
  if not self.blockMenuEvents:
151
170
  # update config (config saved when exiting)
152
171
  self.options["ignoreDimValidity"] = self.ignoreDimValidity.get()
153
- self.options["xAxisChildrenFirst"] = self.xAxisChildrenFirst.get()
154
- self.options["yAxisChildrenFirst"] = self.yAxisChildrenFirst.get()
155
172
  self.view()
156
173
 
157
174
  def setOpenBreakdownEntryRows(self, *args):
@@ -195,13 +212,7 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
195
212
  self.tblELR = viewTblELR
196
213
  clearZchoices = True
197
214
  else: # first or subsequenct reloading (language, dimensions, other change)
198
- clearZchoices = self.zOrdinateChoices is None
199
- if clearZchoices: # also need first time initialization
200
- self.loadTablesMenu() # load menus (and initialize if first time
201
- viewTblELR = self.tblELR
202
-
203
- if not self.tblELR:
204
- return # no table to display
215
+ clearZchoices = len(self.zBreakdownStrctNodes) == 0
205
216
 
206
217
  if clearZchoices:
207
218
  self.zOrdinateChoices = {}
@@ -209,12 +220,32 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
209
220
  # remove old widgets
210
221
  self.viewFrame.clearGrid()
211
222
 
212
- tblAxisRelSet, xTopStructuralNode, yTopStructuralNode, zTopStructuralNode = resolveAxesStructure(self, viewTblELR)
213
- colAdjustment = 1 if zTopStructuralNode is not None else 0
214
- self.table.resizeTable(self.dataFirstRow+self.dataRows-1, self.dataFirstCol+self.dataCols+colAdjustment-1, titleRows=self.dataFirstRow-1, titleColumns=self.dataFirstCol-1)
215
- self.hasTableFilters = bool(self.modelTable.filterRelationships)
223
+ layoutTable(self)
224
+ try:
225
+ strctMdlTableSet = self.lytMdlTblMdl.lytMdlTableSets[0]
226
+ strctMdlTable = strctMdlTableSet.lytMdlTables[0].strctMdlTable
227
+ except IndexError:
228
+ if TRACE_TK: print("no table to display")
229
+ self.blockMenuEvents -= 1
230
+ return # no table to display
231
+
232
+ if len(self.zBreakdownStrctNodes) == 0:
233
+ if clearZchoices: # also need first time initialization
234
+ self.loadTablesMenu() # load menus (and initialize if first time
235
+ self.zBreakdownStrctNodes = [None] * self.zAxisBreakdowns
236
+ self.zBreakdownLeafNbr = [0] * self.zAxisBreakdowns
237
+ self.zBreakdownLeafParents = [None] * self.zAxisBreakdowns
238
+ viewTblELR = self.tblELR
239
+
240
+ if not self.tblELR or not self.tblBrkdnRels or not viewTblELR:
241
+ self.blockMenuEvents -= 1
242
+ return # no table to display
243
+
244
+ if TRACE_TK: print(f"resizeTable rows {self.dataFirstRow+self.dataRows} cols {self.dataFirstCol+self.dataCols} titleRows {self.dataFirstRow} titleColumns {self.dataFirstCol})")
245
+ self.table.resizeTable(self.dataFirstRow+self.dataRows, self.dataFirstCol+self.dataCols, titleRows=self.dataFirstRow, titleColumns=self.dataFirstCol)
246
+ self.hasTableFilters = bool(self.defnMdlTable.filterRelationships)
216
247
 
217
- if tblAxisRelSet:
248
+ try:
218
249
  # review row header wrap widths and limit to 2/3 of the frame width (all are screen units)
219
250
  fontWidth = tkFont.Font(font='TkTextFont').configure()['size']
220
251
  fontWidth = fontWidth * 3 // 2
@@ -239,28 +270,28 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
239
270
  self.aspectEntryObjectIdsNode.clear()
240
271
  self.aspectEntryObjectIdsCell.clear()
241
272
  self.factPrototypeAspectEntryObjectIds.clear()
242
- self.table.initHeaderCellValue((self.modelTable.genLabel(lang=self.lang, strip=True) or # use table label, if any
273
+ if TRACE_TK: print(f"tbl hdr x {0} y {0} cols {self.dataFirstCol} rows {self.dataFirstRow} value {(self.defnMdlTable.genLabel(lang=self.lang, strip=True) or self.roledefinition)}")
274
+ self.table.initHeaderCellValue((self.defnMdlTable.genLabel(lang=self.lang, strip=True) or # use table label, if any
243
275
  self.roledefinition),
244
- 0, 0, (self.dataFirstCol - 2),
245
- (self.dataFirstRow - 2),
276
+ 0, 0, self.dataFirstCol-1, self.dataFirstRow-1,
246
277
  XbrlTable.TG_TOP_LEFT_JUSTIFIED)
247
- self.zAspectStructuralNodes = defaultdict(set)
248
- self.zAxis(1, zTopStructuralNode, clearZchoices)
249
- xStructuralNodes = []
278
+ self.zAspectStrctNodes = defaultdict(set)
279
+ self.zAxis(-1, strctMdlTable.strctMdlFirstAxisBreakdown("z"), clearZchoices)
280
+ xStrctNodes = []
250
281
  colsFoundPlus1, _, _, _ = self.xAxis(self.dataFirstCol, self.colHdrTopRow, self.colHdrTopRow + self.colHdrRows - 1,
251
- xTopStructuralNode, xStructuralNodes, self.xAxisChildrenFirst.get(), True, True)
252
- _, rowsFoundPlus1 = self.yAxis(1, self.dataFirstRow,
253
- yTopStructuralNode, self.yAxisChildrenFirst.get(), True, True)
254
- self.table.resizeTable(rowsFoundPlus1-1,
255
- colsFoundPlus1+colAdjustment-1,
256
- clearData=False)
282
+ strctMdlTable.strctMdlFirstAxisBreakdown("x"), xStrctNodes, True, True)
283
+ _, rowsFoundPlus1, _, _, _ = self.yAxis(0, self.dataFirstRow,
284
+ strctMdlTable.strctMdlFirstAxisBreakdown("y"), True, True)
285
+ #self.table.resizeTable(rowsFoundPlus1,
286
+ # colsFoundPlus1+colAdjustment,
287
+ # clearData=False)
257
288
  for fp in self.factPrototypes: # dereference prior facts
258
289
  if fp is not None:
259
290
  fp.clear()
260
291
  self.factPrototypes = []
261
292
 
262
293
  startedAt2 = time.time()
263
- self.bodyCells(self.dataFirstRow, yTopStructuralNode, xStructuralNodes, self.zAspectStructuralNodes, self.yAxisChildrenFirst.get())
294
+ self.bodyCells(self.dataFirstRow, strctMdlTable.strctMdlFirstAxisBreakdown("y"), xStrctNodes, self.zAspectStrctNodes)
264
295
  #print("bodyCells {:.2f}secs ".format(time.time() - startedAt2) + self.roledefinition)
265
296
 
266
297
  self.table.clearModificationStatus()
@@ -269,6 +300,11 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
269
300
 
270
301
  # data cells
271
302
  #print("body cells done")
303
+ except Exception as err:
304
+ self.modelXbrl.error(f"exception: {type(err).__name__}",
305
+ "Table Linkbase GUI rendering exception: %(error)s at %(traceback)s",
306
+ modelXbrl=self.modelXbrl, error=err,
307
+ traceback=traceback.format_tb(sys.exc_info()[2]))
272
308
 
273
309
  self.modelXbrl.profileStat("viewTable_" + os.path.basename(viewTblELR), time.time() - startedAt)
274
310
 
@@ -276,33 +312,44 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
276
312
  self.blockMenuEvents -= 1
277
313
 
278
314
 
279
- def zAxis(self, row, zStructuralNode, clearZchoices):
280
- if zStructuralNode is not None:
281
- label = zStructuralNode.header(lang=self.lang)
282
- xValue = self.dataFirstCol-1
283
- yValue = row-1
315
+ def zAxis(self, breakdownRow, zStrctNode, clearZchoices):
316
+ if (isinstance(zStrctNode, StrctMdlBreakdown) and zStrctNode.defnMdlNode is not None):
317
+ breakdownRow += 1
318
+ self.zBreakdownStrctNodes[breakdownRow] = zStrctNode
319
+ # find leaf nodes for current breakdown
320
+ if zStrctNode.strctMdlChildNodes and all(
321
+ not z.strctMdlChildNodes or all(isinstance(zc, StrctMdlBreakdown) for zc in z.strctMdlChildNodes)
322
+ for z in zStrctNode.strctMdlChildNodes):
323
+ # current strctMdlChildNodes represent leaf aspect nodes for this breakdown
324
+ zBreakdownStrctNode = self.zBreakdownStrctNodes[breakdownRow]
325
+ self.zBreakdownLeafParents[breakdownRow] = zStrctNode
326
+ label = zStrctNode.header(lang=self.lang)
327
+ xValue = self.dataFirstCol
328
+ yValue = breakdownRow
329
+ if TRACE_TK: print(f"zAxis hdr x {xValue} y {yValue} value {label}")
284
330
  self.table.initHeaderCellValue(label,
285
331
  xValue, yValue,
286
332
  0, 0,
287
333
  XbrlTable.TG_LEFT_JUSTIFIED,
288
- objectId=zStructuralNode.objectId())
334
+ objectId=zStrctNode.objectId())
289
335
 
290
- if zStructuralNode.choiceStructuralNodes is not None: # combo box
291
- valueHeaders = [''.ljust(zChoiceStructuralNode.indent * 4) + # indent if nested choices
292
- (zChoiceStructuralNode.header(lang=self.lang) or '')
293
- for zChoiceStructuralNode in zStructuralNode.choiceStructuralNodes]
336
+ if not zBreakdownStrctNode.hasOpenNode: # combo box
337
+ valueHeaders = [# ''.ljust(zBreakdownStrctNode.indent * 4) + # indent if nested choices
338
+ (z.header(lang=self.lang) or '')
339
+ for z in zStrctNode.strctMdlChildNodes]
294
340
  zAxisIsOpenExplicitDimension = False
295
341
  zAxisTypedDimension = None
296
- i = zStructuralNode.choiceNodeIndex # for aspect entry, use header selected
297
- comboBoxValue = None if i >= 0 else zStructuralNode.aspects.get('aspectValueLabel')
298
- chosenStructuralNode = zStructuralNode.choiceStructuralNodes[i]
342
+ i = self.zBreakdownLeafNbr[breakdownRow] # for aspect entry, use header selected
343
+ choiceStrctNodes = zStrctNode.strctMdlChildNodes
344
+ comboBoxValue = None if i >= 0 else zchoiceStrctNodes[0].aspects.get('aspectValueLabel')
345
+ chosenStrctNode = choiceStrctNodes[i or 0]
299
346
  aspect = None
300
- for aspect in chosenStructuralNode.aspectsCovered():
347
+ for aspect in chosenStrctNode.aspectsCovered():
301
348
  if aspect != Aspect.DIMENSIONS:
302
349
  break
303
350
  # for open filter nodes of explicit dimension allow selection of all values
304
351
  zAxisAspectEntryMode = False
305
- if isinstance(chosenStructuralNode.definitionNode, ModelFilterDefinitionNode):
352
+ if isinstance(chosenStrctNode.defnMdlNode, DefnMdlAspectNode):
306
353
  if isinstance(aspect, QName):
307
354
  dimConcept = self.modelXbrl.qnameConcepts[aspect]
308
355
  if dimConcept.isExplicitDimension:
@@ -310,81 +357,84 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
310
357
  valueHeaders.append("(all members)")
311
358
  else:
312
359
  valueHeaders.extend(
313
- self.explicitDimensionFilterMembers(zStructuralNode, chosenStructuralNode))
360
+ self.explicitDimensionFilterMembers(zStrctNode, chosenStrctNode))
314
361
  zAxisAspectEntryMode = True
315
362
  zAxisIsOpenExplicitDimension = True
316
363
  elif dimConcept.isTypedDimension:
317
- if (zStructuralNode.choiceStructuralNodes[0].contextItemBinding is None and
364
+ if (zStrctNode.choiceStrctNodes[0].contextItemBinding is None and
318
365
  not valueHeaders[0]): # remove filterNode from the list
319
366
  ''' this isn't reliable
320
367
  if i > 0:
321
- del zStructuralNode.choiceStructuralNodes[0]
368
+ del zStrctNode.choiceStrctNodes[0]
322
369
  del valueHeaders[0]
323
- zStructuralNode.choiceNodeIndex = i = i-1
370
+ zStrctNode.choiceNodeIndex = i = i-1
324
371
  '''
325
372
  if i >= 0:
326
- chosenStructuralNode = zStructuralNode.choiceStructuralNodes[i]
373
+ chosenStrctNode = zStrctNode.choiceStrctNodes[i]
327
374
  else:
328
- chosenStructuralNode = zStructuralNode # use aspects of structural node (for entered typed value)
375
+ chosenStrctNode = zStrctNode # use aspects of structural node (for entered typed value)
329
376
  if not comboBoxValue and not valueHeaders:
330
377
  comboBoxValue = "--please select--"
331
378
  i = -1
332
379
  valueHeaders.append("(enter typed member)")
333
380
  zAxisTypedDimension = dimConcept
334
- combobox = self.table.initHeaderCombobox(self.dataFirstCol,
335
- row-1,
336
- colspan=0,
381
+ if TRACE_TK: print(f"zAxis comboBox x {xValue + 1} y {yValue} values {valueHeaders} value {comboBoxValue}")
382
+ combobox = self.table.initHeaderCombobox(xValue + 1,
383
+ yValue,
337
384
  values=valueHeaders,
338
385
  value=comboBoxValue,
339
- selectindex=zStructuralNode.choiceNodeIndex if i >= 0 else None,
386
+ selectindex=self.zBreakdownLeafNbr[breakdownRow],
340
387
  comboboxselected=self.onZComboBoxSelected)
341
- combobox.zStructuralNode = zStructuralNode
388
+ combobox.zBreakdownRow = breakdownRow
342
389
  combobox.zAxisIsOpenExplicitDimension = zAxisIsOpenExplicitDimension
343
390
  combobox.zAxisTypedDimension = zAxisTypedDimension
344
391
  combobox.zAxisAspectEntryMode = zAxisAspectEntryMode
345
392
  combobox.zAxisAspect = aspect
346
- combobox.zChoiceOrdIndex = row - 1
347
- combobox.objectId = zStructuralNode.objectId()
393
+ combobox.objectId = zStrctNode.objectId()
348
394
  # add aspect for chosen node
349
- self.setZStructuralNodeAspects(chosenStructuralNode)
395
+ self.setZStrctNodeAspects(chosenStrctNode)
350
396
  else:
351
397
  #process aspect on this node before child nodes in case it is overridden
352
- self.setZStructuralNodeAspects(zStructuralNode)
353
- # nested nodes override parent nodes
354
- for zStructuralNode in zStructuralNode.childStructuralNodes:
355
- self.zAxis(row + 1, zStructuralNode, clearZchoices)
356
-
357
- def setZStructuralNodeAspects(self, zStructuralNode, add=True):
358
- for aspect in aspectModels[self.aspectModel]:
359
- if (aspect in zStructuralNode.aspects or # might be added as custom-entered value (typed dim)
360
- zStructuralNode.hasAspect(aspect, inherit=True)): #implies inheriting from other z axes
398
+ self.setZStrctNodeAspects(self.zBreakdownStrctNodes[0])
399
+ # find nested breakdown nodes
400
+ for zStrctNode in zStrctNode.strctMdlChildNodes:
401
+ self.zAxis(breakdownRow, zStrctNode, clearZchoices)
402
+ break
403
+
404
+
405
+ def setZStrctNodeAspects(self, zStrctNode, add=True):
406
+ for aspect in aspectModels["dimensional"]:
407
+ if zStrctNode.hasAspect(aspect, inherit=False):
361
408
  if aspect == Aspect.DIMENSIONS:
362
- for dim in (zStructuralNode.aspectValue(Aspect.DIMENSIONS, inherit=True) or emptyList):
409
+ for dim in (zStrctNode.aspectValue(Aspect.DIMENSIONS, inherit=False) or emptyList):
363
410
  if add:
364
- self.zAspectStructuralNodes[dim].add(zStructuralNode)
411
+ self.zAspectStrctNodes[dim].add(zStrctNode)
365
412
  else:
366
- self.zAspectStructuralNodes[dim].discard(zStructuralNode)
413
+ self.zAspectStrctNodes[dim].discard(zStrctNode)
367
414
  else:
368
415
  if add:
369
- self.zAspectStructuralNodes[aspect].add(zStructuralNode)
416
+ self.zAspectStrctNodes[aspect].add(zStrctNode)
370
417
  else:
371
- self.zAspectStructuralNodes[aspect].discard(zStructuralNode)
418
+ self.zAspectStrctNodes[aspect].discard(zStrctNode)
372
419
 
373
420
  def onZComboBoxSelected(self, event):
374
421
  combobox = event.widget
375
- structuralNode = combobox.zStructuralNode
422
+ breakdownRow = combobox.zBreakdownRow
423
+ breakdownLeafNbr = self.zBreakdownLeafNbr[breakdownRow]
424
+ choiceStrctNodes = self.zBreakdownLeafParents[breakdownRow].strctMdlChildNodes
425
+ structuralNode = choiceStrctNodes[breakdownLeafNbr]
376
426
  if combobox.zAxisAspectEntryMode:
377
427
  aspectValue = structuralNode.aspectEntryHeaderValues.get(combobox.get())
378
428
  if aspectValue is not None:
379
- self.zOrdinateChoices[structuralNode.definitionNode] = \
429
+ self.zOrdinateChoices[structuralNode.defnMdlNode] = \
380
430
  structuralNode.aspects = {combobox.zAxisAspect: aspectValue, 'aspectValueLabel': combobox.get()}
381
431
  self.view() # redraw grid
382
432
  elif combobox.zAxisIsOpenExplicitDimension and combobox.get() == "(all members)":
383
433
  # reload combo box
384
434
  self.comboboxLoadExplicitDimension(combobox,
385
435
  structuralNode, # owner of combobox
386
- structuralNode.choiceStructuralNodes[structuralNode.choiceNodeIndex]) # aspect filter node
387
- structuralNode.choiceNodeIndex = -1 # use entry aspect value
436
+ choiceStrctNodes[breakdownLeafNbr]) # aspect filter node
437
+ self.zBreakdownLeafNbr[breakdownRow] = -1 # use entry aspect value
388
438
  combobox.zAxisAspectEntryMode = True
389
439
  elif combobox.zAxisTypedDimension is not None and combobox.get() == "(enter typed member)":
390
440
  # ask typed member entry
@@ -393,11 +443,11 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
393
443
  combobox.zAxisTypedDimension.label(),
394
444
  parent=self.tabWin)
395
445
  if result:
396
- structuralNode.choiceNodeIndex = -1 # use entry aspect value
446
+ self.zBreakdownLeafNbr[breakdownRow] = -1 # use entry aspect value
397
447
  aspectValue = FunctionXfi.create_element(self.rendrCntx,
398
448
  None,
399
449
  (combobox.zAxisTypedDimension.typedDomainElement.qname, (), result))
400
- self.zOrdinateChoices[structuralNode.definitionNode] = \
450
+ self.zOrdinateChoices[structuralNode.defnMdlNode] = \
401
451
  structuralNode.aspects = {combobox.zAxisAspect: aspectValue,
402
452
  Aspect.DIMENSIONS: {combobox.zAxisTypedDimension.qname},
403
453
  'aspectValueLabel': result}
@@ -408,154 +458,207 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
408
458
  combobox["values"] = valueHeaders
409
459
  combobox.zAxisAspectEntryMode = True
410
460
  self.view() # redraw grid
411
- else:
461
+ elif breakdownLeafNbr is not None:
412
462
  # remove prior combo choice aspect
413
- self.setZStructuralNodeAspects(structuralNode.choiceStructuralNodes[structuralNode.choiceNodeIndex], add=False)
463
+ self.setZStrctNodeAspects(choiceStrctNodes[breakdownLeafNbr], add=False)
414
464
  i = combobox.valueIndex
415
- self.zOrdinateChoices[combobox.zStructuralNode.definitionNode] = structuralNode.choiceNodeIndex = i
465
+ self.zBreakdownLeafNbr[breakdownRow] = i
416
466
  # set current combo choice aspect
417
- self.setZStructuralNodeAspects(structuralNode.choiceStructuralNodes[i])
467
+ self.setZStrctNodeAspects(choiceStrctNodes[i])
418
468
  self.view() # redraw grid
419
469
 
420
- def xAxis(self, leftCol, topRow, rowBelow, xParentStructuralNode, xStructuralNodes, childrenFirst, renderNow, atTop):
421
- if xParentStructuralNode is not None:
422
- parentRow = rowBelow
423
- noDescendants = True
424
- rightCol = leftCol
425
- widthToSpanParent = 0
426
- for xStructuralNode in xParentStructuralNode.childStructuralNodes:
427
- if not xStructuralNode.isRollUp:
428
- noDescendants = False
429
- isLabeled = xStructuralNode.isLabeled
430
- isAbstract = (xStructuralNode.isAbstract or
431
- (xStructuralNode.childStructuralNodes and
432
- not isinstance(xStructuralNode.definitionNode, (ModelClosedDefinitionNode, ModelEuAxisCoord))))
433
- isNonAbstract = not isAbstract
434
- rightCol, row, width, leafNode = self.xAxis(leftCol, topRow + isLabeled, rowBelow, xStructuralNode, xStructuralNodes, # nested items before totals
435
- childrenFirst, childrenFirst, False)
436
- if row - 1 < parentRow:
437
- parentRow = row - 1
438
- #if not leafNode:
439
- # rightCol -= 1
440
- if isNonAbstract and isLabeled:
441
- width += ENTRY_WIDTH_SCREEN_UNITS # width for this label, in screen units
442
- widthToSpanParent += width
443
- if childrenFirst:
444
- thisCol = rightCol
445
- else:
446
- thisCol = leftCol
447
- if renderNow and isLabeled:
448
- columnspan = (rightCol - leftCol + (1 if isNonAbstract else 0))
449
- label = xStructuralNode.header(lang=self.lang,
450
- returnGenLabel=isinstance(xStructuralNode.definitionNode, (ModelClosedDefinitionNode, ModelEuAxisCoord)))
451
- if label != OPEN_ASPECT_ENTRY_SURROGATE:
452
- xValue = leftCol-1
453
- yValue = topRow-1
454
- headerLabel = label if label else " "
455
- self.table.initHeaderCellValue(headerLabel,
456
- xValue, yValue,
457
- columnspan-1,
458
- ((row - topRow) if leafNode else 0),
459
- XbrlTable.TG_CENTERED,
460
- objectId=xStructuralNode.objectId(),
461
- isRollUp=columnspan>1 and isNonAbstract and len(xStructuralNode.childStructuralNodes)<columnspan)
462
- else:
463
- self.aspectEntryObjectIdsNode[xStructuralNode.aspectEntryObjectId] = xStructuralNode
464
- self.aspectEntryObjectIdsCell[xStructuralNode.aspectEntryObjectId] = self.table.initHeaderCombobox(leftCol-1,
465
- topRow-1,
466
- values=self.aspectEntryValues(xStructuralNode),
467
- objectId=xStructuralNode.aspectEntryObjectId,
468
- comboboxselected=self.onAspectComboboxSelection)
469
- if isNonAbstract:
470
- xValue = thisCol - 1
471
- for i, role in enumerate(self.colHdrNonStdRoles):
472
- j = (self.dataFirstRow
473
- - len(self.colHdrNonStdRoles) + i)-1
474
- self.table.initHeaderCellValue(xStructuralNode.header(role=role, lang=self.lang),
475
- xValue,
476
- j,
477
- 0,
478
- 0,
479
- XbrlTable.TG_CENTERED,
480
- objectId=xStructuralNode.objectId())
481
- xStructuralNodes.append(xStructuralNode)
482
- if isNonAbstract:
483
- rightCol += 1
484
- if renderNow and not childrenFirst:
485
- self.xAxis(leftCol + (1 if isNonAbstract else 0), topRow + isLabeled, rowBelow, xStructuralNode, xStructuralNodes, childrenFirst, True, False) # render on this pass
486
- leftCol = rightCol
487
- return (rightCol, parentRow, widthToSpanParent, noDescendants)
488
- return (leftCol, rowBelow, 0, True) # nothing to do return
489
-
490
- def yAxis(self, leftCol, row, yParentStructuralNode, childrenFirst, renderNow, atLeft):
491
- if yParentStructuralNode is not None:
492
- nestedBottomRow = row
493
- for yStructuralNode in yParentStructuralNode.childStructuralNodes:
494
- if not yStructuralNode.isRollUp:
495
- isAbstract = (yStructuralNode.isAbstract or
496
- (yStructuralNode.childStructuralNodes and
497
- not isinstance(yStructuralNode.definitionNode, (ModelClosedDefinitionNode, ModelEuAxisCoord))))
498
- isNonAbstract = not isAbstract
499
- isLabeled = yStructuralNode.isLabeled
500
- nestRow, nextRow = self.yAxis(leftCol + isLabeled, row, yStructuralNode, # nested items before totals
501
- childrenFirst, childrenFirst, False)
502
-
503
- topRow = row
504
- if childrenFirst and isNonAbstract:
505
- row = nextRow
506
- if renderNow and isLabeled:
507
- columnspan = self.rowHdrCols - leftCol + 1 if isNonAbstract or nextRow == row else 1
508
- depth = yStructuralNode.depth
509
- wraplength = (self.rowHdrColWidth[depth] if isAbstract else
510
- self.rowHdrWrapLength - sum(self.rowHdrColWidth[0:depth]))
511
- if wraplength < 0:
512
- wraplength = self.rowHdrColWidth[depth]
513
- label = yStructuralNode.header(lang=self.lang,
514
- returnGenLabel=isinstance(yStructuralNode.definitionNode, (ModelClosedDefinitionNode, ModelEuAxisCoord)),
515
- recurseParent=not isinstance(yStructuralNode.definitionNode, ModelFilterDefinitionNode))
516
- if label != OPEN_ASPECT_ENTRY_SURROGATE:
517
- xValue = leftCol-1
518
- yValue = row-1
519
- self.table.initHeaderCellValue(label if label is not None else " ",
520
- xValue, yValue,
521
- columnspan-1,
522
- (nestRow - row if isAbstract else 1)-1,
523
- (XbrlTable.TG_LEFT_JUSTIFIED
524
- if isNonAbstract or nestRow == row
525
- else XbrlTable.TG_CENTERED),
526
- objectId=yStructuralNode.objectId(),
527
- isRollUp=columnspan>1 and isNonAbstract and (len(yStructuralNode.childStructuralNodes)>1 or (len(yStructuralNode.childStructuralNodes)==1 and not(yStructuralNode.childStructuralNodes[0].isAbstract))))
528
- else:
529
- self.aspectEntryObjectIdsNode[yStructuralNode.aspectEntryObjectId] = yStructuralNode
530
- self.aspectEntryObjectIdsCell[yStructuralNode.aspectEntryObjectId] = self.table.initHeaderCombobox(leftCol-1,
531
- row-1,
532
- values=self.aspectEntryValues(yStructuralNode),
533
- objectId=yStructuralNode.aspectEntryObjectId,
534
- comboboxselected=self.onAspectComboboxSelection)
535
- if isNonAbstract:
536
- for i, role in enumerate(self.rowHdrNonStdRoles):
537
- isCode = "code" in role
538
- docCol = self.dataFirstCol - len(self.rowHdrNonStdRoles) + i-1
539
- yValue = row-1
540
- self.table.initHeaderCellValue(yStructuralNode.header(role=role, lang=self.lang),
541
- docCol, yValue,
542
- 0, 0,
543
- XbrlTable.TG_CENTERED if isCode else XbrlTable.TG_RIGHT_JUSTIFIED,
544
- objectId=yStructuralNode.objectId())
545
- if isNonAbstract:
546
- row += 1
547
- elif childrenFirst:
548
- row = nextRow
549
- if nestRow > nestedBottomRow:
550
- nestedBottomRow = nestRow + (isNonAbstract and not childrenFirst)
551
- if row > nestedBottomRow:
552
- nestedBottomRow = row
553
- #if renderNow and not childrenFirst:
554
- # dummy, row = self.yAxis(leftCol + 1, row, yStructuralNode, childrenFirst, True, False) # render on this pass
555
- if not childrenFirst:
556
- dummy, row = self.yAxis(leftCol + isLabeled, row, yStructuralNode, childrenFirst, renderNow, False) # render on this pass
557
- return (nestedBottomRow, row)
558
- return (None, row)
470
+ def xAxis(self, leftCol, topRow, rowBelow, xParentStrctNode, xStrctNodes, renderNow, atTop):
471
+ parentRow = rowBelow
472
+ noDescendants = True
473
+ rightCol = leftCol
474
+ widthToSpanParent = 0
475
+ for xStrctNode in xParentStrctNode.strctMdlChildNodes: # strctMdlEffectiveChildNodes:
476
+ xDefnMdlNode = xStrctNode.defnMdlNode
477
+ childrenFirst = not xDefnMdlNode.childrenCoverSameAspects or xDefnMdlNode.parentChildOrder == "children-first"
478
+ noDescendants = False
479
+ isLabeled = xStrctNode.isLabeled
480
+ isAbstract = (xStrctNode.isAbstract or
481
+ (xStrctNode.strctMdlChildNodes and
482
+ not isinstance(xDefnMdlNode, DefnMdlClosedDefinitionNode)))
483
+ isNonAbstract = not isAbstract
484
+ rightCol, row, width, leafNode = self.xAxis(leftCol, topRow + isLabeled, rowBelow, xStrctNode, xStrctNodes, # nested items before totals
485
+ True, #childrenFirst,
486
+ False)
487
+ if row - 1 < parentRow:
488
+ parentRow = row - 1
489
+ #if not leafNode:
490
+ # rightCol -= 1
491
+ if isNonAbstract and isLabeled:
492
+ width += ENTRY_WIDTH_SCREEN_UNITS # width for this label, in screen units
493
+ widthToSpanParent += width
494
+ #if childrenFirst:
495
+ # thisCol = rightCol
496
+ #else:
497
+ # thisCol = leftCol
498
+ thisCol = leftCol
499
+ if renderNow and isLabeled:
500
+ columnspan = (rightCol - leftCol) # + (1 if isNonAbstract else 0))
501
+ label = xStrctNode.header(lang=self.lang,
502
+ returnGenLabel=isinstance(xDefnMdlNode, DefnMdlClosedDefinitionNode), layoutMdlSortOrder=True)
503
+ xValue = leftCol
504
+ yValue = topRow
505
+ headerLabel = label if label else " "
506
+ isRollUpParent = isNonAbstract and ((len(xStrctNode.strctMdlChildNodes)>1) or (len(xStrctNode.strctMdlChildNodes)==1 and not(xStrctNode.strctMdlChildNodes[0].isAbstract)))
507
+
508
+ rowspan = (self.dataFirstRow - topRow) if isNonAbstract and isRollUpParent and len(xStrctNode.strctMdlChildNodes)==1 and not xStrctNode.rollup else 0
509
+ if isRollUpParent:
510
+ columnspan += 1
511
+ if xStrctNode.rollup:
512
+ headerLabel = None # just set span to block borders
513
+ if label != OPEN_ASPECT_ENTRY_SURROGATE:
514
+ if TRACE_TK: print(f"xAxis hdr x {xValue} y {yValue} cols {columnspan} rows {rowspan} isRollUpParent {isRollUpParent} value \"{headerLabel}\"")
515
+ self.table.initHeaderCellValue(headerLabel,
516
+ xValue, yValue,
517
+ columnspan - 1,
518
+ rowspan - 1,
519
+ XbrlTable.TG_CENTERED,
520
+ objectId=xStrctNode.objectId(),
521
+ hasTopBorder=not (yValue > 0 and headerLabel is None),
522
+ hasBottomBorder=not isRollUpParent)
523
+ else:
524
+ self.aspectEntryObjectIdsNode[xStrctNode.aspectEntryObjectId] = xStrctNode
525
+ if TRACE_TK: print(f"xAxis hdr combobox x {leftCol-1} y {topRow-1} values {self.aspectEntryValues(xStrctNode)}")
526
+ self.aspectEntryObjectIdsCell[xStrctNode.aspectEntryObjectId] = self.table.initHeaderCombobox(leftCol-1,
527
+ topRow-1,
528
+ values=self.aspectEntryValues(xStrctNode),
529
+ objectId=xStrctNode.aspectEntryObjectId,
530
+ comboboxselected=self.onAspectComboboxSelection)
531
+ if not xStrctNode.strctMdlChildNodes: # isNonAbstract:
532
+ xValue = thisCol
533
+ for i, role in enumerate(self.colHdrNonStdRoles):
534
+ j = (self.dataFirstRow - len(self.colHdrNonStdRoles) + i)
535
+ if TRACE_TK: print(f"xAxis hdr lbl x {xValue} y {j} value \"{xStrctNode.header(role=role, lang=self.lang)}\"")
536
+ self.table.initHeaderCellValue(xStrctNode.header(role=role, lang=self.lang),
537
+ xValue,
538
+ j,
539
+ 0,
540
+ 0,
541
+ XbrlTable.TG_CENTERED,
542
+ objectId=xStrctNode.objectId())
543
+ xStrctNodes.append(xStrctNode)
544
+ if isNonAbstract and not xStrctNode.rollup:
545
+ rightCol += 1
546
+ #if renderNow: # and not childrenFirst:
547
+ # self.xAxis(leftCol + (1 if isNonAbstract else 0), topRow + isLabeled, rowBelow, xStrctNode, xStrctNodes, True, False) # render on this pass
548
+ leftCol = rightCol
549
+ return (rightCol, parentRow, widthToSpanParent, noDescendants)
550
+
551
+ def yAxis(self, leftCol, row, yParentStrctNode, renderNow, atLeft):
552
+ noDescendants = True
553
+ nestedBottomRow = row
554
+ rowspan = 1
555
+ columnspan = 1
556
+ for yOrdinal, yStrctNode in enumerate(yParentStrctNode.strctMdlChildNodes): # strctMdlEffectiveChildNodes:
557
+ yDefnMdlNode = yStrctNode.defnMdlNode
558
+ childrenFirst = not yDefnMdlNode.childrenCoverSameAspects or yDefnMdlNode.parentChildOrder == "children-first"
559
+ noDescendants = False
560
+ isAbstract = (yStrctNode.isAbstract or
561
+ (yStrctNode.strctMdlChildNodes and
562
+ not isinstance(yDefnMdlNode, DefnMdlClosedDefinitionNode)))
563
+ isNonAbstract = not isAbstract
564
+ isLabeled = yStrctNode.isLabeled
565
+ nestRow, nextRow, leafNode, nestedColumnspan, nestedRowspan = self.yAxis(
566
+ leftCol + isLabeled, row, yStrctNode, # nested items before totals
567
+ True, # childrenFirst,
568
+ False)
569
+
570
+ topRow = row
571
+ #if childrenFirst and isNonAbstract:
572
+ # row = nextRow
573
+ if renderNow and isLabeled:
574
+ columnspan = 1 # self.rowHdrCols - leftCol # + 1 if isNonAbstract else 0
575
+ depth = yStrctNode.depth
576
+ wraplength = (self.rowHdrColWidth[depth] if isAbstract else
577
+ self.rowHdrWrapLength - sum(self.rowHdrColWidth[0:depth]))
578
+ if wraplength < 0:
579
+ wraplength = self.rowHdrColWidth[depth]
580
+ label = yStrctNode.header(lang=self.lang, layoutMdlSortOrder=True,
581
+ returnGenLabel=isinstance(yDefnMdlNode, DefnMdlClosedDefinitionNode),
582
+ recurseParent=not isinstance(yDefnMdlNode, DefnMdlAspectNode))
583
+ headerLabel = label if label else " "
584
+ if yStrctNode.rollup:
585
+ headerLabel = None # just set span to block borders
586
+
587
+ xValue = leftCol
588
+ yValue = row
589
+ rowspan = nestRow - row
590
+ isRollUpParent = rowspan>1 and isNonAbstract and (len(yStrctNode.strctMdlChildNodes)>1 or (len(yStrctNode.strctMdlChildNodes)==1 and not(yStrctNode.strctMdlChildNodes[0].isAbstract)))
591
+ columnspan = self.dataFirstCol - xValue if isNonAbstract and not isRollUpParent and len(yStrctNode.strctMdlChildNodes)==1 and not yStrctNode.rollup else 1
592
+
593
+ if isRollUpParent:
594
+ row = nextRow - 1
595
+ if yOrdinal == 0 and yStrctNode.rollup:
596
+ pass # leftmost spanning cells covers this cell
597
+ if label != OPEN_ASPECT_ENTRY_SURROGATE:
598
+ hasTopBorder = True
599
+ if rowspan > 1 and yOrdinal == 0 and isRollUpParent and yStrctNode.parentChildOrder == "parent-first":
600
+ if TRACE_TK: print(f"yAxis hdr x {xValue} y {yValue} cols {columnspan + nestedColumnspan} rows {rowspan} rollup {yStrctNode.rollup} value \"{headerLabel}\"")
601
+ self.table.initHeaderCellValue(headerLabel,
602
+ xValue, yValue,
603
+ columnspan + nestedColumnspan - 1,
604
+ nestedRowspan - 1,
605
+ XbrlTable.TG_LEFT_JUSTIFIED,
606
+ objectId=yStrctNode.objectId(),
607
+ hasBottomBorder = not isRollUpParent,
608
+ width=3 if yStrctNode.rollup else None)
609
+ rowspan -= nestedRowspan
610
+ yValue += nestedRowspan
611
+ headerLabel = None
612
+ hasTopBorder = not isRollUpParent
613
+ if TRACE_TK: print(f"yAxis hdr x {xValue} y {yValue} cols {columnspan} rows {rowspan} isRollUpParent {isRollUpParent} value \"{headerLabel}\"")
614
+ # put column-spanning labels on top row of the span across columns, otherwise centered on left
615
+ self.table.initHeaderCellValue(headerLabel,
616
+ xValue, yValue,
617
+ columnspan - 1,
618
+ rowspan - 1,
619
+ (XbrlTable.TG_LEFT_JUSTIFIED
620
+ if isNonAbstract or nestRow == row
621
+ else XbrlTable.TG_CENTERED),
622
+ objectId=yStrctNode.objectId(),
623
+ hasLeftBorder=not (xValue > 0 and headerLabel is None),
624
+ hasRightBorder=not bool(yStrctNode.rollup) and not isRollUpParent,
625
+ hasTopBorder=hasTopBorder,
626
+ width=3 if isRollUpParent else None)
627
+
628
+ else:
629
+ self.aspectEntryObjectIdsNode[yStrctNode.aspectEntryObjectId] = yStrctNode
630
+ if TRACE_TK: print(f"yAxis hdr combobox x {leftCol-1} y {row-1} values {self.aspectEntryValues(yStrctNode)}")
631
+ self.aspectEntryObjectIdsCell[yStrctNode.aspectEntryObjectId] = self.table.initHeaderCombobox(leftCol-1,
632
+ row-1,
633
+ values=self.aspectEntryValues(yStrctNode),
634
+ objectId=yStrctNode.aspectEntryObjectId,
635
+ comboboxselected=self.onAspectComboboxSelection)
636
+ if isNonAbstract:
637
+ for i, role in enumerate(self.rowHdrNonStdRoles):
638
+ isCode = "code" in role
639
+ docCol = self.dataFirstCol - len(self.rowHdrNonStdRoles) + i
640
+ yValue = row
641
+ if TRACE_TK: print(f"yAxis hdr lbl x {docCol} y {yValue} value \"{yStrctNode.header(role=role, lang=self.lang)}\"")
642
+ self.table.initHeaderCellValue(yStrctNode.header(role=role, lang=self.lang),
643
+ docCol, yValue,
644
+ 0, 0,
645
+ XbrlTable.TG_CENTERED if isCode else XbrlTable.TG_RIGHT_JUSTIFIED,
646
+ objectId=yStrctNode.objectId())
647
+ if isNonAbstract:
648
+ row += 1
649
+ else:
650
+ row = nextRow
651
+ #elif childrenFirst:
652
+ # row = nextRow
653
+ if nestRow > nestedBottomRow:
654
+ nestedBottomRow = nestRow + (isNonAbstract and not childrenFirst)
655
+ if row > nestedBottomRow:
656
+ nestedBottomRow = row
657
+ #if renderNow and not childrenFirst:
658
+ # dummy, row = self.yAxis(leftCol + 1, row, yStrctNode, childrenFirst, True, False) # render on this pass
659
+ #if not childrenFirst:
660
+ # dummy, row = self.yAxis(leftCol + isLabeled, row, yStrctNode, childrenFirst, renderNow, False) # render on this pass
661
+ return (nestedBottomRow, row, noDescendants, columnspan, rowspan)
559
662
 
560
663
  def getbackgroundColor(self, factPrototype):
561
664
  bgColor = XbrlTable.TG_BG_DEFAULT # default monetary
@@ -580,54 +683,56 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
580
683
  bgColor = XbrlTable.TG_BG_VIOLET
581
684
  return bgColor;
582
685
 
583
- def bodyCells(self, row, yParentStructuralNode, xStructuralNodes, zAspectStructuralNodes, yChildrenFirst):
584
- if yParentStructuralNode is not None:
686
+ def bodyCells(self, row, yParentStrctNode, xStrctNodes, zAspectStrctNodes):
687
+ if yParentStrctNode is not None:
585
688
  dimDefaults = self.modelXbrl.qnameDimensionDefaults
586
- for yStructuralNode in yParentStructuralNode.childStructuralNodes:
689
+ for yStrctNode in yParentStrctNode.strctMdlChildNodes: # strctMdlEffectiveChildNodes:
690
+ yDefnMdlNode = yStrctNode.defnMdlNode
691
+ yChildrenFirst = not yDefnMdlNode.childrenCoverSameAspects or yDefnMdlNode.parentChildOrder == "children-first"
587
692
  if yChildrenFirst:
588
- row = self.bodyCells(row, yStructuralNode, xStructuralNodes, zAspectStructuralNodes, yChildrenFirst)
589
- if not (yStructuralNode.isAbstract or
590
- (yStructuralNode.childStructuralNodes and
591
- not isinstance(yStructuralNode.definitionNode, (ModelClosedDefinitionNode, ModelEuAxisCoord)))) and yStructuralNode.isLabeled:
592
- isYEntryPrototype = yStructuralNode.isEntryPrototype(default=False) # row to enter open aspects
593
- yAspectStructuralNodes = defaultdict(set)
594
- for aspect in aspectModels[self.aspectModel]:
595
- if yStructuralNode.hasAspect(aspect):
693
+ row = self.bodyCells(row, yStrctNode, xStrctNodes, zAspectStrctNodes)
694
+ if not (yStrctNode.isAbstract or
695
+ (yStrctNode.strctMdlChildNodes and
696
+ not isinstance(yStrctNode.defnMdlNode, DefnMdlClosedDefinitionNode))) and yStrctNode.isLabeled:
697
+ isYEntryPrototype = yStrctNode.isEntryPrototype(default=False) # row to enter open aspects
698
+ yAspectStrctNodes = defaultdict(set)
699
+ for aspect in aspectModels["dimensional"] | yStrctNode.aspectsCovered():
700
+ if yStrctNode.hasAspect(aspect):
596
701
  if aspect == Aspect.DIMENSIONS:
597
- for dim in (yStructuralNode.aspectValue(Aspect.DIMENSIONS) or emptyList):
598
- yAspectStructuralNodes[dim].add(yStructuralNode)
702
+ for dim in (yStrctNode.aspectValue(Aspect.DIMENSIONS) or emptyList):
703
+ yAspectStrctNodes[dim].add(yStrctNode)
599
704
  else:
600
- yAspectStructuralNodes[aspect].add(yStructuralNode)
601
- yTagSelectors = yStructuralNode.tagSelectors
705
+ yAspectStrctNodes[aspect].add(yStrctNode)
706
+ yTagSelectors = yStrctNode.tagSelectors
602
707
  # data for columns of row
603
- #print ("row " + str(row) + "yNode " + yStructuralNode.definitionNode.objectId() )
708
+ #print ("row " + str(row) + "yNode " + yStrctNode.defnMdlNode.objectId() )
604
709
  ignoreDimValidity = self.ignoreDimValidity.get()
605
710
 
606
711
  # Reuse already computed facts partition in case of open Y axis
607
- if True and hasattr(yStructuralNode, "factsPartition"):
608
- factsPartition = yStructuralNode.factsPartition
712
+ if True and hasattr(yStrctNode, "factsPartition"):
713
+ factsPartition = yStrctNode.factsPartition
609
714
  else:
610
715
  factsPartition = None
611
716
 
612
- for i, xStructuralNode in enumerate(xStructuralNodes):
613
- isEntryPrototype = isYEntryPrototype or xStructuralNode.isEntryPrototype(default=False)
614
- xAspectStructuralNodes = defaultdict(set)
615
- for aspect in aspectModels[self.aspectModel]:
616
- if xStructuralNode.hasAspect(aspect):
717
+ for i, xStrctNode in enumerate(xStrctNodes):
718
+ isEntryPrototype = isYEntryPrototype or xStrctNode.isEntryPrototype(default=False)
719
+ xAspectStrctNodes = defaultdict(set)
720
+ for aspect in aspectModels["dimensional"] | xStrctNode.aspectsCovered():
721
+ if xStrctNode.hasAspect(aspect):
617
722
  if aspect == Aspect.DIMENSIONS:
618
- for dim in (xStructuralNode.aspectValue(Aspect.DIMENSIONS) or emptyList):
619
- xAspectStructuralNodes[dim].add(xStructuralNode)
723
+ for dim in (xStrctNode.aspectValue(Aspect.DIMENSIONS) or emptyList):
724
+ xAspectStrctNodes[dim].add(xStrctNode)
620
725
  else:
621
- xAspectStructuralNodes[aspect].add(xStructuralNode)
622
- cellTagSelectors = yTagSelectors | xStructuralNode.tagSelectors
726
+ xAspectStrctNodes[aspect].add(xStrctNode)
727
+ cellTagSelectors = yTagSelectors | xStrctNode.tagSelectors
623
728
  cellAspectValues = {}
624
729
  matchableAspects = set()
625
- for aspect in xAspectStructuralNodes.keys() | yAspectStructuralNodes.keys() | zAspectStructuralNodes.keys():
626
- aspectValue = xStructuralNode.inheritedAspectValue(yStructuralNode,
730
+ for aspect in xAspectStrctNodes.keys() | yAspectStrctNodes.keys() | zAspectStrctNodes.keys():
731
+ aspectValue = xStrctNode.inheritedAspectValue(yStrctNode,
627
732
  self, aspect, cellTagSelectors,
628
- xAspectStructuralNodes, yAspectStructuralNodes, zAspectStructuralNodes)
733
+ xAspectStrctNodes, yAspectStrctNodes, zAspectStrctNodes)
629
734
  # value is None for a dimension whose value is to be not reported in this slice
630
- if (isinstance(aspect, int) or # not a dimension
735
+ if (isinstance(aspect, Number) or # not a dimension
631
736
  dimDefaults.get(aspect) != aspectValue or # explicit dim defaulted will equal the value
632
737
  aspectValue is not None): # typed dim absent will be none
633
738
  cellAspectValues[aspect] = aspectValue
@@ -645,7 +750,7 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
645
750
  # reduce set of matchable facts to those with pri item qname and have dimension aspects
646
751
  facts = self.modelXbrl.factsByQname[priItemQname] if priItemQname else self.modelXbrl.factsInInstance
647
752
  if self.hasTableFilters:
648
- facts = self.modelTable.filterFacts(self.rendrCntx, facts)
753
+ facts = self.defnMdlTable.filteredFacts(self.rendrCntx, facts)
649
754
  for aspect in matchableAspects: # trim down facts with explicit dimensions match or just present
650
755
  if isinstance(aspect, QName):
651
756
  aspectValue = cellAspectValues.get(aspect, None)
@@ -669,8 +774,8 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
669
774
  all(fact.context.dimMemberQname(dim,includeDefaults=True) in (dimDefaults[dim], None)
670
775
  for dim in cellDefaultedDims) and
671
776
  len(fp.context.qnameDims) == len(fact.context.qnameDims)):
672
- if yStructuralNode.hasValueExpression(xStructuralNode):
673
- value = yStructuralNode.evalValueExpression(fact, xStructuralNode)
777
+ if yStrctNode.hasValueExpression(xStrctNode):
778
+ value = yStrctNode.evalValueExpression(fact, xStrctNode)
674
779
  else:
675
780
  value = fact.effectiveValue
676
781
  objectId = fact.objectId()
@@ -710,6 +815,7 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
710
815
  selectedIdx = 0
711
816
  xValue = self.dataFirstCol + i-1
712
817
  yValue = row-1
818
+ if TRACE_TK: print(f"body comboBox enums x {xValue} y {yValue} values {effectiveValue} value {enumerationValues}")
713
819
  self.table.initCellCombobox(effectiveValue,
714
820
  enumerationValues,
715
821
  xValue,
@@ -748,8 +854,9 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
748
854
  else:
749
855
  newAspectValues = None
750
856
  if newAspectValues is None:
751
- xValue = self.dataFirstCol + i-1
752
- yValue = row-1
857
+ xValue = self.dataFirstCol + i
858
+ yValue = row
859
+ if TRACE_TK: print(f"body cell qname x {xValue} y {yValue} value {value}")
753
860
  self.table.initCellValue(value,
754
861
  xValue,
755
862
  yValue,
@@ -764,8 +871,9 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
764
871
  except ValueError:
765
872
  effectiveValue = qNameValues[0]
766
873
  selectedIdx = 0
767
- xValue = self.dataFirstCol + i-1
768
- yValue = row-1
874
+ xValue = self.dataFirstCol + i
875
+ yValue = row
876
+ if TRACE_TK: print(f"body comboBox qnames x {xValue} y {yValue} values {effectiveValue} value {qNameValues}")
769
877
  self.table.initCellCombobox(effectiveValue,
770
878
  qNameValues,
771
879
  xValue,
@@ -783,8 +891,9 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
783
891
  except ValueError:
784
892
  effectiveValue = booleanValues[0]
785
893
  selectedIdx = 0
786
- xValue = self.dataFirstCol + i-1
787
- yValue = row-1
894
+ xValue = self.dataFirstCol + i
895
+ yValue = row
896
+ if TRACE_TK: print(f"body comboBox bools x {xValue} y {yValue} values {effectiveValue} value {booleanValues}")
788
897
  self.table.initCellCombobox(effectiveValue,
789
898
  booleanValues,
790
899
  xValue,
@@ -792,8 +901,9 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
792
901
  objectId=objectId,
793
902
  selectindex=selectedIdx)
794
903
  else:
795
- xValue = self.dataFirstCol + i-1
796
- yValue = row-1
904
+ xValue = self.dataFirstCol + i
905
+ yValue = row
906
+ if TRACE_TK: print(f"body cell x {xValue} y {yValue} value {value}")
797
907
  self.table.initCellValue(value,
798
908
  xValue,
799
909
  yValue,
@@ -804,7 +914,7 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
804
914
  fp.clear() # dereference
805
915
  row += 1
806
916
  if not yChildrenFirst:
807
- row = self.bodyCells(row, yStructuralNode, xStructuralNodes, zAspectStructuralNodes, yChildrenFirst)
917
+ row = self.bodyCells(row, yStrctNode, xStrctNodes, zAspectStrctNodes)
808
918
  return row
809
919
 
810
920
  def onClick(self, event):
@@ -1100,7 +1210,7 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
1100
1210
  break
1101
1211
  gridCellItem = self.aspectEntryObjectIdsCell[aspectObjId]
1102
1212
  value = gridCellItem.get()
1103
- # is aspect in a childStructuralNode?
1213
+ # is aspect in a childStrctNode?
1104
1214
  if value is not None and OPEN_ASPECT_ENTRY_SURROGATE in aspectObjId and len(value)==0:
1105
1215
  return None # some values are missing!
1106
1216
  if value:
@@ -1127,23 +1237,23 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
1127
1237
  # otherwise return aspect value matching header if any
1128
1238
  depth = 0
1129
1239
  n = structuralNode
1130
- while (n.parentStructuralNode is not None):
1240
+ while (n.strctMdlParentNode is not None):
1131
1241
  depth += 1
1132
- root = n = n.parentStructuralNode
1242
+ root = n = n.strctMdlParentNode
1133
1243
 
1134
1244
  headers = set()
1135
1245
  headerValues = {}
1136
1246
  def getHeaders(n, d):
1137
- for childStructuralNode in n.childStructuralNodes:
1247
+ for childStrctNode in n.strctMdlChildNodes:
1138
1248
  if d == depth:
1139
- h = childStructuralNode.header(lang=self.lang,
1249
+ h = childStrctNode.header(lang=self.lang,
1140
1250
  returnGenLabel=False,
1141
1251
  returnMsgFormatString=False)
1142
- if not childStructuralNode.isEntryPrototype() and h:
1143
- headerValues[h] = childStructuralNode.aspectValue(aspect)
1252
+ if not childStrctNode.isEntryPrototype() and h:
1253
+ headerValues[h] = childStrctNode.aspectValue(aspect)
1144
1254
  headers.add(h)
1145
1255
  else:
1146
- getHeaders(childStructuralNode, d+1)
1256
+ getHeaders(childStrctNode, d+1)
1147
1257
  getHeaders(root, 1)
1148
1258
 
1149
1259
  structuralNode.aspectEntryHeaderValues = headerValues
@@ -1175,7 +1285,7 @@ class ViewRenderedGrid(ViewWinTkTable.ViewTkTable):
1175
1285
  if structuralNode is not None:
1176
1286
  headerValues = {}
1177
1287
  # check for dimension filter(s)
1178
- dimFilterRels = structuralNodeWithFilter.definitionNode.filterRelationships
1288
+ dimFilterRels = structuralNodeWithFilter.defnMdlNode.filterRelationships
1179
1289
  if dimFilterRels:
1180
1290
  for rel in dimFilterRels:
1181
1291
  dimFilter = rel.toModelObject