python-pptx2 2.13.0__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 (175) hide show
  1. pptx2/__init__.py +152 -0
  2. pptx2/_color.py +75 -0
  3. pptx2/_slide_importer.py +597 -0
  4. pptx2/_svg.py +155 -0
  5. pptx2/_template_applier.py +292 -0
  6. pptx2/_textstyle.py +187 -0
  7. pptx2/accessibility.py +365 -0
  8. pptx2/action.py +270 -0
  9. pptx2/animation.py +2237 -0
  10. pptx2/api.py +49 -0
  11. pptx2/audit.py +258 -0
  12. pptx2/chart/__init__.py +0 -0
  13. pptx2/chart/analytics.py +381 -0
  14. pptx2/chart/axis.py +543 -0
  15. pptx2/chart/category.py +200 -0
  16. pptx2/chart/chart.py +670 -0
  17. pptx2/chart/data.py +864 -0
  18. pptx2/chart/datalabel.py +406 -0
  19. pptx2/chart/legend.py +86 -0
  20. pptx2/chart/marker.py +70 -0
  21. pptx2/chart/palettes.py +129 -0
  22. pptx2/chart/plot.py +462 -0
  23. pptx2/chart/point.py +101 -0
  24. pptx2/chart/quick_layouts.py +325 -0
  25. pptx2/chart/series.py +334 -0
  26. pptx2/chart/xlsx.py +272 -0
  27. pptx2/chart/xmlwriter.py +1845 -0
  28. pptx2/compose/__init__.py +28 -0
  29. pptx2/compose/from_spec.py +1094 -0
  30. pptx2/design/__init__.py +8 -0
  31. pptx2/design/components.py +607 -0
  32. pptx2/design/figures.py +389 -0
  33. pptx2/design/layout.py +370 -0
  34. pptx2/design/recipes.py +1967 -0
  35. pptx2/design/style.py +209 -0
  36. pptx2/design/tokens.py +915 -0
  37. pptx2/diagrams.py +754 -0
  38. pptx2/dml/__init__.py +0 -0
  39. pptx2/dml/chtfmt.py +40 -0
  40. pptx2/dml/color.py +496 -0
  41. pptx2/dml/effect.py +909 -0
  42. pptx2/dml/fill.py +691 -0
  43. pptx2/dml/line.py +287 -0
  44. pptx2/dml/picture.py +212 -0
  45. pptx2/dml/three_d.py +381 -0
  46. pptx2/enum/__init__.py +0 -0
  47. pptx2/enum/action.py +71 -0
  48. pptx2/enum/animation.py +31 -0
  49. pptx2/enum/base.py +218 -0
  50. pptx2/enum/chart.py +574 -0
  51. pptx2/enum/dml.py +740 -0
  52. pptx2/enum/lang.py +685 -0
  53. pptx2/enum/presentation.py +133 -0
  54. pptx2/enum/shapes.py +1029 -0
  55. pptx2/enum/text.py +230 -0
  56. pptx2/exc.py +42 -0
  57. pptx2/formats.py +139 -0
  58. pptx2/geometry.py +420 -0
  59. pptx2/inherit.py +109 -0
  60. pptx2/lint.py +2256 -0
  61. pptx2/math.py +177 -0
  62. pptx2/media.py +197 -0
  63. pptx2/opc/__init__.py +0 -0
  64. pptx2/opc/constants.py +332 -0
  65. pptx2/opc/oxml.py +188 -0
  66. pptx2/opc/package.py +762 -0
  67. pptx2/opc/packuri.py +109 -0
  68. pptx2/opc/serialized.py +296 -0
  69. pptx2/opc/shared.py +20 -0
  70. pptx2/opc/spec.py +45 -0
  71. pptx2/oxml/__init__.py +555 -0
  72. pptx2/oxml/action.py +53 -0
  73. pptx2/oxml/chart/__init__.py +0 -0
  74. pptx2/oxml/chart/axis.py +337 -0
  75. pptx2/oxml/chart/chart.py +481 -0
  76. pptx2/oxml/chart/datalabel.py +253 -0
  77. pptx2/oxml/chart/legend.py +72 -0
  78. pptx2/oxml/chart/marker.py +61 -0
  79. pptx2/oxml/chart/plot.py +365 -0
  80. pptx2/oxml/chart/series.py +425 -0
  81. pptx2/oxml/chart/shared.py +220 -0
  82. pptx2/oxml/coreprops.py +288 -0
  83. pptx2/oxml/dml/__init__.py +0 -0
  84. pptx2/oxml/dml/color.py +135 -0
  85. pptx2/oxml/dml/effect.py +213 -0
  86. pptx2/oxml/dml/fill.py +316 -0
  87. pptx2/oxml/dml/line.py +12 -0
  88. pptx2/oxml/dml/three_d.py +110 -0
  89. pptx2/oxml/ns.py +135 -0
  90. pptx2/oxml/presentation.py +313 -0
  91. pptx2/oxml/shapes/__init__.py +19 -0
  92. pptx2/oxml/shapes/autoshape.py +467 -0
  93. pptx2/oxml/shapes/connector.py +107 -0
  94. pptx2/oxml/shapes/graphfrm.py +347 -0
  95. pptx2/oxml/shapes/groupshape.py +329 -0
  96. pptx2/oxml/shapes/picture.py +270 -0
  97. pptx2/oxml/shapes/shared.py +577 -0
  98. pptx2/oxml/simpletypes.py +1027 -0
  99. pptx2/oxml/slide.py +563 -0
  100. pptx2/oxml/table.py +650 -0
  101. pptx2/oxml/text.py +815 -0
  102. pptx2/oxml/theme.py +36 -0
  103. pptx2/oxml/xmlchemy.py +717 -0
  104. pptx2/package.py +222 -0
  105. pptx2/parts/__init__.py +0 -0
  106. pptx2/parts/chart.py +95 -0
  107. pptx2/parts/coreprops.py +167 -0
  108. pptx2/parts/diagram.py +37 -0
  109. pptx2/parts/embeddedpackage.py +93 -0
  110. pptx2/parts/image.py +275 -0
  111. pptx2/parts/media.py +37 -0
  112. pptx2/parts/presentation.py +136 -0
  113. pptx2/parts/slide.py +371 -0
  114. pptx2/presentation.py +408 -0
  115. pptx2/py.typed +0 -0
  116. pptx2/render.py +586 -0
  117. pptx2/section.py +272 -0
  118. pptx2/shapes/__init__.py +26 -0
  119. pptx2/shapes/autoshape.py +442 -0
  120. pptx2/shapes/base.py +1078 -0
  121. pptx2/shapes/connector.py +297 -0
  122. pptx2/shapes/freeform.py +337 -0
  123. pptx2/shapes/graphfrm.py +316 -0
  124. pptx2/shapes/group.py +264 -0
  125. pptx2/shapes/picture.py +422 -0
  126. pptx2/shapes/placeholder.py +468 -0
  127. pptx2/shapes/shapetree.py +2027 -0
  128. pptx2/shared.py +82 -0
  129. pptx2/skill/SKILL.md +450 -0
  130. pptx2/skill/__init__.py +78 -0
  131. pptx2/skill/__main__.py +64 -0
  132. pptx2/skill/references/animations.md +189 -0
  133. pptx2/skill/references/basics.md +421 -0
  134. pptx2/skill/references/charts.md +254 -0
  135. pptx2/skill/references/compose.md +234 -0
  136. pptx2/skill/references/design.md +366 -0
  137. pptx2/skill/references/effects.md +249 -0
  138. pptx2/skill/references/end-to-end-deck.md +231 -0
  139. pptx2/skill/references/geometry-and-arrows.md +334 -0
  140. pptx2/skill/references/lint.md +275 -0
  141. pptx2/skill/references/math.md +86 -0
  142. pptx2/skill/references/picture-effects.md +129 -0
  143. pptx2/skill/references/render.md +151 -0
  144. pptx2/skill/references/smart-art.md +75 -0
  145. pptx2/skill/references/space-aware-authoring.md +249 -0
  146. pptx2/skill/references/tables.md +244 -0
  147. pptx2/skill/references/theme.md +127 -0
  148. pptx2/skill/references/three-d.md +109 -0
  149. pptx2/skill/references/transitions.md +100 -0
  150. pptx2/slide.py +1244 -0
  151. pptx2/smart_art.py +220 -0
  152. pptx2/spec.py +633 -0
  153. pptx2/table.py +1181 -0
  154. pptx2/table_styles.py +184 -0
  155. pptx2/templates/default.pptx +0 -0
  156. pptx2/templates/docx-icon.emf +0 -0
  157. pptx2/templates/generic-icon.emf +0 -0
  158. pptx2/templates/notes.xml +23 -0
  159. pptx2/templates/notesMaster.xml +352 -0
  160. pptx2/templates/pptx-icon.emf +0 -0
  161. pptx2/templates/theme.xml +321 -0
  162. pptx2/templates/xlsx-icon.emf +0 -0
  163. pptx2/text/__init__.py +0 -0
  164. pptx2/text/fonts.py +482 -0
  165. pptx2/text/layout.py +374 -0
  166. pptx2/text/text.py +1272 -0
  167. pptx2/theme.py +721 -0
  168. pptx2/types.py +36 -0
  169. pptx2/util.py +263 -0
  170. python_pptx2-2.13.0.dist-info/METADATA +351 -0
  171. python_pptx2-2.13.0.dist-info/RECORD +175 -0
  172. python_pptx2-2.13.0.dist-info/WHEEL +5 -0
  173. python_pptx2-2.13.0.dist-info/entry_points.txt +3 -0
  174. python_pptx2-2.13.0.dist-info/licenses/LICENSE +22 -0
  175. python_pptx2-2.13.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,200 @@
