



'''simple docstring'''




# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re

from ..models.auto import AutoProcessor
from ..models.vision_encoder_decoder import VisionEncoderDecoderModel
from ..utils import is_vision_available
from .base import PipelineTool


if is_vision_available():
						from PIL import Image







class      _lowerCAmelCase							(      __UpperCAmelCase			):
	__SCREAMING_SNAKE_CASE       :		Tuple		      = 'naver-clova-ix/donut-base-finetuned-docvqa'
	__SCREAMING_SNAKE_CASE       :		str		      = (
	    'This is a tool that answers a question about an document (pdf). It takes an input named `document` which '
	    'should be the document containing the information, as well as a `question` that is the question about the '
	    'document. It returns a text that contains the answer to the question.'
	)
	__SCREAMING_SNAKE_CASE       :		str		      = 'document_qa'
	__SCREAMING_SNAKE_CASE       :		Tuple		      = AutoProcessor
	__SCREAMING_SNAKE_CASE       :		Optional[Any]		      = VisionEncoderDecoderModel

	__SCREAMING_SNAKE_CASE       :		Any		      = ['image', 'text']
	__SCREAMING_SNAKE_CASE       :		Optional[Any]		      = ['text']


	def __init__(self	,				*lowercase	,				**lowercase							):
				if not is_vision_available():
							raise ValueError("""Pillow must be installed to use the DocumentQuestionAnsweringTool."""							)

				super().__init__(*__A	,				**__A							)


	def    _a     (self	,				lowercase	,				lowercase							):
				A_     :						int     =					"""<s_docvqa><s_question>{user_input}</s_question><s_answer>"""
				A_     :						List[str]     =					task_prompt.replace("""{user_input}"""	,				__A							)
				A_     :						int     =					self.pre_processor.tokenizer(
				    __A	,				add_special_tokens=__A	,				return_tensors="""pt"""							).input_ids
				A_     :						List[str]     =					self.pre_processor(__A	,				return_tensors="""pt"""							).pixel_values

				return {"decoder_input_ids": decoder_input_ids, "pixel_values": pixel_values}


	def    _a     (self	,				lowercase							):
				return self.model.generate(
				    inputs["""pixel_values"""].to(self.device							)	,				decoder_input_ids=inputs["""decoder_input_ids"""].to(self.device							)	,				max_length=self.model.decoder.config.max_position_embeddings	,				early_stopping=__A	,				pad_token_id=self.pre_processor.tokenizer.pad_token_id	,				eos_token_id=self.pre_processor.tokenizer.eos_token_id	,				use_cache=__A	,				num_beams=1	,				bad_words_ids=[[self.pre_processor.tokenizer.unk_token_id]]	,				return_dict_in_generate=__A	,				).sequences


	def    _a     (self	,				lowercase							):
				A_     :						Optional[int]     =					self.pre_processor.batch_decode(__A							)[0]
				A_     :						List[Any]     =					sequence.replace(self.pre_processor.tokenizer.eos_token	,				""""""							)
				A_     :						Dict     =					sequence.replace(self.pre_processor.tokenizer.pad_token	,				""""""							)
				A_     :						Optional[int]     =					re.sub(R"""<.*?>"""	,				""""""	,				__A	,				count=1							).strip()  # remove first task start token
				A_     :						List[str]     =					self.pre_processor.tokenajson(__A							)

				return sequence["answer"]




'''simple docstring'''




def      a      (			):
			'''simple docstring'''





			A_     :						Optional[int]     =					[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

			A_     :						Dict     =					6
			A_     :						List[Any]     =					1
			A_     :						Optional[Any]     =					19_01

			A_     :						Tuple     =					0

			while year < 20_01:
						day += 7

						if (year % 4 == 0 and year % 1_00 != 0) or (year % 4_00 == 0):
									if day > days_per_month[month - 1] and month != 2:
												month += 1
												A_     :						Optional[Any]     =					day - days_per_month[month - 2]
									elif day > 29 and month == 2:
												month += 1
												A_     :						str     =					day - 29
						else:
									if day > days_per_month[month - 1]:
												month += 1
												A_     :						List[str]     =					day - days_per_month[month - 2]

						if month > 12:
									year += 1
									A_     :						Tuple     =					1

						if year < 20_01 and day == 1:
									sundays += 1
			return sundays


if __name__ == "__main__":
						print(solution())