From 3d7f22a7ae4bcc55f2e7c61babe7b2046ff6b56c Mon Sep 17 00:00:00 2001 From: Andrey Mikhailov Date: Thu, 12 Oct 2023 18:32:42 +0800 Subject: [PATCH] ESL-155 Add table bbox annotations to tabby reader (#354) * Add table bbox annotations to tabby reader * Fix tests * Review fixes --------- Co-authored-by: Nasty --- .../pdf_txtlayer_reader/pdf_tabby_reader.py | 72 ++++++++---------- .../tabbypdf/jars/ispras_tbl_extr.jar | Bin 147308 -> 147825 bytes dedoc/scripts/test_words_bbox_extraction.py | 1 - .../test_api_format_pdf_tabby_reader.py | 8 +- 4 files changed, 36 insertions(+), 45 deletions(-) diff --git a/dedoc/readers/pdf_reader/pdf_txtlayer_reader/pdf_tabby_reader.py b/dedoc/readers/pdf_reader/pdf_txtlayer_reader/pdf_tabby_reader.py index fe1cae98..e918c4fa 100644 --- a/dedoc/readers/pdf_reader/pdf_txtlayer_reader/pdf_tabby_reader.py +++ b/dedoc/readers/pdf_reader/pdf_txtlayer_reader/pdf_tabby_reader.py @@ -131,11 +131,11 @@ def __get_tables(self, page: dict) -> Tuple[List[Table], List[ScanTable]]: tables = [] tables_on_image = [] page_number = page["number"] + page_width = int(page["width"]) + page_height = int(page["height"]) + for table in page["tables"]: - x_top_left = table["x_top_left"] - y_top_left = table["y_top_left"] - x_bottom_right = x_top_left + table["width"] - y_bottom_right = y_top_left + table["height"] + table_bbox = BBox(x_top_left=table["x_top_left"], y_top_left=table["y_top_left"], width=table["width"], height=table["height"]) order = table["order"] # TODO add table order into TableMetadata rows = table["rows"] cell_properties = table["cell_properties"] @@ -144,15 +144,24 @@ def __get_tables(self, page: dict) -> Tuple[List[Table], List[ScanTable]]: result_cells = [] for num_row, row in enumerate(rows): assert len(row) == len(cell_properties[num_row]) - result_row = [] - for num_col, cell_text in enumerate(row): - result_row.append(CellWithMeta(lines=[LineWithMeta(line=cell_text, metadata=LineMetadata(page_id=page_number, line_id=0))], - colspan=cell_properties[num_row][num_col]["col_span"], - rowspan=cell_properties[num_row][num_col]["row_span"], - invisible=bool(cell_properties[num_row][num_col]["invisible"]))) + result_row = [] + for num_col, cell in enumerate(row): + annotations = [] + cell_blocks = cell["cell_blocks"] + + for c in cell_blocks: + cell_bbox = BBox(x_top_left=int(c["x_top_left"]), y_top_left=int(c["y_top_left"]), width=int(c["width"]), height=int(c["height"])) + annotations.append(BBoxAnnotation(c["start"], c["end"], cell_bbox, page_width=page_width, page_height=page_height)) + + result_row.append(CellWithMeta( + lines=[LineWithMeta(line=cell["text"], metadata=LineMetadata(page_id=page_number, line_id=0), annotations=annotations)], + colspan=cell_properties[num_row][num_col]["col_span"], + rowspan=cell_properties[num_row][num_col]["row_span"], + invisible=bool(cell_properties[num_row][num_col]["invisible"]) + )) result_cells.append(result_row) - table_bbox = BBox.from_two_points((x_top_left, y_top_left), (x_bottom_right, y_bottom_right)) # noqa TODO add table location into TableMetadata + table_name = str(uuid.uuid4()) tables.append(Table(cells=result_cells, metadata=TableMetadata(page_id=page_number, uid=table_name))) tables_on_image.append(ScanTable(page_number=page_number, matrix_cells=None, bbox=table_bbox, name=table_name, order=order)) @@ -161,55 +170,38 @@ def __get_tables(self, page: dict) -> Tuple[List[Table], List[ScanTable]]: def __get_lines_with_location(self, page: dict, file_hash: str) -> List[LineWithLocation]: lines = [] - page_number = page["number"] - page_width = int(page["width"]) - page_height = int(page["height"]) + page_number, page_width, page_height = page["number"], int(page["width"]), int(page["height"]) prev_line = None for block in page["blocks"]: annotations = [] order = block["order"] block_text = block["text"] - bx_top_left = int(block["x_top_left"]) - by_top_left = int(block["y_top_left"]) - bx_bottom_right = bx_top_left + int(block["width"]) - by_bottom_right = by_top_left + int(block["height"]) - indent = block["indent"] - spacing = block["spacing"] len_block = len(block_text) - annotations.append(IndentationAnnotation(0, len_block, str(indent))) - annotations.append(SpacingAnnotation(0, len_block, str(spacing))) + annotations.append(IndentationAnnotation(0, len_block, str(block["indent"]))) + annotations.append(SpacingAnnotation(0, len_block, str(block["spacing"]))) for annotation in block["annotations"]: - is_bold = annotation["is_bold"] - is_italic = annotation["is_italic"] - font_name = annotation["font_name"] - font_size = annotation["font_size"] - link = annotation["metadata"] - url = annotation["url"] start = annotation["start"] end = annotation["end"] - x_top_left = int(annotation["x_top_left"]) - y_top_left = int(annotation["y_top_left"]) - x_bottom_right = bx_top_left + int(annotation["width"]) - y_bottom_right = by_top_left + int(annotation["height"]) - box = BBox.from_two_points((x_top_left, y_top_left), (x_bottom_right, y_bottom_right)) + box = BBox(x_top_left=int(annotation["x_top_left"]), y_top_left=int(annotation["y_top_left"]), + width=int(annotation["width"]), height=int(annotation["height"])) annotations.append(BBoxAnnotation(start, end, box, page_width=page_width, page_height=page_height)) - annotations.append(SizeAnnotation(start, end, str(font_size))) - annotations.append(StyleAnnotation(start, end, font_name)) + annotations.append(SizeAnnotation(start, end, str(annotation["font_size"]))) + annotations.append(StyleAnnotation(start, end, annotation["font_name"])) - if is_bold: + if annotation["is_bold"]: annotations.append(BoldAnnotation(start, end, "True")) - if is_italic: + if annotation["is_italic"]: annotations.append(ItalicAnnotation(start, end, "True")) - if link == "LINK": - annotations.append(LinkedTextAnnotation(start, end, url)) + if annotation["metadata"] == "LINK": + annotations.append(LinkedTextAnnotation(start, end, annotation["url"])) meta = block["metadata"].lower() uid = f"txt_{file_hash}_{order}" - bbox = BBox.from_two_points((bx_top_left, by_top_left), (bx_bottom_right, by_bottom_right)) + bbox = BBox(x_top_left=int(block["x_top_left"]), y_top_left=int(block["y_top_left"]), width=int(block["width"]), height=int(block["height"])) annotations.append(BBoxAnnotation(0, len_block, bbox, page_width=page_width, page_height=page_height)) metadata = LineMetadata(page_id=page_number, line_id=order) diff --git a/dedoc/readers/pdf_reader/pdf_txtlayer_reader/tabbypdf/jars/ispras_tbl_extr.jar b/dedoc/readers/pdf_reader/pdf_txtlayer_reader/tabbypdf/jars/ispras_tbl_extr.jar index b3d5eae847a17d6f8cf05a058f9d49c210288020..411ded10e1ce18a83c480b5f5231f995d21b3b15 100644 GIT binary patch delta 28807 zcmZ6xQ*@wBxUC!8HafO#+eXK>oqXxoNq219X2-T|+fF(;|61o_@3HHq=BTTxQ8)8> z=e+!axeJ0tRF(sWzyN`PfdR3%kgG?W0|ozYZ`=cggZN)@4asNqzk=Rj2@ITHS1u94 znFja(Ftjkgr!73G*5swN|0IO8pnzRjh(%~r2vdi2jh=@Yp@9{VD0+mO85w4$Lk9Ur zrc^ws5I>1rRO%{6!`Y+b&0-l=FE2~^ue@C3-a=pScv5CgU4|eNzdWR;`_2fQ_|AN6 z`@i*Qw68JH_^+GyiHs{hif z)Z_)N1vjx~OtF-!{^~Ds`GI(msD_1}N>gTG0*Tt$n3Al(=H4E}teNo0DNv}lVI3^Z z^iOxhY*9wrSzVyUhK|OfZxC%@`o8o{HlIs8qmZN1kg%|ie z&+F5qE-Sh#zAT;5gkczHTBL~evoH_WmLlYF(s^r9M?MJSpx7O5naxb&M`nFf%u@C^ zWn4O|Lt>piN%1HRA&YM2VoU?{Xe2$R#_Vt)=(;)^?Oa?eD=$VDY^$7hi#E8+ZwKoz z8*@b1r{BvzAWf0}HljK9QQ~@1d(i>gk}5Rjq@@bw#|~FTgvrh+s|7}MycDl&LHd00 z4C+J~+_I=wNzSDqHXDY8gUf8mGX(I)_#V`!{fe;37!}>}E)j^Rv-K!Gvvh?@B0?Th znPkk+8n#hh^XD?G0%+0AaM;5bU4%Dz!Zm6NYHaiZnJm8UiGQ=mx#A~ql4gOrzy{Zx z${FScNf_rUvory??J>b83RQkW6=vF!u%QJO$d5~n;8JLen2kzw(u|b5$}Gd=Pu<~K zPda55V@p?0&*!46&w0Navtx29e2Ss42yCgzY;~6R<~Zj~DolCjQM0W}xs$3h7lLFE z0~s1=GBF)T-LR4piYi?U-%Mbg<%eLlv20aVP^SnBOj*0Wjc)(B#HZAKIs{*J;SR3y zy!Pk>cg-%uXh*V~QFP!Dxm}z-_LWbE4EIpSU#Wf{$Lx-$7#n%yBe*lWJp;&>y#Uso z**|X(?H&L*dv^A>N@{rgf zJ=UmMWllQ69)e)mu9#O^MHIEQr^cFHHo;Cj^(!@Y!p@?SwY-;j-^d-TOKV0^SM9^R zDSwF4o(gWR<}L1Y#yMn44u%Huk(DZ&yNgb~v?Tq~_(Fd}-|F>%fdAd=o`3!J94Kv7 zz`3q~x@}U?a$3f??H7=3D_mc}=!En*2F?78Z4 z9L84afy;d54v2FHl?F|@t;%P{5;n~Ux|ol961h|-+0pR3idLmK$`xh73tN$Aa-r$= zOe0krVLO;@l>tC04OPy(W~%(^OeEnnM1n&BnH#(oQwxDPHp zimOtr?>K$R`5W3OAOZocPG}gdCHOWOO;^Ni65Tbs z@vrC{KRehd)F+nQva9($zoTtmRH>L47(^n?Su;p^izPjqdJ>noFf?($lbj}=bjI*9 z(`%v>+^mnpx=?e6PRiVKiqnzf=RWTW-cHW)@uP9#d3XG$JvZN4cnmvQ{%m3ozD7T? z!~3M&HEWg<^j-mX$vU#f?`+pnqOt7r1}nA^<$_za-#);UYwbI{mDh{uaMeb%OHE zrf6rZvy#c_`;s$DCN?a2aj43BnR2_T9kF3IB77@OmL${``_|2$R{N4iOq*H?9;Lq{~Ac-hK`u?_KWqKEUZOu zPy%AOvCK^dRi2_zM>t3%3D)v(obAm0f`_Am>vK$W!%D3-V|MY~YHJea$Oov#tWr;@ z7R(91MaVa27Y`vmz#;?C`OXwbDcLAMF?Y4~Q4lVZ^GLQCtLk6ixH+X?Q%Y}bT5k!7 z`USgj`1-e!bi0`jNb~;JmS9hiqyFrvxt0m; zO-a1D1<@H4fq}=%V#{xHaz@NRG0|Pcs7DV_14nR-f+hJm0V=y9gA=<4n7cZ-pJ=#S z_v96CY~f^CTYYr_b2;<&hj0zO1oFhOCEjlF$j1Iy$od26I(~subm+QO6hk6{)c{3m zl{k}Te*FHr()N}FFb-80Yz1H9$+Ip%!Mdt7vCjW9Vw95V2dQ2xvYb;mg+T}=ZQC7g zRCAd(0`Kz@{KvFN%CuPhTv-x!Q_I{lM*b4EwIod$g46vP&kH@vq;mSJ?0m@(;jv15 zQ@scydhFL7cM6eV`vs%>oTh7sA?q3A3#t18#*xZ_G0eyf z)7{W>Y*T?%Qe_MRo&p_%A%-hp8{c*{HkqpGK+Y(ZSDVSp^vc~-0e!ig0;qfD(O&7Q zf9|Zmrl|Tz>BaM`>pn?eh`r7d^xw+*5)9a-Uc8_ld|F=R43D3yzt+4!*g_(rRh6SD zE8Y!v+n%+@7Ak;hpGAIc<=}#z6ha2p*l^koRawYggoMpEB)-Y+3bX@Yg*=|$ zVCMovPBvf}!LuTg9m|inWH36#6wIyS+JMh`8#&Vs|qcO;(Wx!nOK(mJzEGd&C%vL3wz+ z!_^Ss>yKerau(2|KnQ&L18#lTc9_H6Q5numQ?3^Wk2Nx5(5vqXU!+)F@&l!W5XfC3uL!TGfU-7!jzY$nBAs9cC!gnp1}T5aRB_FOMU|H> zDXW{t=epNPQL?P3!_?8fnpk<)5`#enLdc-RQnSUhEXDpAbA>U4ifJB}JKR&tMK*Xa znMHq;B~s*#uo7)zLkl%TA^2zWHLOW}KUykJzjg@4zD;=$*LsIkiN1vq4<3de(0;ks z)nCABC!tM;z%D}!^vjn%nCMs=VNUN;+u8)7q##e}JvelqBAIZ!%@Qq$Z{SX7ACt13 z_=88HbJ-#`?dtPRAOEpX6d4-C@5CKkM>JKUx@?o(6`y47eu-!6b!tE@yAw;;YCLtZVU>FTpp z#(p;UFXMZazFq62K+sQ-OU_%HOVX1En!@;cuYgYP!TFHORMb?Q)$o5IxpT+GDq0x$ zPQAV6qG7pKAFd4}S~zX09)j$sLT1CPG7k~jQi$Y(c+>K6H{5NBwN2~t;Ly$y83y<> zClss=>7T;1Os_J3)``Vsf&6^-hh@=P`*wX!>|vagkc43`6kKqfIr~A4S~!m2S|YrT z0>_cj-j?6?;H;;3;5@kXRwv89x9Y2pm;~w&*jQKe5V|lO$-o|9ve!3ilG_cpy9avt;4@L>#$#@EsJhv^5J`DCX@!l z3Cz6_F}lMxKnm}a>{^e(cUXhx(#Y~Mq|D&H`t`9EXgQVsV!~i3G-;pcb&m7|x|z=% zz+W&Jcz6vubl7`xC~jHB)1_#eqV;9U9&m$0BPcyWaVO}KHJcU{N%$Z zvHm&}<8jeXl~6=jkjvbD&&7?Al@F@uP)AQ(2!4$qgJIthzZ|g{3g?~uad!GVgI{xg z-9(FD$PPZ0;%3UX%CO~*r;nMyTsQ15lN*M36eF3hPO^+IYf@KO21u^YSJxd&bg~4W z8{ltNSkItf18LDzX|4C!g&iGfW7DW$98V;ByO`z_-fvmT^qA%)Edf76&ckrF5gJw4 zPLdwq^XcIqbG#Uf7sBlybxdg(J;pwLq_yz3sNOQQA6)A>#ee3vxCo_84Gkt8@2(&6 z9uHY!g)bdi$Gc+fsdax^Ckr~zE5Di7F;y>BQj^vu1KD{AE(OZxp6b!_DQ#1Z%!XDH z`ajgWn%lANA&VL(i${kBqh-h1MJ)&4-+n@vJUhim6o+*v=nD|!I>E5R>3E0}C)z~G ztSBBW!Djn?G$!K8S)P5Gtv9S#B3q@WUTiH9)JaL#n99^%_A&nu)C=P*$qv0A8~MzV z0>-RCJ#3=WCyO&xfn8?&}TZ%q#7hfd~aF_U12k6!d ztoHodS?MUXj1s?%c#H!#YMevd{hgasDc&29fr76=MxyUmL80G@nCIP8zf<5xd|guX zCC_3h-L*MYcr#>5ZDR$UQ#IR!!JK1%o$e4bY6wI&J)oj)CudJmO!g&x+0D`MDt#Jp z%n&T`x8ip_cui~m^}`h2b8Zpv3YwXi$jLn!o!I+&%UB-P8bly^TOPtoK4`nQVx6;*y*U&azQAOZhAmPKWB>y zz|wLA7h4o9+S%D6WQ)7%{o|pkKlXCYKgo+)c{uaJ{1LHl*Yscr-Qfi4@%DIxsQ{oF+Lm_Imzv9&X+->g`7y?^#$G(n9J7-5DhMrRxC^Xjs{(YSH zPU`mwO}=qzqws;i*oMtSG3OVRH7rEU{!zmp7Po(plDs}k9>#XMwc-coUs^vE{FlpX z>G865Xxk5u1(`^kX$uj)-=k9skTHBde#%!|;1@P&HKx1y)E}boqA>k5iS3D9E!YeL zN|DS9|43;5d1d<&t7VM*KGZ|bssAS4-c;#Z^jPu#sNLUnsj)|* z6^Lnbs=nQ+A;SA9aOwQyWI8us=_Uxy>FpcEC%Ea1SF73vTe-GcIru748ucn6~!;rH8aAW3pF7+QJeYzlg~b%ATfN;$Mqj2@WwesqXG`60 ztDLhR;FEtIxge)dVG@giLl@Eb22sK$2q%nQ7KTW!X%_1mYA9GXqdiHF0+ZOEAw((6$9IpJ?N~V9TVCjIY^;%!g+RkZi z-$mSyJhr0oB z1(CVx2aej^)FejhX|mm6hL1{hMLOaq!BRDX#=uf`Xta8DVh%F*1%j#gQn`dVG{i>3 z>f9iTp`U{SLCT%_sa`pjX)cK!hhy~@}u29*=^leQS-vK zT}BK*d%b2HFaP{KR9sU$D)Lcn2qbOMKHfUTvTF8>{>po;@O5~(kb66$d{`Im9 zta=g)cFb(xr1j1HWNS08wK#M3ezN{p^1;=`Q9tDX1U{zGqV3-ays(d4vuuU>PCCaX z1o$DdidL^JXm~?c4h*2a&VB^{i?Eu5)c$X#g2N9DtqzX+I6vU9R3^71JIIlW=Cs16 zkA>6pA=LLZV}&887trX33e!JOB1V4jPbZ7X1MPB7q^F>_tTp-6)*3Hor0krA<(xpj zwKMbr$fX^4daeoFWW0hKziRxc;nG=1hXE@IHdfcnFVu$l;e9X-iWk?rx`55z#nXy**t3VI^^`*6u;<2 z=%R{SzE+`0W>u&pV+{^YwfRpq?Y_TowF#a0;!8#2DjfQUvpc8Wk~pf9S+}Y?cYCu$ zHHB=7LRKx_63=9r;BQ0HiHffVdS6b!_w36?q5fObF8hPsh+fNP9}-ETOD=(784OI&#vJJOOb+lf8!T%M4_aE@!NEUL5{9kMUte5(V``3(KTIrs3=A1O1-mqO91!+Po%P`t76ljYu zObl};gXBEP{~+QdI+$J8uRA0I(XK(3dP3-PUL0t-5EMQc)0OhfWd*%fg$#E4%_8@O zWp;ZtG0>x|k8ON%QY!n`*X_;5P1oYLiyX-^Y*pZ zxK6QGNLLm51ownVwlf&V_#_y9C@TYsk~@r{*AS;D40;ukBX6+PxuWM_Vsm%jJIId^ zC*B2}&d8PWpNkDmYZ3sqIILT}ssmY6G)x#Z$`6G?>J>d0NN3n#NT>4HyEI{HoNg4- z9=7YIB44(vyUSlYoyqzzKmT;=_WSujIMMv9~IHo42ruQB;lvoS%#Bg)jK}dyNr%xhn zxJ@jQa!NYGwSiPw)n~N>jnxy_g%3WL5u@)>-#904x)uD$NsSHB zo-w`PI%>Yp4r4CXe|+^%{fXymXlZeap9yoe+p|99UDVlY}A&9{%4f&^xC;4 zI>)pSTMt)I?+B6JoLiQb+bh(8*6b*(W_!`%SJS}o6&THAV(K&Rnz$5yxO~h_lXEFX zQu1w7Uq7%#Fzi+$=CT;>Yk&ENApK7v68wwvaBDN~Sk|_4$p> zM%I%X7pO_1a=uGqX8=U#K)^R&JtTg#R6|g|Ae%EK$XPd!qggP1WCg2~()hcYt&C|@mLAvrF4(3H|2d{6kTXu)plYX(&7W1IIr0|Z zTG?us9@6C-?8jf?qmS(SX`0HZN1W;5?$FZR4Cx#rlSbw2 zqF(RAVw}e9XlI=NU^zdSG?ymY0AUiCs;uSJk#?d#M$QlHI@A{*mKc73f!d;Su|P2; zHCv&5lsi3}%?mhRL+wv?#gG+m{?VU1;?#I=x4BHgrx#voXN;&6W?`tI-&4bwGru(ZLxq4aicer6{+t^na`*RhRVg-e@8m%3wv%P}g^yj}oFAl{y? z_x6tY70bDGD5Y?HZQ)L**Cfr^4F|G=n@qMbRgsL){L7m_g(rJcry|08g1vadbS$|( zMmBJSJ*x&Hv%>2AF`&(W5a=S)w6RNSmgk7Bek@xaCtBBW#!n@&f<04|yzu2tccEr* z^{2tDF5GuD;y%6-5WJ2oOv@5*d*k8f>lun{b~He{xTA!e$%XQJz2z7rYMOAKzWG(6 z#JA_4_h5$ZtZ&Z$@>$+bxvnpBCymakcD|lj&ST%8mR2wNWY?D!1H@|6V(EYD>vqxU zdNJKav?lYhifgHIyYxKZfu>hXhneg|bVgz*%}|d)LdTvYW2b}F0|6!BQgMvWGtTb) z3fNgO-I&cE+H8AYSR9BusZZU2EZ(F9+Xd?N*#&B>f&0mm*}k4$ViqWpkB^rvxm?WY zYFj;VUxvSkU=d{yAVw@>j;;B@&eC7JnI=2LhB&6pS=ql=8w2}UHTw!_bAJ$@3nT!a zfoeUU4eC9i+e|`EueO0?V$mXtgNxv^OP@MRBf?8QLSXk}wK?H|lfVV0b;m{UA``6*ek zYAHGEbWskuJ<8B?3*;qZN%PyAt{qT~P%Fb9>%+``OPhngcEnHaVh?VLKM7}EDVe(? z)28C*+taF?G&^BjxKF&f&B=c+ElQhIve^W5w5^tp59A2^qQg0Pq#V|IK(KkGa{37g zJQxOjVzBH3l^Lb#N&;cFP|7_vt&-5tfDekAK5$H5&NE$kfU7?koC&idx`1*O9864m zlUYh#>dhT!E=B%#eC>?(DAiS#7S{xmb~Sr~ITSuG3S1B|mfvPi>!`ZzPyAP99WGna zf-7^_Q_!L)-D)ga!1_*szWvypL$8;vOl8uC4ih(k#kpXkI{>OZku)XZ(!A_^x>A{x zX{mzNi|K}U(98w{G3%5eRy*dpil}!>rQfgLa_rgl$avSka`|r=_p7%Gwz+Pl6~Sn# zB4gHvXqz*TlW5p`l}4-re_%jiq)%$85oSzVD6VRlt=`UBD!Wj(UitM+amcd92n94^5epc! zSH}+_<{=fvc~c&oAp|iT!I*u5nElxm@q71pFZl>Afqe$jZjQiK=vygKV5abUv9RZ6 z4%nLmj^==asqbG>-&X_U;U?1%Yyqr+$S*!I&;r9V{=+`;cS?d}*DPOamY4AuWxs*w z|9Tgs#{!r%5h3awOTDYT`FQvYntXSg$lNi+5+iUW<#T!a+5XLxkJ07*dp>WizmqvB zw5+MZ)iVsGdk8e8zj>+>z9vfdMgO%b#Zpfi(iF9iKS8%JrelYyG0hX@>g^)K6?&_} zTb@U)x(C5`aO+-b^ts`}TCrY;3Z4Q^?31{Nh|0o#PYlVYY-IgS`uN3jsyEb~N|M`H zbPx7PQWI-;4f@3?jR)rKgzD3AsYf2lJbVU}_#=hSQa^0ej~x=yRsMTGqb9}Or2=okXbV^t`w`vKNk%hKk@ehCoTZUb= zhMd1kn>>}ef?4+*Ysl9CWeF7{Zha1H&vg!?Vn8q#DQ5!@G0fU;(Zka=jk1FSgX8nZ zdw@b3r4(Xo%zw8YhxzzqEvPUy$0(u6GRrvM_$yj=Cg|R*yy8U_fmkH!^N-D7EC3c3Lo~%wE*uDjoiJ_jiqo+-^Ub?4^V^7iR z$3t~fW8KGgW;xE|92cU)*M;+ZIFaQHD{%K?FX?HA+!(V2j5;31*F%)f%A3|D!PUo5 z?pkDo9kD~xz4|x&(KNwyzvZKdaQwT51vQ>-clZ%ann<2;w5`wIl){Ehc`N98>w z8$83{wDCS&EI6I7NSHmZlhKQrTK6Guc5t)x{820r*z^qH(*(X+KqxB7*PlA3!o8k( zy0ks4dG+(r`o=WV18t*OZ8aa-sgtOW@SXf}v34-qhwOSj^}xZO@OrM(skR%k^O111 z`ljFiePXqcc=+EtEI*Lf6AS(1d6)2oO0*0_O0~s$EmHRy6oP%k*zj9S_8trq@Eg+) zCl15;Eo;aBlcdXG<=nF-8+aMG@>=$S$>n-J;5m?c4Z6e2;o2SqJs|X(du23W7VM24 zj=%eJ$F^zu31-L{5E@LmmyjN=C68a5QT!U^jfj-Vwad|nD+NqGd2MZm)Mof|+guOh zA0M1@<&Fft(Z;1a?%E!+5ODRxqR;at1W%lz=(y1t9t;swJG%R7_>j4k^8&itiS;@q^+)P3`+aS8(VCI+}tmSFbBD(zpa zv8CkhWJQjo;i~+t!aE|FG*gA5{@4eX`3%(aj)hVhY)Q4*^HJ1f0jCpZIOaph{)B|b zYqmzVRL#^+E>B0!7=-8O0&!=G>yjJoH-}IoH`Lzb3;?F*!!c~lVsslJEo=Pzm7Rpt zqF?Cs?(bib$M6KdIW~zH*gfa7FK=+%GA_;-JMe$$4;;B%8zXV)KSGQ{d5bycnnTWF zDF03U?m^~`4g#6q49OnQv}n7BbPMxT-^P_MXe=X1$&v5}`A0wX0YQx9@?aZl6R!Yj ziL#Fyyb4g1NNJgPgHXBpT^B*OgCqVkToS;AWldiXY}hfk36$5`UFV4nhn@@F|8Aw( zMOV)X;~AX^-@!>mTe`eH(R?*{!djE)Bn6Zy9}DBJ!T;g?50ig_{M6w<1_2Q#`2U$4 z4g}=CnD)PZn-<9bwc!8Ltv3ju$q?XfYI3RJsGxL!uD6%^(i*Unc%(>)4TIZKhl@fE zA*!y-5-BaM9YjhGYt&njIH|zOoXLhxavinkFIH)?RjJUtu1Pm=tSO;ezSOe5zN}eo zFQlty-yAKsdL>35?h&MvieNGYKMWuBQN z)-De~;&)|s9f3NQ{q^&nfU4w}PSQI2m<@DAA zTkdDLD{JK-ieo)`txB2ppfsS`6;r^YtXm`0B-t<7Q@2VODMDp$K<*r_(cXk(MYL|+ zrz_Ztz>NK<##u=FbM}N+!FG+D^ireVVZ{!pd2_D|PT=3QcxX534)hsuV`O5&w6=bT zT{W6~8Ic?9*{96dJa|Cu<8+k4+&6n4YzJlz&v^w?rm_EyGr?m)LAT?bhb5e3D4$W6 zH~&sQ`&YWDES&Nw&v|B*0p>F|jj~Yo=gGP*_Ky0nI;(p)&onKnzW6?NFHZYJvT_r^ zw~wD%Q#L?21OhI3@Mkl12RmK`)$NS8z+S$*UHV;Lw)?{|_GPpBxo$`+x+m`cGcb0a<7;jvG|AUmSXr3$+y9hyhcMIp(B}RWK915}wRp$bv*JAW7 zr!}Q0D#2L<$KxP)Wy@ShxVG<2bE{M7zWl9xc5ly)JT(taLbMAriyab3VVXFb(VoJM~Pl3yd~C`9c0+gk+BQDc5! zAfJlkRxYD=##*xXx6M7jZOMTYMxR&umN(+ZMaX%oLPu6j;FgKABYU@KIQT_!rF@63 zCIa1IBTvVvZemU0h558%%-{S4Ex_F!jhC@QWw(_rmIy`G$f2Yb$1NI=X`QzxS;m%r zw6#<|r03#qSyuFxKltD=VWM|Ay;7F;CD~L}(dE79im0_ej#`(%ZaYKjSjg*?@5sCs zfg?g71}zRI+peF)mx2qUoQR)wB!G~1BED4Tg|FIj6B00*T~RnMam;IZJc;^?8CEsb z{8dJgTrx2&ARi6AxP}eD{}F-d{zUO#$O~8S3F#hU->aLw#RE2@eB8(Imr7-qcpgYz z34IpxM&#dX+U$)16mIEou4ND^)YWWC3M*_hOBnP~I12D24A?dS%By6zMC7Mv6TB`F zy4;*RDny_0qSCYU0Hpa5X-VaHlVG0>-nqd>N&zYX5k*@Pf<^$rN6;FbK_RioissW{ zU1^8w4EhnwrFiAU_A*91LDD2eDa!L72oA6JH?s_4){+H8e9x>?~Lcwd% zyy~ojPkMmetdjhDxpW4l0bGc+_8_C(_HwL3g!tv5MoA%bZG&~gXO?x!?51ir1rGI! z%nv-e)(IyC?nU6(@g_tVL}B0!a$(hgN7FrQ|0^$<^3L{=u3Uu)=f7Vm<#acTRIXwm zKuqDHkkWit+{xoY^qDByncs-$G+MQU9Jd{)?x-3t1v9R#<+6X7V0rRKr48M_QFsUc z7oW{UZodRWn$*J^`~|b2GZx3F*-e7tu%(TTB-!8b%?*$XOp(4f$^iMEdy3W1QHnXZ ze&l~~AGHqi*}%sT^iI5LVtijLnh7z^d5$lRoxnG1fv&EYJa&xx(Z%6}@Lxr6 zdVaRM%oA{}W^Z$t-qR08O#GPz?H?(%R&B-8pd;rc=Ph7YaG($qJUH%VBD1q??Bfqq zMa*D%O4!#nbLT1qho|u;g|jH|pphR^jnuH*MGv^5)s>WmT7-qW=JydLN=4Wbq^O~d z9jl{KG?ozxZl~Vay#u7x-m8>rFm>UlbmwT`dH;cyO-&tm z6}%35U}G1WmYtm<*vE`rnkB|tG_{bK?$S1vLy&qq)#0&I7s_H2lRc(ZIdE62oTjGn z|2&PComVPZ9iDFC{Kmqb5mv1_6UIV0Wlgk%eS|^0ihV{M9vXqW{By36aeqfSbDg}2 zKLwEcfd#IF6$&c6k|&-}!cLe$?ZN%}*s9L~i_RirkNuvn*I!t%lQE1Wk9w zBB2KJ^!Nmi@O{NF9R2a z^Ay96GFUR?3G8w_N>`BT$FJ7)LyjOWkwZY%aLOord%hVYO1I6%xO%sm&HL}J!sOtD z*$0KVFZz562ISNoec}w(iK`S81un=q`gF&SpHus9!*K6u{EQfU<#tHLh-y{H8 zsl)yG#iOQcdS+hYFOA#|*b(v6*YN0UVOe09(s#gE)w98d>5#32%C zRuCOKRt`VRw8T*EH48(pWqtUtcbGgCGk!<+)QqI8gtJUT6jlUjZt88)wy#9xvUcY-oX4#sjIckvHE05?4gVOx;4wM3g)w+ zLD-J$9;I>9c4q0g@2ZG9I35G^>NAN?1SoHk(P)}$84nvz_FfN_<-CTX&iNl?7W4aw;v1p=~a9)PoXdt{w1M^pR?XHmYa?oB0 zMWc5snT4^#XLbXgBGfT6dOO{C1`tul~aFu~TR$T=siC znV-m#@R@W|f3bCWyaV%ecD_fs0+peFG=57n{h>AQk=^)2XiqB4qJg$IvM;WAdI0WZ z#!hDC@a|;Ol$sTjZit;G`5~(<7-2hM2LEYk^+uYJCt|Si7!WOZ59mcgIq&UB(r2qA zC|L{M{DBmQD5MhRf=i3MoXE?{F4H^KIG$&T$bQB?CYzJ)H0yLd;>IGEU94|I{l~)H zd6Bmiy}3_|V0mFE^KbpWGPeOiw089uXU~yqrC)`6`Q9lelIx5dvkRs` zC21Ewn9-pi2QaT*xM;;~P4B+3mFzrqiSr&Y&%QswV^woE@_Bo3j>1`>RKh&n_6~~F zIq{T3cT^*S4WSWsJa7y3NsZdeGCuzJM83&WUP3P_`DX&WXqUs_@b@L=l7gJkhvJ8g zS6OvyjftakW;cz7xp7`<@*1{p8P8vkZnFjT7-edYI3TPpWCs7`hw6k0Dnn4Wbs`dX zXqjacS%$G@I%Hi|1MAN~INx8l*MViMxs-=~zo{Rg!1ktw-mAH3QfL#e+p6Tdl}HFo z2m>QLUrmQZ=qzsNJE6S6)+BXX!={a*F_*?fuj>b@w?UHjQavqM^%9Ou`~&033U2aN zi2KDZ0|5`KKx9zuCQRO1COEyMKVk z18CDcd(wcRB?$KlOGnoAb*SC)FF)7V*IJ{p(kRD7qze!p@$eS88&uB ziF>8;Z?_cjw`4BVr2z~mQ7gk0uF=Q36_aS1<2Fp>X@|l*l~Vb1r=`tQMJe z3<;ovUwp$o$?5CaK$=j&E=X6$PCqxXzE?O2$qVil{#oIui@YPiOPm_AXztLg;J>Dv znt2WvI$&bV3WmLh5ob{GvnrGB3g9kqG_r+XT#}m2TMpy9B4NG|B|S7RqU`kI18Qu_ zE)q|UnHuu)9mN0e@>82N{jx@Dm(C|-zSEP@7_>pyraaIIfpWByk5xNZK_6L!;Be07 zmBk!cBA zJVv-aVV=4DqXR89fd)6Fi0R5Tnbrd%Eu+G0k$i(|eQlyOhDOnE!fHiL0CRq044_^$ zYpe+!geoE0lv2wiJ!>*&vm`HTdUVEX2o9U}iy23A(_ePr6)92NmMBfSEY%&T~1jCpXH_+D#9!TUO{aVq=Gni6q|9f0T7eDd@2igT|cg$O^GdIw|)X$^S@mw zh&CGhU;nahq~_UnoRu8P205IT*ms_l^b^9q+XQ1hZErm`M_m?N3OtgiNhqpJ6TNdT zAkqGwJCL7Iwv}+uQMo2spIV(03~lb3FVN3ldazM>2BpP3ykT(%)L3p=SZFznH4m|l zU@m_ZWR>Q#8YktYcAS-kvHm02s*5+UW!#YH@$2w>q;B^j;BtY#vJ{e4K$rpRj$kSd zo_>%RKcIWV^BM9cTAax|vwZi){u?)nF4Z1gviE}Vx?S#+VS^_FZ^gf)%)(HBCVnFW z({G_GE65u=U1;tGU{>c{HT}6Rl9cYrFv#P0q%HVR5cZe1tP`!utwc+*(zn5i>SNMi zzw+aK7e$+4el@Nlp@k2iDOU{0he-O#4nZj(;vSxhm|5;wmldaxQi$1Pvp()%;N7=> z2G5~G37E}#TKI`p^yU2%P#12ec|E)j2+Dcx6r^nK%}W)^*Y~F9JhgO(`kMot{vVZ+ zB8w*WgiR&@$TSW|QJ1&}RF@??t3>ym=&r-@lkK?;#DoAeuFh7Hz*iD1>mFWua4PJ> z^Bif&eD1D6yTsZ775Qnl|D%Dc$}{7;UZ{%M=;RKazC;Z;d-G^>_!s2LG~KwXey6hJ zdb3cCljlp98m-s2Bs&gY!ua8l>zjE>j47Wgxc4p4i7R^@)O(^zx@nG(tt82VRW-8rTMLe z@7OkozagB_fK!aBb1Q3$nXHn&?-~Nz?89irTt=?1h7Fxxb&_4JDnveUcg{q(UZuvK zERE5ejLe)Yb=AsZTwILVA|-Oh7m*$LC^`?&g-lL&!;dZ8Pyy+dEsi+i83j*vL!K)2 zJ)`#t)IG&tR76&Z=#ISqV7AY9v<{~K&H77Q4zFl}C8A(T_YE#7*d|sN-dsL^N%w6n zuUnZ;2%7)c`sk!2$#I6=STac{xxq*IP`{-+-#+-^f@yol9d--tI4t%1JTM5{KWZ~va7)k))OyE6)*A- zUpRatuBkA~(iCkm@4&rIgmL<}ZUPXjD5gp<%@ud>hr51dC-}x)-Su4*nJGYAS910t z;^fY=XCB!$%0LuclV&$PVU zcTEu(R-(9GI0Wx>91QbFY$Fq8-<3p8Mj&%fZRjtP4J*Hw5t|;IaR788jZk}# z_~I1u#O2mSGgXa3sU0?hws%7)d8bP*#4kJxQ4YDs3}|FDn5p6%kVB$>V9PWtP^ef^ zyyRelBQ($nnej~wt?Q&rP5S&{+L}tO-Wt(jzuB+c70^2Hwhv8v>wws4%XCcPz24hE z_ZxBOhVHRFdb0I5BtHFE-vVBqL=edPZ*Fh7{_ES$zdUXHt=;`DBZr`Z{1le_1NQ1n z4i!ilQu2Fu3wHZtuXO&@=sq0|8@rw8)Ent7Cl~#5^EyZTw=L5R)nPI5BW za{@^Db%1))PgcY-p3HbwEM;8p(4Bb`OuR9(l6@jVHM125L-r^jHk%q#kh>u6gD5b~ zWX(x}JzG21*(GDSpodYiQ}EaoEB^}Z#tIZkohn64dY%%LFB~Lxec=yoAF3e9qIaabLuDe2?uv# zuZs6SrZE)`ZFf)XXQ$Y=E7moj{rou{H3JBOT-<61A*nOP)PSe~D5?vn;#%(zglzYn zguw|d9KU7}J-6|HG3ST@1hB7a86lBM<(ql&z6k?RV#)&2hwcBci!Z!+xCAhcavigj z{qT$#@?X!tXOuS|0Q{(EHnF+5zpdYis~c-uYHZq<-mi{pN`GvoX~(TMr-;>Y*orp- zC1~|OUJa){UV%ajR5-*b#;-$`FT2!nw6jYujdlrd*rRELb?jFO!lrw_EpH-up)e;w z{q-Uhehef5gc^PV#mjt1{vgeQhTJJrCvNHjI&b=|VRYgAG@?D31S3{~5vc_|{$!*( zmPb-0G47PQ@Y07n{c%kGV5L3QniCyA-c(mU;t~8hG~kfOPcXN4aUG#xXtRZ-lIFk-EGmvB}s_fzL!}yOyPtM zFQ&Lh5zPKy2gOZw0UVgiwI%)UALVt5Mg8x;)wOpvn5tSS2Xr649S1sIqX*t6$>43@ zdIC;{3jo}HISC>aUNPeD@N2cVDIyNDRJ`Y=#kZ<$-kE0QdC~h@lj>^~P6J&})MYK+ zhGzO8L+ZB?ukb0^Ef7@1T<5?|Hnb*hXxue!Xmf$A{oix~U`z^y0{jxbUU>EdxA%?5 zY;oYf7dfWc5tWi|R3M2o+VoG~TfFPEba?qsuIG*3>CDJo1j@i9j>z0bkiBiYs~ zYE)N@s!`S)2^`f|_MLpPJ4EbD3%()$Cu(87JVyV-0Rbsv`+uUA);HS!udT0+YpdzH zC4mCP-QC?axVua6;x45~fdZivcMmSb-Q5aB3baUp;!bfWP+V`?=l$;Yy!Us{KPR(i z&6+tg`|J~0*#kI~`y+US?!E>vAj}x5fLpQM0nucCY^`~*fKlPUwa&u;PIwX{6)4sj zKosgC1VnPYEKOX58V;AwxyW1;$(PlKnlsH~~^dX$SrCdW}rf$U_-)0jY}pRRnX zuXkfmVm&k(Y3gj<=SomGj#EXiOb9+>;pm-P?{&A^E3=;GhjaW-G$&UwGVyUKk!Ba% zDFcT>+pc6Gi8`45VaRfyeJ8oiPCFQXK;X|&(E`pOEivc6Q@|ntmJ5<3k03N$;&ilj z@~0>fifiNX>ASesR-2}YJuzTnKel&cpWqO^wpFt~V|{2RSjoaFYCXhgu zC+&UhX)1z*<)%MSeR|*a>*x7TFJkuF>^E_Sh!LNERQUi(lR8L`PR=yBE{sy6O!>>W zp|}_Lkg!VqWBaLd_lcT=bZa85lw$+G@yw5#o?ygbkc!h0d)N#~eeyu&#bEN4t7!o-gY|Y~V?S0pvX4`6` z>sFR$()voY$E=2*zuR&yJZ>RMrrk!uHMXf25TYz85l=ZehS_0_o^K}oa>qv3rtv$U z+*~4jMC|trteLWVm>EvYBZnLq6P^ly2M0}FvJPtU?(L3m73^s$dpP^~;}sGkxRgF5 zBch`la6ljQE($LvN7qT@O1~JsoZ%OpD@J7f4Grp(!Den&AB7-PFxB?}C7EaBT?x7We*f)__rf zDn#c|V_FkW%xz^)zZ2jQjP|fDV;asi`JNlAKb!X}ADe~8%R8M`F*~I>22+KHMg$yc z5_E}sg@WtZ;4cx}hbn$+$70vn(@S%dcCUKizgX$XM^H~l_|;5ZkhNwx3AsjhcBQ_< zc6OBiyjkq=X<23Zr`m+)5fM>83k{K_W($Nx}VvFm4*!8cRH-FvaON&f^KA_IJ7UZrg01U3Xbx z#e#7KLXCNbbYr#zWHvGLt*=4bwrh2MUFW$L^d9A%_QWeEi^WKK6a2?li#9K$)_+4v z^;9jREbLdB)Z9K;uuZQS{y5N*#UqggMWshfv)FR6B5uCh;}M;(hmQ*xm{97ME0voj z`k|KPb`3&5xidwpt#vO(XMxV-lvvE7&*7y@Qah89b2tWobbpJdZ*%DLFSTr3n)E9X zSF49xcRRfBSnA+ex$IkZNyygr@^ghG_wt0+jvN{jgpzzPYH>NadzJmxW}CR-nN!8h zle(*2_7%UJL{XD4bs$rarRqRplhD0xq^5YdVZT_ubJ)kW6d9(xM4`b`#!(`Q?*WQ4 z^TZp&XH1`VvClw;WG*W+FDOoOi`c?SE?sdFhDi;+e^jWC2+gm?YEpv~*KCvT6TOY6 zx*h4R%lpFE20{3_9?U>})Q}eu9>h1L^gfR)?V&A(@u`x>NTa?X0||L6MpSF&cV@08N;L7LHgsc~Pmv(NpS9rYw)5?}=ej#1ueUb<=`|tg zG*+FnESW5~oKOC0$a_y2iM=^cU|lJ&8T^iq$Lxzb*d+%MFL!LU$MG&)A&_c;5uzH( z*&Vn+P_Wn`q$(CiRN^u~{`C`e5yrNY;USOrvEi;{JN1^UpBSezR+VKrxdKk3fHuYs zmxe)Z$_N+jz?EJb=_nN+Bjs@Wj2sfQPPWc;haDcH<5jle56PK{1(xIaHfaMsPo#pm zYJT)>&8S7|8D2W3=9h^jy~Cci#t<_NF>*3*UGre%-|TCtD=lcE$MFQTMvnbE5NqOJ z;2f%lrI4?}at8?_%R!Q%E(`RN7}R}99ksb%3b9i!EuFex;Rmej|Hf}_>DS2Xe491U z;beMBGAmhw6Ibs|jRdku^RWX<#z?B0y?Jos^kI4aLh57B!BQE{C?Pmr1j1WF`Nlub zlF9_JSo`kwG`e9vuaD<>`iNgh`jm_l+!HkV$^v4mLG}5WIqtpU7R!>#XQnE1d@lW& zqvW0{+N#!wQ>5)``JV`pEb-TrSh%qo=^~~+*Vt2vRzK&lrj)*CrWm}(s#J_(BN!lQ zpb5|Zk~Q#?dV6ia*SfwWvfez^N@aRtgXA3nN|&R|LqCvS8#80!61(wTm%~{$6F88{ z@TYrl=vHJX2vLN4)NUgz(nw+IEB#Jk^saF@ifix_?4RsN$m;xVSc)*0EB$}t9vJ#Q z2|x-}69Q5~*QWr)5E>Ec==VWHxRTOvks)>AgD)6I;AEr`lU@e@=m@H&I?)?2a;V2? zHIh@4Y+CHlg=iTYL!UT$jc0!pw=`GNBt45V8!uxtB~7QD z!-UY8DVx%OoQ>SrMH@%wx%qwU`~Eb=vVyv*a^|{ro*A;UL?!Wpgs;}yG1XVvD8-p6 zwpyS|tI=3$BV5-CRDlt*w1j?aOK6p2vGR zi%4SqI!JDT4+|30`2p3KL^`%IE91KrmYh3UgMA&_uQ{df3+CU?h)$Lp+L(#5NezA# zZhc`C2{+=43FEa1A))On*)eya!*k8193r(Z9-Qni(WVrLX|l(QwdDaL(SB4bnaQrN zUrdz~CWtLIDZx{CWyJqYY}_I={=EEC5iUDRk^7{c*)9aEX5=FQywpiOmOXMg0U7!^uNTF6XYmQ zr;En=2~7{KVA-3P3f0=O^BFjP_hecjV4$JFbCi-@BqsP)WN420U61d_3qgmk_~I;u z3j}(T`>OhlkZMD_#bh1s7Ner-CVLJ&i-7zZ48+vwcJ zvo+Y)&wCoV$mF*RH#s(1QJ7Vf6f>|l+6!01Ib_+r!(qwLs<(GH)Vuwf8ojGGZo-6x z3r6neWd}u%+bWx(8b^}sMr5B1>rQR0%cAZY;N_DLL3m|_$&rJ-wD90PHvLBD9Se-? zv=a2CS}Ubvz3{mSNTJ@>Z%KzqqNOdJ&HA(`obBxiO2e7^RCvkYv$>t9Po*2**k8`r zYo-5K3UA@lB{VF=bO}?cOSqV~BJhlymQQ+0&LL$7fxV-+CosbFYa{8@$2?1a@B2sh z$PliVLGqCn#!|>H6No6t#yOkzXgY{mII^9hS)5Q1sqRiGJ`PX$iMiCyi+?h`L+vPJgW!R57Tkp*nX`G?Opvy3bAKgmO_hjkoM;-KT7SQ9pi|0#c_

Z^hsCYsU@~WR>sUo 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 None: table = tables[3]["cells"] self.assertListEqual(["", "2016", "2017", "2018", "2019"], self._get_text_of_row(table[0])) - self.assertListEqual(["", "Прогноз", "Прогноз бюджета", "Прогноз бюджета", "Прогноз бюджета"], self._get_text_of_row(table[1])) - self.assertListEqual(["Ненефтегазов\nые доходы", "10,4", "9,6", "9,6", "9,6"], self._get_text_of_row(table[19])) - self.assertListEqual(["Сальдо\nбюджета", "-3,7", "-3,2", "-2,2", "-1,2"], self._get_text_of_row(table[20])) + self.assertListEqual(["", "Прогноз", "Прогноз бюджета"], self._get_text_of_row(table[1])) + self.assertListEqual(["Ненефтегазов\nые доходы", "10,4", "9,6", "9,6", "9,6"], self._get_text_of_row(table[21])) + self.assertListEqual(["Сальдо\nбюджета", "-3,7", "-3,2", "-2,2", "-1,2"], self._get_text_of_row(table[22])) tree = content["structure"] self._check_tree_sanity(tree) @@ -225,7 +225,7 @@ def test_tables_with_merged_cells(self) -> None: result = self._send_request(file_name, data=dict(pdf_with_text_layer="tabby")) table = result["content"]["tables"][0]["cells"] - hidden_cells_big_table_with_colspan = [[(1, 0), 10], [(5, 5), 5]] + hidden_cells_big_table_with_colspan = [[(1, 0), 10], [(5, 1), 5]] for (i, j), k in hidden_cells_big_table_with_colspan: self.assertFalse(table[i][j]["invisible"])