1
+ """Category-related objects.
2
+
3
+ The |category.Categories| object is returned by ``Plot.categories`` and contains zero or
4
+ more |category.Category| objects, each representing one of the category labels
5
+ associated with the plot. Categories can be hierarchical, so there are members allowing
6
+ discovery of the depth of that hierarchy and providing means to navigate it.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from collections.abc import Sequence
12
+
13
+
14
+ class Categories(Sequence):
15
+ """
16
+ A sequence of |category.Category| objects, each representing a category
17
+ label on the chart. Provides properties for dealing with hierarchical
18
+ categories.
19
+ """
20
+
21
+ def __init__(self, xChart):
22
+ super(Categories, self).__init__()
23
+ self._xChart = xChart
24
+
25
+ def __getitem__(self, idx):
26
+ pt = self._xChart.cat_pts[idx]
27
+ return Category(pt, idx)
28
+
29
+ def __iter__(self):
30
+ cat_pts = self._xChart.cat_pts
31
+ for idx, pt in enumerate(cat_pts):
32
+ yield Category(pt, idx)
33
+
34
+ def __len__(self):
35
+ # a category can be "null", meaning the Excel cell for it is empty.
36
+ # In this case, there is no c:pt element for it. The "empty" category
37
+ # will, however, be accounted for in c:cat//c:ptCount/@val, which
38
+ # reflects the true length of the categories collection.
39
+ return self._xChart.cat_pt_count
40
+
41
+ @property
42
+ def depth(self):
43
+ """
44
+ Return an integer representing the number of hierarchical levels in
45
+ this category collection. Returns 1 for non-hierarchical categories
46
+ and 0 if no categories are present (generally meaning no series are
47
+ present).
48
+ """
49
+ cat = self._xChart.cat
50
+ if cat is None:
51
+ return 0
52
+ if cat.multiLvlStrRef is None:
53
+ return 1
54
+ return len(cat.lvls)
55
+
56
+ @property
57
+ def flattened_labels(self):
58
+ """
59
+ Return a sequence of tuples, each containing the flattened hierarchy
60
+ of category labels for a leaf category. Each tuple is in parent ->
61
+ child order, e.g. ``('US', 'CA', 'San Francisco')``, with the leaf
62
+ category appearing last. If this categories collection is
63
+ non-hierarchical, each tuple will contain only a leaf category label.
64
+ If the plot has no series (and therefore no categories), an empty
65
+ tuple is returned.
66
+ """
67
+ cat = self._xChart.cat
68
+ if cat is None:
69
+ return ()
70
+
71
+ if cat.multiLvlStrRef is None:
72
+ return tuple([(category.label,) for category in self])
73
+
74
+ return tuple(
75
+ [
76
+ tuple([category.label for category in reversed(flat_cat)])
77
+ for flat_cat in self._iter_flattened_categories()
78
+ ]
79
+ )
80
+
81
+ @property
82
+ def levels(self):
83
+ """
84
+ Return a sequence of |CategoryLevel| objects representing the
85
+ hierarchy of this category collection. The sequence is empty when the
86
+ category collection is not hierarchical, that is, contains only
87
+ leaf-level categories. The levels are ordered from the leaf level to
88
+ the root level; so the first level will contain the same categories
89
+ as this category collection.
90
+ """
91
+ cat = self._xChart.cat
92
+ if cat is None:
93
+ return []
94
+ return [CategoryLevel(lvl) for lvl in cat.lvls]
95
+
96
+ def _iter_flattened_categories(self):
97
+ """
98
+ Generate a ``tuple`` object for each leaf category in this
99
+ collection, containing the leaf category followed by its "parent"
100
+ categories, e.g. ``('San Francisco', 'CA', 'USA'). Each tuple will be
101
+ the same length as the number of levels (excepting certain edge
102
+ cases which I believe always indicate a chart construction error).
103
+ """
104
+ levels = self.levels
105
+ if not levels:
106
+ return
107
+ leaf_level, remaining_levels = levels[0], levels[1:]
108
+ for category in leaf_level:
109
+ yield self._parentage((category,), remaining_levels)
110
+
111
+ def _parentage(self, categories, levels):
112
+ """
113
+ Return a tuple formed by recursively concatenating *categories* with
114
+ its next ancestor from *levels*. The idx value of the first category
115
+ in *categories* determines parentage in all levels. The returned
116
+ sequence is in child -> parent order. A parent category is the
117
+ Category object in a next level having the maximum idx value not
118
+ exceeding that of the leaf category.
119
+ """
120
+ # exhausting levels is the expected recursion termination condition
121
+ if not levels:
122
+ return tuple(categories)
123
+
124
+ # guard against edge case where next level is present but empty. That
125
+ # situation is not prohibited for some reason.
126
+ if not levels[0]:
127
+ return tuple(categories)
128
+
129
+ parent_level, remaining_levels = levels[0], levels[1:]
130
+ leaf_node = categories[0]
131
+
132
+ # Make the first parent the default. A possible edge case is where no
133
+ # parent is defined for one or more leading values, e.g. idx > 0 for
134
+ # the first parent.
135
+ parent = parent_level[0]
136
+ for category in parent_level:
137
+ if category.idx > leaf_node.idx:
138
+ break
139
+ parent = category
140
+
141
+ extended_categories = tuple(categories) + (parent,)
142
+ return self._parentage(extended_categories, remaining_levels)
143
+
144
+
145
+ class Category(str):
146
+ """
147
+ An extension of `str` that provides the category label as its string
148
+ value, and additional attributes representing other aspects of the
149
+ category.
150
+ """
151
+
152
+ def __new__(cls, pt, *args):
153
+ category_label = "" if pt is None else pt.v.text
154
+ return str.__new__(cls, category_label)
155
+
156
+ def __init__(self, pt, idx=None):
157
+ """
158
+ *idx* is a required attribute of a c:pt element, but must be
159
+ specified when pt is None, as when a "placeholder" category is
160
+ created to represent a missing c:pt element.
161
+ """
162
+ self._element = self._pt = pt
163
+ self._idx = idx
164
+
165
+ @property
166
+ def idx(self):
167
+ """
168
+ Return an integer representing the index reference of this category.
169
+ For a leaf node, the index identifies the category. For a parent (or
170
+ other ancestor) category, the index specifies the first leaf category
171
+ that ancestor encloses.
172
+ """
173
+ if self._pt is None:
174
+ return self._idx
175
+ return self._pt.idx
176
+
177
+ @property
178
+ def label(self):
179
+ """
180
+ Return the label of this category as a string.
181
+ """
182
+ return str(self)
183
+
184
+
185
+ class CategoryLevel(Sequence):
186
+ """
187
+ A sequence of |category.Category| objects representing a single level in
188
+ a hierarchical category collection. This object is only used when the
189
+ categories are hierarchical, meaning they have more than one level and
190
+ higher level categories group those at lower levels.
191
+ """
192
+
193
+ def __init__(self, lvl):
194
+ self._element = self._lvl = lvl
195
+
196
+ def __getitem__(self, offset):
197
+ return Category(self._lvl.pt_lst[offset])
198
+
199
+ def __len__(self):
200
+ return len(self._lvl.pt_lst)