# coding: utf-8
from types import SimpleNamespace

from datetime import datetime, timedelta
from unittest.mock import patch

from dateutil.relativedelta import relativedelta
from jinja2 import Undefined, Markup
from mock import Mock

from app.jinja_filters import (
    format_date, format_conditional_date, format_currency, get_currency_symbol,
    format_multilined_string, format_percentage, format_date_range,
    format_household_member_name, format_datetime,
    format_number_to_alphabetic_letter, format_unit, format_currency_for_input,
    format_number, format_unordered_list, format_unit_input_label,
    format_household_member_name_possessive, concatenated_list,
    calculate_years_difference, get_current_date, as_london_tz, max_value,
    min_value, get_question_title, get_answer_label,
    format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom,
    format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list)
from tests.app.app_context_test_case import AppContextTestCase


class TestJinjaFilters(AppContextTestCase):  # pylint: disable=too-many-public-methods
    def setUp(self):
        self.autoescape_context = Mock(autoescape=True)
        super(TestJinjaFilters, self).setUp()

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='en_GB'))
    def test_format_currency_for_input(self):
        self.assertEqual(format_currency_for_input('100', 2), '100.00')
        self.assertEqual(format_currency_for_input('100.0', 2), '100.00')
        self.assertEqual(format_currency_for_input('100.00', 2), '100.00')
        self.assertEqual(format_currency_for_input('1000'), '1,000')
        self.assertEqual(format_currency_for_input('10000'), '10,000')
        self.assertEqual(format_currency_for_input('100000000'), '100,000,000')
        self.assertEqual(format_currency_for_input('100000000', 2), '100,000,000.00')
        self.assertEqual(format_currency_for_input(0, 2), '0.00')
        self.assertEqual(format_currency_for_input(0), '0')
        self.assertEqual(format_currency_for_input(''), '')
        self.assertEqual(format_currency_for_input(None), '')
        self.assertEqual(format_currency_for_input(Undefined()), '')

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='en_GB'))
    def test_get_currency_symbol(self):
        self.assertEqual(get_currency_symbol('GBP'), '£')
        self.assertEqual(get_currency_symbol('EUR'), '€')
        self.assertEqual(get_currency_symbol('USD'), 'US$')
        self.assertEqual(get_currency_symbol('JPY'), 'JP¥')
        self.assertEqual(get_currency_symbol(''), '')

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='en_GB'))
    def test_format_currency(self):
        self.assertEqual(format_currency(self.autoescape_context, '11', 'GBP'), "<span class='date'>£11.00</span>")
        self.assertEqual(format_currency(self.autoescape_context, '11.99', 'GBP'), "<span class='date'>£11.99</span>")
        self.assertEqual(format_currency(self.autoescape_context, '11000', 'USD'), "<span class='date'>US$11,000.00</span>")
        self.assertEqual(format_currency(self.autoescape_context, 0), "<span class='date'>£0.00</span>")
        self.assertEqual(format_currency(self.autoescape_context, 0.00), "<span class='date'>£0.00</span>")
        self.assertEqual(format_currency(self.autoescape_context, '', ), "<span class='date'></span>")
        self.assertEqual(format_currency(self.autoescape_context, None), "<span class='date'></span>")
        self.assertEqual(format_currency(self.autoescape_context, Undefined()), "<span class='date'></span>")

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='en_GB'))
    def test_format_number(self):
        self.assertEqual(format_number(123), '123')
        self.assertEqual(format_number('123.4'), '123.4')
        self.assertEqual(format_number('123.40'), '123.4')
        self.assertEqual(format_number('1000'), '1,000')
        self.assertEqual(format_number('10000'), '10,000')
        self.assertEqual(format_number('100000000'), '100,000,000')
        self.assertEqual(format_number(0), '0')
        self.assertEqual(format_number(0.00), '0')
        self.assertEqual(format_number(''), '')
        self.assertEqual(format_number(None), '')
        self.assertEqual(format_number(Undefined()), '')

    def test_format_multilined_string_matches_carriage_return(self):
        # Given
        new_line = 'this is on a new\rline'

        # When
        format_value = format_multilined_string(self.autoescape_context, new_line)

        self.assertEqual(format_value, 'this is on a new<br>line')

    def test_format_multilined_string_matches_new_line(self):
        # Given
        new_line = 'this is on a new\nline'

        # When
        format_value = format_multilined_string(self.autoescape_context,
                                                new_line)

        self.assertEqual(format_value, 'this is on a new<br>line')

    def test_format_multilined_string_matches_carriage_return_new_line(self):
        # Given
        new_line = 'this is on a new\r\nline'

        # When
        format_value = format_multilined_string(self.autoescape_context, new_line)

        self.assertEqual(format_value, 'this is on a new<br>line')

    def test_format_multilined_string(self):
        # Given
        new_line = 'this is\ron a\nnew\r\nline'

        # When
        format_value = format_multilined_string(self.autoescape_context,
                                                new_line)

        self.assertEqual(format_value, 'this is<br>on a<br>new<br>line')

    def test_format_multilined_string_auto_escape(self):
        # Given
        new_line = '<'

        # When
        format_value = format_multilined_string(self.autoescape_context, new_line)

        self.assertEqual(str(format_value), '&lt;')

    def test_get_current_date(self):
        # Given
        date_format = '%-d %B %Y'

        # When
        format_value = get_current_date(self.autoescape_context)
        current_date = as_london_tz(datetime.utcnow()).strftime(date_format)

        # Then
        self.assertEqual(format_value, "<span class='date'>{date}</span>".format(date=current_date))

    def test_format_date(self):
        # Given
        date = '2017-01-01'

        # When
        with self.app_request_context('/'):
            format_value = format_date(self.autoescape_context, date)

        # Then
        self.assertEqual(format_value, "<span class='date'>1 January 2017</span>")

    def test_format_date_month_year(self):
        # Given
        date = '2017-01'

        # When
        with self.app_request_context('/'):
            format_value = format_date(self.autoescape_context, date)

        # Then
        self.assertEqual(format_value, "<span class='date'>January 2017</span>")

    def test_format_date_markup(self):
        # Given
        date = [Markup('2017-01')]

        # When
        with self.app_request_context('/'):
            format_value = format_date(self.autoescape_context, date)

        # Then
        self.assertEqual(format_value, "<span class='date'>January 2017</span>")

    def test_format_date_non_string(self):
        # Given
        date = 123

        # When
        format_value = format_date(self.autoescape_context, date)

        # Then
        self.assertEqual(format_value, 123)

    def test_format_date_none(self):
        # Given
        date = None

        # When
        format_value = format_date(self.autoescape_context, date)

        # Then
        self.assertIsNone(format_value)

    def test_format_date_time_in_bst(self):
        # Given
        date_time = '2018-03-29T11:59:13.528680'

        # When
        with self.app_request_context('/'):
            format_value = format_datetime(self.autoescape_context, date_time)

        # Then
        self.assertEqual(format_value, "<span class='date'>29 March 2018 at 12:59</span>")

    def test_format_date_time_in_gmt(self):
        # Given
        date_time = '2018-10-28T11:59:13.528680'

        # When
        with self.app_request_context('/'):
            format_value = format_datetime(self.autoescape_context, date_time)

        # Then
        self.assertEqual(format_value, "<span class='date'>28 October 2018 at 11:59</span>")

    def test_format_conditional_date_not_date(self):
        # Given       no test for integers this check was removed from jinja_filters

        invalid_input = [('1', None),
                         ('1-1-1', None)]

        # When
        for nonsense in invalid_input:
            date1 = nonsense[0]
            date2 = nonsense[1]
            with self.assertRaises(Exception) as exception:
                format_conditional_date(self.autoescape_context, date1, date2)
        # Then
            self.assertIn("does not match format '%Y-%m'", str(exception.exception))

    def test_format_conditional_date_not_set(self):
        # Given

        # When
        with self.assertRaises(Exception) as exception:
            format_conditional_date(self.autoescape_context, None, None)

        # Then
        self.assertIn('No valid dates passed to format_conditional_dates filter', str(exception.exception))

    def test_format_conditional_date(self):
        # Given

        datelist = [('2016-01-12', '2016-02-12', '12 January 2016'),
                    ('2017-12-23', None, '23 December 2017'),
                    (None, '2017-12-24', '24 December 2017')]

        # When
        with self.app_request_context('/'):
            for triple in datelist:
                date1 = triple[0]
                date2 = triple[1]

                format_value = format_conditional_date(self.autoescape_context, date1, date2)

                # Then
                self.assertEqual(format_value, "<span class='date'>{date}</span>".format(date=triple[2]))

    def test_calculate_years_difference(self):
        with patch('app.setup.get_session_store', return_value=None):
            # Given
            ten_years_ago = (datetime.today()+relativedelta(years=-10)).strftime('%Y-%m-%d')

            date_list = [('2017-01-30', '2018-01-30', '1 year'),
                         ('2015-02-02', '2018-02-01', '2 years'),
                         ('2016-02-29', '2017-02-28', '1 year'),
                         ('2016-02-29', '2020-02-28', '3 years'),
                         (ten_years_ago, 'now', '10 years')]

            for dates in date_list:
                start_date = dates[0]
                end_date = dates[1]

                # When
                calculated_value = calculate_years_difference(start_date, end_date)

                # Then
                self.assertEqual(calculated_value, dates[2])

    def test_calculate_years_difference_none(self):
        # Given
        with self.assertRaises(Exception) as e:

            # When
            calculate_years_difference(None, '2017-01-17')

        # Then
        self.assertEqual('Valid date(s) not passed to calculate_years_difference filter', str(e.exception))

    def test_format_date_range(self):
        # Given
        start_date = '2017-01-01'
        end_date = '2017-01-31'

        # When
        with self.app_request_context('/'):
            format_value = format_date_range(self.autoescape_context, start_date, end_date)

        # Then
        self.assertEqual(format_value, "<span class='date'>1 January 2017</span> to <span class='date'>31 January 2017</span>")

    def test_format_date_range_missing_end_date(self):
        # Given
        start_date = '2017-01-01'

        # When
        with self.app_request_context('/'):
            format_value = format_date_range(self.autoescape_context, start_date)

        # Then
        self.assertEqual(format_value, "<span class='date'>1 January 2017</span>")

    def test_format_household_member_name(self):
        # Given
        name = ['John', 'Doe']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'John Doe')

    def test_format_household_member_name_no_surname(self):
        # Given
        name = ['John', '']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'John')

    def test_format_household_member_name_surname_is_none(self):
        # Given
        name = ['John', None]

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'John')

    def test_format_household_member_name_no_first_name(self):
        # Given
        name = ['', 'Doe']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'Doe')

    def test_format_household_member_name_first_name_is_none(self):
        # Given
        name = [None, 'Doe']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'Doe')

    def test_format_household_member_name_first_middle_and_last(self):
        # Given
        name = ['John', 'J', 'Doe']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'John J Doe')

    def test_format_household_member_name_no_middle_name(self):
        # Given
        name = ['John', '', 'Doe']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'John Doe')

    def test_format_household_member_name_middle_name_is_none(self):
        # Given
        name = ['John', None, 'Doe']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'John Doe')

    def test_format_household_member_name_trim_spaces(self):
        # Given
        name = ['John  ', '   Doe   ']

        # When
        format_value = format_household_member_name(name)

        self.assertEqual(format_value, 'John Doe')

    def test_format_household_member_name_possessive(self):
        # Given
        name = ['John', 'Doe']

        # When
        format_value = format_household_member_name_possessive(name)

        self.assertEqual(format_value, 'John Doe\u2019s')

    def test_format_household_member_name_possessive_with_no_names(self):
        # Given
        name = [Undefined(), Undefined()]

        # When
        format_value = format_household_member_name_possessive(name)

        self.assertIsNone(format_value)

    def test_format_household_member_name_possessive_trailing_s(self):
        # Given
        name = ['John', 'Does']

        # When
        format_value = format_household_member_name_possessive(name)

        self.assertEqual(format_value, 'John Does\u2019')

    def test_concatenated_list(self):
        # Given
        list_items = ['1 The ONS', 'Newport', 'NP108XG']

        # When
        format_value = concatenated_list(list_items)

        self.assertEqual(format_value, '1 The ONS, Newport, NP108XG')

    def test_concatenated_list_one_entry(self):
        # Given
        list_items = ['One entry']

        # When
        format_value = concatenated_list(list_items)

        self.assertEqual(format_value, 'One entry')

    def test_concatenated_list_trim_white_spaces_and_trailing_commas(self):
        # Given
        list_items = ['', '1 The ONS  ', 'Newport  ', '  NP108XG', '']

        # When
        format_value = concatenated_list(list_items)

        self.assertEqual(format_value, '1 The ONS, Newport, NP108XG')

    def test_format_percentage(self):
        self.assertEqual(format_percentage('100'), '100%')
        self.assertEqual(format_percentage(100), '100%')
        self.assertEqual(format_percentage(4.5), '4.5%')

    def test_format_number_to_alphabetic_letter(self):
        self.assertEqual(format_number_to_alphabetic_letter(0), 'a')
        self.assertEqual(format_number_to_alphabetic_letter(4), 'e')
        self.assertEqual(format_number_to_alphabetic_letter(25), 'z')
        self.assertEqual(format_number_to_alphabetic_letter(-1), '')

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='en_GB'))
    def test_format_unit(self):
        self.assertEqual(format_unit('length-meter', 100), '100 m')
        self.assertEqual(format_unit('length-centimeter', 100), '100 cm')
        self.assertEqual(format_unit('length-mile', 100), '100 mi')
        self.assertEqual(format_unit('length-kilometer', 100), '100 km')
        self.assertEqual(format_unit('area-square-meter', 100), '100 m²')
        self.assertEqual(format_unit('area-square-centimeter', 100), '100 cm²')
        self.assertEqual(format_unit('area-square-kilometer', 100), '100 km²')
        self.assertEqual(format_unit('area-square-mile', 100), '100 sq mi')
        self.assertEqual(format_unit('area-hectare', 100), '100 ha')
        self.assertEqual(format_unit('area-acre', 100), '100 ac')
        self.assertEqual(format_unit('volume-cubic-meter', 100), '100 m³')
        self.assertEqual(format_unit('volume-cubic-centimeter', 100), '100 cm³')
        self.assertEqual(format_unit('volume-liter', 100), '100 l')
        self.assertEqual(format_unit('volume-hectoliter', 100), '100 hl')
        self.assertEqual(format_unit('volume-megaliter', 100), '100 Ml')
        self.assertEqual(format_unit('duration-hour', 100), '100 hrs')
        self.assertEqual(format_unit('duration-hour', 100, 'long'), '100 hours')
        self.assertEqual(format_unit('duration-year', 100, 'long'), '100 years')

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='cy'))
    def test_format_unit_welsh(self):
        self.assertEqual(format_unit('duration-hour', 100), '100 awr')
        self.assertEqual(format_unit('duration-year', 100), '100 bl')
        self.assertEqual(format_unit('duration-hour', 100, 'long'), '100 awr')
        self.assertEqual(format_unit('duration-year', 100, 'long'), '100 mlynedd')

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='en_GB'))
    def test_format_unit_input_label(self):
        self.assertEqual(format_unit_input_label('length-meter'), 'm')
        self.assertEqual(format_unit_input_label('length-centimeter'), 'cm')
        self.assertEqual(format_unit_input_label('length-mile'), 'mi')
        self.assertEqual(format_unit_input_label('length-kilometer'), 'km')
        self.assertEqual(format_unit_input_label('area-square-meter'), 'm²')
        self.assertEqual(format_unit_input_label('area-square-centimeter'), 'cm²')
        self.assertEqual(format_unit_input_label('area-square-kilometer'), 'km²')
        self.assertEqual(format_unit_input_label('area-square-mile'), 'sq mi')
        self.assertEqual(format_unit_input_label('area-hectare'), 'ha')
        self.assertEqual(format_unit_input_label('area-acre'), 'ac')
        self.assertEqual(format_unit_input_label('volume-cubic-meter'), 'm³')
        self.assertEqual(format_unit_input_label('volume-cubic-centimeter'), 'cm³')
        self.assertEqual(format_unit_input_label('volume-liter'), 'l')
        self.assertEqual(format_unit_input_label('volume-hectoliter'), 'hl')
        self.assertEqual(format_unit_input_label('volume-megaliter'), 'Ml')
        self.assertEqual(format_unit_input_label('duration-hour'), 'hr')
        self.assertEqual(format_unit_input_label('duration-hour', 'long'), 'hours')
        self.assertEqual(format_unit_input_label('duration-year'), 'yr')
        self.assertEqual(format_unit_input_label('duration-year', 'long'), 'years')

    @patch('app.jinja_filters.flask_babel.get_locale', Mock(return_value='cy'))
    def test_format_unit_input_label_welsh(self):
        self.assertEqual(format_unit_input_label('duration-hour'), 'awr')
        self.assertEqual(format_unit_input_label('duration-hour', 'long'), 'awr')
        self.assertEqual(format_unit_input_label('duration-year'), 'bl')
        self.assertEqual(format_unit_input_label('duration-year', 'long'), 'flynedd')


    def test_format_year_month_duration(self):
        with self.app_request_context('/'):
            self.assertEqual(format_duration({'years': 5, 'months': 4}), '5 years 4 months')
            self.assertEqual(format_duration({'years': 5, 'months': 0}), '5 years')
            self.assertEqual(format_duration({'years': 0, 'months': 4}), '4 months')
            self.assertEqual(format_duration({'years': 1, 'months': 1}), '1 year 1 month')
            self.assertEqual(format_duration({'years': 0, 'months': 0}), '0 months')

    def test_format_year_duration(self):
        with self.app_request_context('/'):
            self.assertEqual(format_duration({'years': 5}), '5 years')
            self.assertEqual(format_duration({'years': 1}), '1 year')
            self.assertEqual(format_duration({'years': 0}), '0 years')

    def test_format_month_duration(self):
        with self.app_request_context('/'):
            self.assertEqual(format_duration({'months': 5}), '5 months')
            self.assertEqual(format_duration({'months': 1}), '1 month')
            self.assertEqual(format_duration({'months': 0}), '0 months')

    def test_format_unordered_list(self):
        list_items = [['item 1', 'item 2']]

        formatted_value = format_unordered_list(self.autoescape_context, list_items)

        expected_value = '<ul><li>item 1</li><li>item 2</li></ul>'

        self.assertEqual(expected_value, formatted_value)

    def test_format_unordered_list_with_no_input(self):
        list_items = []

        formatted_value = format_unordered_list(self.autoescape_context, list_items)

        self.assertEqual('', formatted_value)

    def test_format_unordered_list_with_empty_list(self):
        list_items = [[]]

        formatted_value = format_unordered_list(self.autoescape_context, list_items)

        self.assertEqual('', formatted_value)

    def test_max_value(self):
        # Given
        two_ints = (1, 2)

        # When
        max_of_two = max_value(*two_ints)

        # Then
        self.assertEqual(max_of_two, 2)

    def test_max_value_none(self):
        # Given
        one_int = (1, None)

        # When
        max_of_two = max_value(*one_int)

        # Then
        self.assertEqual(max_of_two, 1)

    def test_max_value_undefined(self):
        # Given
        args = ('foo', Undefined())

        # When
        with self.assertRaises(Exception) as exception:
            max_value(*args)

        # Then
        self.assertIn(
            "Cannot determine maximum of incompatible types max(<class 'str'>,"
            " <class 'jinja2.runtime.Undefined'>)", str(exception.exception))

    def test_max_values_incompatible(self):
        # Given
        args = (1, 'abc')

        # When
        with self.assertRaises(Exception) as exception:
            max_value(*args)

        # Then
        self.assertIn(
            "Cannot determine maximum of incompatible types max(<class 'int'>,"
            " <class 'str'>)", str(exception.exception))

    def test_max_values_compatible(self):
        # Given
        args = (-1, True)

        # When
        max_of_two = max_value(*args)

        # Then
        self.assertEqual(max_of_two, True)

    def test_max_value_str(self):
        # Given
        two_str = ('a', 'abc')

        # When
        max_of_two = max_value(*two_str)

        # Then
        self.assertEqual(max_of_two, 'abc')

    def test_max_value_date(self):
        # Given
        now = datetime.utcnow()
        then = now - timedelta(seconds=60)
        two_dates = (then, now)

        # When
        max_of_two = max_value(*two_dates)

        # Then
        self.assertEqual(max_of_two, now)

    def test_min_value(self):
        # Given
        two_ints = (1, 2)

        # When
        min_of_two = min_value(*two_ints)

        # Then
        self.assertEqual(min_of_two, 1)

    def test_min_value_none(self):
        # Given
        one_int = (1, None)

        # When
        min_of_two = min_value(*one_int)

        # Then
        self.assertEqual(min_of_two, 1)

    def test_min_value_undefined(self):
        # Given
        args = ('foo', Undefined())

        # When
        with self.assertRaises(Exception) as exception:
            min_value(*args)

        # Then
        self.assertIn(
            "Cannot determine minimum of incompatible types min(<class 'str'>,"
            " <class 'jinja2.runtime.Undefined'>)", str(exception.exception))

    def test_min_values_incompatible(self):
        # Given
        args = (1, 'abc')

        # When
        with self.assertRaises(Exception) as exception:
            min_value(*args)

        # Then
        self.assertIn(
            "Cannot determine minimum of incompatible types min(<class 'int'>,"
            " <class 'str'>)", str(exception.exception))

    def test_min_values_compatible(self):
        # Given
        args = (-1, True)

        # When
        min_of_two = min_value(*args)

        # Then
        self.assertEqual(min_of_two, -1)

    def test_min_value_str(self):
        # Given
        two_str = ('a', 'abc')

        # When
        min_of_two = min_value(*two_str)

        # Then
        self.assertEqual(min_of_two, 'a')

    def test_min_value_date(self):
        # Given
        now = datetime.utcnow()
        then = now - timedelta(seconds=60)
        two_dates = (then, now)

        # When
        min_of_two = min_value(*two_dates)

        # Then
        self.assertEqual(min_of_two, then)

    def test_get_question_title_with_title_value(self):
        # Given
        question_id = 'question'
        context = SimpleNamespace(
            parent={
                'question': {
                    'id': 'question',
                    'title': 'question_title'
                }
            }
        )

        # When
        title = get_question_title(context, question_id)

        # Then
        self.assertEqual(title, 'question_title')

    def test_get_question_title_with_question_titles(self):
        # Given
        question_id = 'question'
        context = SimpleNamespace(
            parent={
                'question': {
                    'id': 'question'
                },
                'content': {
                    'question_titles': {
                        'question': 'default_question_title'
                    }
                }
            }
        )

        # When
        title = get_question_title(context, question_id)

        # Then
        self.assertEqual(title, 'default_question_title')

    def test_get_answer_label_with_answer_label(self):
        # Given
        answer_id = 'answer'
        question_id = 'question'
        context = SimpleNamespace(
            parent={
                'question': {
                    'id': 'question',
                    'answers': [{
                        'id': 'answer',
                        'label': 'answer_label'
                    }]
                }
            }
        )

        # When
        answer_label = get_answer_label(context, answer_id, question_id)

        # Then
        self.assertEqual(answer_label, 'answer_label')

    def test_get_answer_label_with_no_answer_label_and_title(self):
        # Given
        answer_id = 'answer'
        question_id = 'question'
        context = SimpleNamespace(
            parent={
                'question': {
                    'id': 'question',
                    'title': 'question_title',
                    'answers': [{
                        'id': 'answer'
                    }]
                }
            }
        )

        # When
        answer_label = get_answer_label(context, answer_id, question_id)

        # Then
        self.assertEqual(answer_label, 'question_title')

    def test_get_answer_label_with_no_answer_label_and_question_titles(self):
        # Given
        answer_id = 'answer'
        question_id = 'question'
        context = SimpleNamespace(
            parent={
                'question': {
                    'id': 'question',
                    'answers': [{
                        'id': 'answer'
                    }]
                },
                'content': {
                    'question_titles': {
                        'question': 'default_question_title'
                    }
                }
            }
        )

        # When
        answer_label = get_answer_label(context, answer_id, question_id)

        # Then
        self.assertEqual(answer_label, 'default_question_title')

    def test_offset_date_from_day(self):
        test_cases = [
            # (Input Date, offset, day of week, expected output)
            ('2018-08-10', {}, 'SU', '2018-08-05'), # Friday outputs previous Sunday
            ('2018-08-05', {}, 'SU', '2018-07-29'), # Sunday outputs previous Sunday (Must be a full Sunday)
            ('2018-08-06', {}, 'SU', '2018-08-05'), # Monday outputs previous Sunday
            ('2018-08-06', {'days': -1}, 'SU', '2018-08-04'), # Previous sunday with -1 day offset
            ('2018-08-05', {'weeks': 1}, 'SU', '2018-08-05'), # Previous sunday with +1 month offset, back to input
            ('2018-08-10', {}, 'FR', '2018-08-03'), # Friday outputs previous Friday
            ('2018-08-10T13:32:20.365665', {}, 'FR', '2018-08-03'), # Ensure we can handle datetime input
            ('2018-08-10', {'weeks': 4}, 'FR', '2018-08-31'), # Friday outputs previous Friday + 4 weeks
            ('2018-08-10', {'bad_period': 4}, 'FR', '2018-08-03'), # Friday outputs previous Friday + nothing
            ('2018-08-10', {'years': 1}, 'FR', '2019-08-03'), # Friday outputs previous Friday + 1 year
            ('2018-08-10', {'years': 1, 'weeks': 1, 'days': 1}, 'FR', '2019-08-11'), # Friday outputs previous Friday + 1 year + 1 week + 1 day
        ]
        for case in test_cases:
            self.assertEqual(calculate_offset_from_weekday_in_last_whole_week(*case[0:3]), case[3])

    def test_bad_day_of_week_offset_date_from_day(self):
        with self.assertRaises(Exception):
            calculate_offset_from_weekday_in_last_whole_week('2018-08-10', {}, 'BA')

    def test_offset_date_defaults_to_now_if_date_not_passed(self):
        with patch('app.jinja_filters.datetime') as mock_datetime:
            # pylint: disable=unnecessary-lambda
            mock_datetime.utcnow.return_value = datetime(2018, 8, 10)
            mock_datetime.strftime.side_effect = lambda *args, **kw: datetime.strftime(*args, **kw)

            result = calculate_offset_from_weekday_in_last_whole_week(None, {}, 'SU')
            self.assertEqual(result, '2018-08-05')

    def test_format_date_custom(self):
        test_cases = [
            # Input Date, date format, show year
            ('2018-08-14', 'EEEE d MMMM YYYY', 'Tuesday 14 August 2018'),
            ('2018-08-14', 'EEEE d MMMM', 'Tuesday 14 August'),
            ('2018-08-14', 'EEEE d', 'Tuesday 14'),
            ('2018-08-14', 'd MMMM YYYY', '14 August 2018'),
        ]

        with self.app_request_context('/'):
            for case in test_cases:
                self.assertEqual(
                    format_date_custom(self.autoescape_context, *case[0:2]),
                    "<span class='date'>{}</span>".format(case[2])
                )

    def test_format_date_range_no_repeated_month_year(self):
        test_cases = [
            # Start Date, End Date, Date Format, Output Expected First, Output Expected Second
            ('2018-08-14', '2018-08-16', 'EEEE d MMMM YYYY', 'Tuesday 14', 'Thursday 16 August 2018'),
            ('2018-07-31', '2018-08-16', 'EEEE d MMMM YYYY', 'Tuesday 31 July', 'Thursday 16 August 2018'),
            ('2017-12-31', '2018-08-16', 'EEEE d MMMM YYYY', 'Sunday 31 December 2017', 'Thursday 16 August 2018'),
            ('2017-12-31', '2018-08-16', 'MMMM YYYY', 'December 2017', 'August 2018'),
            ('2018-08-14', '2018-08-16', 'MMMM YYYY', 'August 2018', 'August 2018'),
            ('2017-12-31', '2018-08-16', 'YYYY', '2017', '2018'),
            ('2017-07-31', '2018-08-16', 'YYYY', '2017', '2018'),
            ('2018-08-14', '2018-08-16', 'EEEE d', 'Tuesday 14', 'Thursday 16')
        ]

        with self.app_request_context('/'):
            for case in test_cases:
                self.assertEqual(
                    format_date_range_no_repeated_month_year(self.autoescape_context, *case[0:3]),
                    "<span class='date'>{}</span> to <span class='date'>{}</span>".format(case[3], case[4])
                )

    @patch('app.jinja_filters.format_unordered_list')
    def test_format_repeated_summaries_unformatted(self, patched_format): # pylint: disable=no-self-use

        test_cases = [
            # (input list, expected output)
            ([['John', 'Smith'], [['Jane', 'Sarah'], ['Smith', 'Smythe']]], ['John Smith', 'Jane Smith', 'Sarah Smythe']),
            ([['John', 'Smith']], ['John Smith']),
            ([['John', 'Smith'], ['Andy', 'Smith'], ['David', 'Smith']], ['John Smith', 'Andy Smith', 'David Smith']),
            ([[['Jane', 'Sarah'], ['Smith', 'Smith']]], ['Jane Smith', 'Sarah Smith']),
            ([[['David', 'Sarah'], ['Smith', 'Smith']]], ['David Smith', 'Sarah Smith']),
            ([[['David', 'Sarah'], ['', 'Smith']]], ['David', 'Sarah Smith']),
            ([['John', 'Smith'], [[], []]], ['John Smith'])
        ]

        for case in test_cases:
            format_repeating_summary(None, case[0])
            # Format unordered list takes a list of lists
            patched_format.assert_called_with(None, [[Markup(x) for x in case[1]]])

    def test_format_repeated_summaries_no_input(self):

        self.assertEqual('', format_repeating_summary(None, []))

    def test_format_repeated_summaries_delimiters(self):
        self.autoescape_context = Mock(autoescape=True)
        output = format_repeating_summary(self.autoescape_context, [['', '51 Testing Gardens', '', 'Bristol', 'BS9 1AW']], delimiter=', ')
        self.assertEqual(output, '<ul><li>51 Testing Gardens, Bristol, BS9 1AW</li></ul>')

    def test_format_address_list_undefined_values(self):
        user_entered_address = [Undefined(), Undefined(), Undefined(), Undefined(), Undefined()]
        metadata_address = ['123', 'Testy', 'Place', 'Newport', 'NP5 7AR']
        self.assertEqual('123<br />Testy<br />Place<br />Newport<br />NP5 7AR',
                         format_address_list(user_entered_address, metadata_address))

    def test_format_address_list_missing_values(self):
        user_entered_address = ['44', 'Testing', '', 'Swansea', '']
        metadata_address = ['123', 'Testy', 'Place', 'Newport', 'NP5 7AR']
        self.assertEqual('44<br />Testing<br />Swansea',
                         format_address_list(user_entered_address, metadata_address))

    def test_format_address_list_None_value(self):
        user_entered_address = [None, None, None, None, None]
        metadata_address = [None, None, None, None, None]
        with self.assertRaises(Exception):
            format_address_list(user_entered_address, metadata_address)

    def test_format_address_list_no_values_in_answer(self):
        user_entered_address = ['', '', '', '', '']
        metadata_address = ['123', 'Testy', 'Place', 'Newport', 'NP5 7AR']
        self.assertEqual('123<br />Testy<br />Place<br />Newport<br />NP5 7AR',
                         format_address_list(user_entered_address, metadata_address))

    def test_format_address_list_no_metadata(self):
        user_entered_address = ['44', 'Testing', 'Gardens', 'Swansea', 'SA1 1AA']
        metadata_address = []
        self.assertEqual('44<br />Testing<br />Gardens<br />Swansea<br />SA1 1AA',
                         format_address_list(user_entered_address, metadata_address))

    def test_format_address_list(self):
        user_entered_address = ['44', 'Testing', 'Gardens', 'Swansea', 'SA1 1AA']
        metadata_address = ['123', 'Testy', 'Place', 'Newport', 'NP5 7AR']
        self.assertEqual('44<br />Testing<br />Gardens<br />Swansea<br />SA1 1AA',
                         format_address_list(user_entered_address, metadata_address))

    def test_format_address_list_concatenated_list_no_values(self):
        answer_address = ['', '', '']
        metadata_address = ['', '', '']

        with self.assertRaises(Exception) as error:
            format_address_list(answer_address, metadata_address)

        self.assertEqual('No valid address passed to format_address_list filter', error.exception.args[0])

[((888, 5, 888, 53), 'unittest.mock.patch', 'patch', ({(888, 11, 888, 52): '"""app.jinja_filters.format_unordered_list"""'}, {}), "('app.jinja_filters.format_unordered_list')", False, 'from unittest.mock import patch\n'), ((27, 34, 27, 55), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((30, 55, 30, 81), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((45, 55, 45, 81), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((53, 55, 53, 81), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((64, 55, 64, 81), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((83, 23, 83, 82), 'app.jinja_filters.format_multilined_string', 'format_multilined_string', ({(83, 48, 83, 71): 'self.autoescape_context', (83, 73, 83, 81): 'new_line'}, {}), '(self.autoescape_context, new_line)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((92, 23, 93, 57), 'app.jinja_filters.format_multilined_string', 'format_multilined_string', ({(92, 48, 92, 71): 'self.autoescape_context', (93, 48, 93, 56): 'new_line'}, {}), '(self.autoescape_context, new_line)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((102, 23, 102, 82), 'app.jinja_filters.format_multilined_string', 'format_multilined_string', ({(102, 48, 102, 71): 'self.autoescape_context', (102, 73, 102, 81): 'new_line'}, {}), '(self.autoescape_context, new_line)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((111, 23, 112, 57), 'app.jinja_filters.format_multilined_string', 'format_multilined_string', ({(111, 48, 111, 71): 'self.autoescape_context', (112, 48, 112, 56): 'new_line'}, {}), '(self.autoescape_context, new_line)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((121, 23, 121, 82), 'app.jinja_filters.format_multilined_string', 'format_multilined_string', ({(121, 48, 121, 71): 'self.autoescape_context', (121, 73, 121, 81): 'new_line'}, {}), '(self.autoescape_context, new_line)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((130, 23, 130, 64), 'app.jinja_filters.get_current_date', 'get_current_date', ({(130, 40, 130, 63): 'self.autoescape_context'}, {}), '(self.autoescape_context)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((174, 23, 174, 65), 'app.jinja_filters.format_date', 'format_date', ({(174, 35, 174, 58): 'self.autoescape_context', (174, 60, 174, 64): 'date'}, {}), '(self.autoescape_context, date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((184, 23, 184, 65), 'app.jinja_filters.format_date', 'format_date', ({(184, 35, 184, 58): 'self.autoescape_context', (184, 60, 184, 64): 'date'}, {}), '(self.autoescape_context, date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((313, 23, 313, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(313, 52, 313, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((322, 23, 322, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(322, 52, 322, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((331, 23, 331, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(331, 52, 331, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((340, 23, 340, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(340, 52, 340, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((349, 23, 349, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(349, 52, 349, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((358, 23, 358, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(358, 52, 358, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((367, 23, 367, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(367, 52, 367, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((376, 23, 376, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(376, 52, 376, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((385, 23, 385, 57), 'app.jinja_filters.format_household_member_name', 'format_household_member_name', ({(385, 52, 385, 56): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((394, 23, 394, 68), 'app.jinja_filters.format_household_member_name_possessive', 'format_household_member_name_possessive', ({(394, 63, 394, 67): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((403, 23, 403, 68), 'app.jinja_filters.format_household_member_name_possessive', 'format_household_member_name_possessive', ({(403, 63, 403, 67): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((412, 23, 412, 68), 'app.jinja_filters.format_household_member_name_possessive', 'format_household_member_name_possessive', ({(412, 63, 412, 67): 'name'}, {}), '(name)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((421, 23, 421, 52), 'app.jinja_filters.concatenated_list', 'concatenated_list', ({(421, 41, 421, 51): 'list_items'}, {}), '(list_items)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((430, 23, 430, 52), 'app.jinja_filters.concatenated_list', 'concatenated_list', ({(430, 41, 430, 51): 'list_items'}, {}), '(list_items)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((439, 23, 439, 52), 'app.jinja_filters.concatenated_list', 'concatenated_list', ({(439, 41, 439, 51): 'list_items'}, {}), '(list_items)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((454, 55, 454, 81), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((475, 55, 475, 78), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((482, 55, 482, 81), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((504, 55, 504, 78), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((535, 26, 535, 84), 'app.jinja_filters.format_unordered_list', 'format_unordered_list', ({(535, 48, 535, 71): 'self.autoescape_context', (535, 73, 535, 83): 'list_items'}, {}), '(self.autoescape_context, list_items)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((544, 26, 544, 84), 'app.jinja_filters.format_unordered_list', 'format_unordered_list', ({(544, 48, 544, 71): 'self.autoescape_context', (544, 73, 544, 83): 'list_items'}, {}), '(self.autoescape_context, list_items)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((551, 26, 551, 84), 'app.jinja_filters.format_unordered_list', 'format_unordered_list', ({(551, 48, 551, 71): 'self.autoescape_context', (551, 73, 551, 83): 'list_items'}, {}), '(self.autoescape_context, list_items)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((560, 21, 560, 41), 'app.jinja_filters.max_value', 'max_value', ({(560, 31, 560, 40): '*two_ints'}, {}), '(*two_ints)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((570, 21, 570, 40), 'app.jinja_filters.max_value', 'max_value', ({(570, 31, 570, 39): '*one_int'}, {}), '(*one_int)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((606, 21, 606, 37), 'app.jinja_filters.max_value', 'max_value', ({(606, 31, 606, 36): '*args'}, {}), '(*args)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((616, 21, 616, 40), 'app.jinja_filters.max_value', 'max_value', ({(616, 31, 616, 39): '*two_str'}, {}), '(*two_str)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((623, 14, 623, 31), 'datetime.datetime.utcnow', 'datetime.utcnow', ({}, {}), '()', False, 'from datetime import datetime, timedelta\n'), ((628, 21, 628, 42), 'app.jinja_filters.max_value', 'max_value', ({(628, 31, 628, 41): '*two_dates'}, {}), '(*two_dates)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((638, 21, 638, 41), 'app.jinja_filters.min_value', 'min_value', ({(638, 31, 638, 40): '*two_ints'}, {}), '(*two_ints)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((648, 21, 648, 40), 'app.jinja_filters.min_value', 'min_value', ({(648, 31, 648, 39): '*one_int'}, {}), '(*one_int)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((684, 21, 684, 37), 'app.jinja_filters.min_value', 'min_value', ({(684, 31, 684, 36): '*args'}, {}), '(*args)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((694, 21, 694, 40), 'app.jinja_filters.min_value', 'min_value', ({(694, 31, 694, 39): '*two_str'}, {}), '(*two_str)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((701, 14, 701, 31), 'datetime.datetime.utcnow', 'datetime.utcnow', ({}, {}), '()', False, 'from datetime import datetime, timedelta\n'), ((706, 21, 706, 42), 'app.jinja_filters.min_value', 'min_value', ({(706, 31, 706, 41): '*two_dates'}, {}), '(*two_dates)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((714, 18, 721, 9), 'types.SimpleNamespace', 'SimpleNamespace', (), '', False, 'from types import SimpleNamespace\n'), ((724, 16, 724, 56), 'app.jinja_filters.get_question_title', 'get_question_title', ({(724, 35, 724, 42): 'context', (724, 44, 724, 55): 'question_id'}, {}), '(context, question_id)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((732, 18, 743, 9), 'types.SimpleNamespace', 'SimpleNamespace', (), '', False, 'from types import SimpleNamespace\n'), ((746, 16, 746, 56), 'app.jinja_filters.get_question_title', 'get_question_title', ({(746, 35, 746, 42): 'context', (746, 44, 746, 55): 'question_id'}, {}), '(context, question_id)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((755, 18, 765, 9), 'types.SimpleNamespace', 'SimpleNamespace', (), '', False, 'from types import SimpleNamespace\n'), ((768, 23, 768, 72), 'app.jinja_filters.get_answer_label', 'get_answer_label', ({(768, 40, 768, 47): 'context', (768, 49, 768, 58): 'answer_id', (768, 60, 768, 71): 'question_id'}, {}), '(context, answer_id, question_id)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((777, 18, 787, 9), 'types.SimpleNamespace', 'SimpleNamespace', (), '', False, 'from types import SimpleNamespace\n'), ((790, 23, 790, 72), 'app.jinja_filters.get_answer_label', 'get_answer_label', ({(790, 40, 790, 47): 'context', (790, 49, 790, 58): 'answer_id', (790, 60, 790, 71): 'question_id'}, {}), '(context, answer_id, question_id)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((799, 18, 813, 9), 'types.SimpleNamespace', 'SimpleNamespace', (), '', False, 'from types import SimpleNamespace\n'), ((816, 23, 816, 72), 'app.jinja_filters.get_answer_label', 'get_answer_label', ({(816, 40, 816, 47): 'context', (816, 49, 816, 58): 'answer_id', (816, 60, 816, 71): 'question_id'}, {}), '(context, answer_id, question_id)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((912, 34, 912, 55), 'mock.Mock', 'Mock', (), '', False, 'from mock import Mock\n'), ((913, 17, 913, 138), 'app.jinja_filters.format_repeating_summary', 'format_repeating_summary', (), '', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((32, 25, 32, 60), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(32, 51, 32, 56): '"""100"""', (32, 58, 32, 59): '(2)'}, {}), "('100', 2)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((33, 25, 33, 62), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(33, 51, 33, 58): '"""100.0"""', (33, 60, 33, 61): '(2)'}, {}), "('100.0', 2)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((34, 25, 34, 63), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(34, 51, 34, 59): '"""100.00"""', (34, 61, 34, 62): '(2)'}, {}), "('100.00', 2)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((35, 25, 35, 58), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(35, 51, 35, 57): '"""1000"""'}, {}), "('1000')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((36, 25, 36, 59), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(36, 51, 36, 58): '"""10000"""'}, {}), "('10000')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((37, 25, 37, 63), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(37, 51, 37, 62): '"""100000000"""'}, {}), "('100000000')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((38, 25, 38, 66), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(38, 51, 38, 62): '"""100000000"""', (38, 64, 38, 65): '(2)'}, {}), "('100000000', 2)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((39, 25, 39, 56), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(39, 51, 39, 52): '(0)', (39, 54, 39, 55): '(2)'}, {}), '(0, 2)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((40, 25, 40, 53), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(40, 51, 40, 52): '(0)'}, {}), '(0)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((41, 25, 41, 54), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(41, 51, 41, 53): '""""""'}, {}), "('')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((42, 25, 42, 56), 'app.jinja_filters.format_currency_for_input', 'format_currency_for_input', ({(42, 51, 42, 55): 'None'}, {}), '(None)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((47, 25, 47, 51), 'app.jinja_filters.get_currency_symbol', 'get_currency_symbol', ({(47, 45, 47, 50): '"""GBP"""'}, {}), "('GBP')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((48, 25, 48, 51), 'app.jinja_filters.get_currency_symbol', 'get_currency_symbol', ({(48, 45, 48, 50): '"""EUR"""'}, {}), "('EUR')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((49, 25, 49, 51), 'app.jinja_filters.get_currency_symbol', 'get_currency_symbol', ({(49, 45, 49, 50): '"""USD"""'}, {}), "('USD')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((50, 25, 50, 51), 'app.jinja_filters.get_currency_symbol', 'get_currency_symbol', ({(50, 45, 50, 50): '"""JPY"""'}, {}), "('JPY')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((51, 25, 51, 48), 'app.jinja_filters.get_currency_symbol', 'get_currency_symbol', ({(51, 45, 51, 47): '""""""'}, {}), "('')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((55, 25, 55, 78), 'app.jinja_filters.format_currency', 'format_currency', ({(55, 41, 55, 64): 'self.autoescape_context', (55, 66, 55, 70): '"""11"""', (55, 72, 55, 77): '"""GBP"""'}, {}), "(self.autoescape_context, '11', 'GBP')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((56, 25, 56, 81), 'app.jinja_filters.format_currency', 'format_currency', ({(56, 41, 56, 64): 'self.autoescape_context', (56, 66, 56, 73): '"""11.99"""', (56, 75, 56, 80): '"""GBP"""'}, {}), "(self.autoescape_context, '11.99', 'GBP')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((57, 25, 57, 81), 'app.jinja_filters.format_currency', 'format_currency', ({(57, 41, 57, 64): 'self.autoescape_context', (57, 66, 57, 73): '"""11000"""', (57, 75, 57, 80): '"""USD"""'}, {}), "(self.autoescape_context, '11000', 'USD')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((58, 25, 58, 68), 'app.jinja_filters.format_currency', 'format_currency', ({(58, 41, 58, 64): 'self.autoescape_context', (58, 66, 58, 67): '(0)'}, {}), '(self.autoescape_context, 0)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((59, 25, 59, 71), 'app.jinja_filters.format_currency', 'format_currency', ({(59, 41, 59, 64): 'self.autoescape_context', (59, 66, 59, 70): '(0.0)'}, {}), '(self.autoescape_context, 0.0)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((60, 25, 60, 71), 'app.jinja_filters.format_currency', 'format_currency', ({(60, 41, 60, 64): 'self.autoescape_context', (60, 66, 60, 68): '""""""'}, {}), "(self.autoescape_context, '')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((61, 25, 61, 71), 'app.jinja_filters.format_currency', 'format_currency', ({(61, 41, 61, 64): 'self.autoescape_context', (61, 66, 61, 70): 'None'}, {}), '(self.autoescape_context, None)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((66, 25, 66, 43), 'app.jinja_filters.format_number', 'format_number', ({(66, 39, 66, 42): '(123)'}, {}), '(123)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((67, 25, 67, 47), 'app.jinja_filters.format_number', 'format_number', ({(67, 39, 67, 46): '"""123.4"""'}, {}), "('123.4')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((68, 25, 68, 48), 'app.jinja_filters.format_number', 'format_number', ({(68, 39, 68, 47): '"""123.40"""'}, {}), "('123.40')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((69, 25, 69, 46), 'app.jinja_filters.format_number', 'format_number', ({(69, 39, 69, 45): '"""1000"""'}, {}), "('1000')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((70, 25, 70, 47), 'app.jinja_filters.format_number', 'format_number', ({(70, 39, 70, 46): '"""10000"""'}, {}), "('10000')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((71, 25, 71, 51), 'app.jinja_filters.format_number', 'format_number', ({(71, 39, 71, 50): '"""100000000"""'}, {}), "('100000000')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((72, 25, 72, 41), 'app.jinja_filters.format_number', 'format_number', ({(72, 39, 72, 40): '(0)'}, {}), '(0)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((73, 25, 73, 44), 'app.jinja_filters.format_number', 'format_number', ({(73, 39, 73, 43): '(0.0)'}, {}), '(0.0)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((74, 25, 74, 42), 'app.jinja_filters.format_number', 'format_number', ({(74, 39, 74, 41): '""""""'}, {}), "('')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((75, 25, 75, 44), 'app.jinja_filters.format_number', 'format_number', ({(75, 39, 75, 43): 'None'}, {}), '(None)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((142, 27, 142, 69), 'app.jinja_filters.format_date', 'format_date', ({(142, 39, 142, 62): 'self.autoescape_context', (142, 64, 142, 68): 'date'}, {}), '(self.autoescape_context, date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((153, 27, 153, 69), 'app.jinja_filters.format_date', 'format_date', ({(153, 39, 153, 62): 'self.autoescape_context', (153, 64, 153, 68): 'date'}, {}), '(self.autoescape_context, date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((160, 16, 160, 33), 'jinja2.Markup', 'Markup', ({(160, 23, 160, 32): '"""2017-01"""'}, {}), "('2017-01')", False, 'from jinja2 import Undefined, Markup\n'), ((164, 27, 164, 69), 'app.jinja_filters.format_date', 'format_date', ({(164, 39, 164, 62): 'self.autoescape_context', (164, 64, 164, 68): 'date'}, {}), '(self.autoescape_context, date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((195, 27, 195, 78), 'app.jinja_filters.format_datetime', 'format_datetime', ({(195, 43, 195, 66): 'self.autoescape_context', (195, 68, 195, 77): 'date_time'}, {}), '(self.autoescape_context, date_time)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((206, 27, 206, 78), 'app.jinja_filters.format_datetime', 'format_datetime', ({(206, 43, 206, 66): 'self.autoescape_context', (206, 68, 206, 77): 'date_time'}, {}), '(self.autoescape_context, date_time)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((231, 12, 231, 72), 'app.jinja_filters.format_conditional_date', 'format_conditional_date', ({(231, 36, 231, 59): 'self.autoescape_context', (231, 61, 231, 65): 'None', (231, 67, 231, 71): 'None'}, {}), '(self.autoescape_context, None, None)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((255, 13, 255, 68), 'unittest.mock.patch', 'patch', (), '', False, 'from unittest.mock import patch\n'), ((280, 12, 280, 58), 'app.jinja_filters.calculate_years_difference', 'calculate_years_difference', ({(280, 39, 280, 43): 'None', (280, 45, 280, 57): '"""2017-01-17"""'}, {}), "(None, '2017-01-17')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((292, 27, 292, 91), 'app.jinja_filters.format_date_range', 'format_date_range', ({(292, 45, 292, 68): 'self.autoescape_context', (292, 70, 292, 80): 'start_date', (292, 82, 292, 90): 'end_date'}, {}), '(self.autoescape_context, start_date, end_date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((303, 27, 303, 81), 'app.jinja_filters.format_date_range', 'format_date_range', ({(303, 45, 303, 68): 'self.autoescape_context', (303, 70, 303, 80): 'start_date'}, {}), '(self.autoescape_context, start_date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((400, 16, 400, 27), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((400, 29, 400, 40), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((444, 25, 444, 49), 'app.jinja_filters.format_percentage', 'format_percentage', ({(444, 43, 444, 48): '"""100"""'}, {}), "('100')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((445, 25, 445, 47), 'app.jinja_filters.format_percentage', 'format_percentage', ({(445, 43, 445, 46): '(100)'}, {}), '(100)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((446, 25, 446, 47), 'app.jinja_filters.format_percentage', 'format_percentage', ({(446, 43, 446, 46): '(4.5)'}, {}), '(4.5)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((449, 25, 449, 62), 'app.jinja_filters.format_number_to_alphabetic_letter', 'format_number_to_alphabetic_letter', ({(449, 60, 449, 61): '(0)'}, {}), '(0)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((450, 25, 450, 62), 'app.jinja_filters.format_number_to_alphabetic_letter', 'format_number_to_alphabetic_letter', ({(450, 60, 450, 61): '(4)'}, {}), '(4)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((451, 25, 451, 63), 'app.jinja_filters.format_number_to_alphabetic_letter', 'format_number_to_alphabetic_letter', ({(451, 60, 451, 62): '(25)'}, {}), '(25)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((452, 25, 452, 63), 'app.jinja_filters.format_number_to_alphabetic_letter', 'format_number_to_alphabetic_letter', ({(452, 60, 452, 62): '(-1)'}, {}), '(-1)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((456, 25, 456, 57), 'app.jinja_filters.format_unit', 'format_unit', ({(456, 37, 456, 51): '"""length-meter"""', (456, 53, 456, 56): '(100)'}, {}), "('length-meter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((457, 25, 457, 62), 'app.jinja_filters.format_unit', 'format_unit', ({(457, 37, 457, 56): '"""length-centimeter"""', (457, 58, 457, 61): '(100)'}, {}), "('length-centimeter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((458, 25, 458, 56), 'app.jinja_filters.format_unit', 'format_unit', ({(458, 37, 458, 50): '"""length-mile"""', (458, 52, 458, 55): '(100)'}, {}), "('length-mile', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((459, 25, 459, 61), 'app.jinja_filters.format_unit', 'format_unit', ({(459, 37, 459, 55): '"""length-kilometer"""', (459, 57, 459, 60): '(100)'}, {}), "('length-kilometer', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((460, 25, 460, 62), 'app.jinja_filters.format_unit', 'format_unit', ({(460, 37, 460, 56): '"""area-square-meter"""', (460, 58, 460, 61): '(100)'}, {}), "('area-square-meter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((461, 25, 461, 67), 'app.jinja_filters.format_unit', 'format_unit', ({(461, 37, 461, 61): '"""area-square-centimeter"""', (461, 63, 461, 66): '(100)'}, {}), "('area-square-centimeter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((462, 25, 462, 66), 'app.jinja_filters.format_unit', 'format_unit', ({(462, 37, 462, 60): '"""area-square-kilometer"""', (462, 62, 462, 65): '(100)'}, {}), "('area-square-kilometer', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((463, 25, 463, 61), 'app.jinja_filters.format_unit', 'format_unit', ({(463, 37, 463, 55): '"""area-square-mile"""', (463, 57, 463, 60): '(100)'}, {}), "('area-square-mile', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((464, 25, 464, 57), 'app.jinja_filters.format_unit', 'format_unit', ({(464, 37, 464, 51): '"""area-hectare"""', (464, 53, 464, 56): '(100)'}, {}), "('area-hectare', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((465, 25, 465, 54), 'app.jinja_filters.format_unit', 'format_unit', ({(465, 37, 465, 48): '"""area-acre"""', (465, 50, 465, 53): '(100)'}, {}), "('area-acre', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((466, 25, 466, 63), 'app.jinja_filters.format_unit', 'format_unit', ({(466, 37, 466, 57): '"""volume-cubic-meter"""', (466, 59, 466, 62): '(100)'}, {}), "('volume-cubic-meter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((467, 25, 467, 68), 'app.jinja_filters.format_unit', 'format_unit', ({(467, 37, 467, 62): '"""volume-cubic-centimeter"""', (467, 64, 467, 67): '(100)'}, {}), "('volume-cubic-centimeter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((468, 25, 468, 57), 'app.jinja_filters.format_unit', 'format_unit', ({(468, 37, 468, 51): '"""volume-liter"""', (468, 53, 468, 56): '(100)'}, {}), "('volume-liter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((469, 25, 469, 62), 'app.jinja_filters.format_unit', 'format_unit', ({(469, 37, 469, 56): '"""volume-hectoliter"""', (469, 58, 469, 61): '(100)'}, {}), "('volume-hectoliter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((470, 25, 470, 61), 'app.jinja_filters.format_unit', 'format_unit', ({(470, 37, 470, 55): '"""volume-megaliter"""', (470, 57, 470, 60): '(100)'}, {}), "('volume-megaliter', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((471, 25, 471, 58), 'app.jinja_filters.format_unit', 'format_unit', ({(471, 37, 471, 52): '"""duration-hour"""', (471, 54, 471, 57): '(100)'}, {}), "('duration-hour', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((472, 25, 472, 66), 'app.jinja_filters.format_unit', 'format_unit', ({(472, 37, 472, 52): '"""duration-hour"""', (472, 54, 472, 57): '(100)', (472, 59, 472, 65): '"""long"""'}, {}), "('duration-hour', 100, 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((473, 25, 473, 66), 'app.jinja_filters.format_unit', 'format_unit', ({(473, 37, 473, 52): '"""duration-year"""', (473, 54, 473, 57): '(100)', (473, 59, 473, 65): '"""long"""'}, {}), "('duration-year', 100, 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((477, 25, 477, 58), 'app.jinja_filters.format_unit', 'format_unit', ({(477, 37, 477, 52): '"""duration-hour"""', (477, 54, 477, 57): '(100)'}, {}), "('duration-hour', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((478, 25, 478, 58), 'app.jinja_filters.format_unit', 'format_unit', ({(478, 37, 478, 52): '"""duration-year"""', (478, 54, 478, 57): '(100)'}, {}), "('duration-year', 100)", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((479, 25, 479, 66), 'app.jinja_filters.format_unit', 'format_unit', ({(479, 37, 479, 52): '"""duration-hour"""', (479, 54, 479, 57): '(100)', (479, 59, 479, 65): '"""long"""'}, {}), "('duration-hour', 100, 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((480, 25, 480, 66), 'app.jinja_filters.format_unit', 'format_unit', ({(480, 37, 480, 52): '"""duration-year"""', (480, 54, 480, 57): '(100)', (480, 59, 480, 65): '"""long"""'}, {}), "('duration-year', 100, 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((484, 25, 484, 64), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(484, 49, 484, 63): '"""length-meter"""'}, {}), "('length-meter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((485, 25, 485, 69), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(485, 49, 485, 68): '"""length-centimeter"""'}, {}), "('length-centimeter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((486, 25, 486, 63), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(486, 49, 486, 62): '"""length-mile"""'}, {}), "('length-mile')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((487, 25, 487, 68), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(487, 49, 487, 67): '"""length-kilometer"""'}, {}), "('length-kilometer')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((488, 25, 488, 69), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(488, 49, 488, 68): '"""area-square-meter"""'}, {}), "('area-square-meter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((489, 25, 489, 74), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(489, 49, 489, 73): '"""area-square-centimeter"""'}, {}), "('area-square-centimeter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((490, 25, 490, 73), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(490, 49, 490, 72): '"""area-square-kilometer"""'}, {}), "('area-square-kilometer')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((491, 25, 491, 68), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(491, 49, 491, 67): '"""area-square-mile"""'}, {}), "('area-square-mile')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((492, 25, 492, 64), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(492, 49, 492, 63): '"""area-hectare"""'}, {}), "('area-hectare')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((493, 25, 493, 61), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(493, 49, 493, 60): '"""area-acre"""'}, {}), "('area-acre')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((494, 25, 494, 70), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(494, 49, 494, 69): '"""volume-cubic-meter"""'}, {}), "('volume-cubic-meter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((495, 25, 495, 75), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(495, 49, 495, 74): '"""volume-cubic-centimeter"""'}, {}), "('volume-cubic-centimeter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((496, 25, 496, 64), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(496, 49, 496, 63): '"""volume-liter"""'}, {}), "('volume-liter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((497, 25, 497, 69), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(497, 49, 497, 68): '"""volume-hectoliter"""'}, {}), "('volume-hectoliter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((498, 25, 498, 68), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(498, 49, 498, 67): '"""volume-megaliter"""'}, {}), "('volume-megaliter')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((499, 25, 499, 65), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(499, 49, 499, 64): '"""duration-hour"""'}, {}), "('duration-hour')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((500, 25, 500, 73), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(500, 49, 500, 64): '"""duration-hour"""', (500, 66, 500, 72): '"""long"""'}, {}), "('duration-hour', 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((501, 25, 501, 65), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(501, 49, 501, 64): '"""duration-year"""'}, {}), "('duration-year')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((502, 25, 502, 73), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(502, 49, 502, 64): '"""duration-year"""', (502, 66, 502, 72): '"""long"""'}, {}), "('duration-year', 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((506, 25, 506, 65), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(506, 49, 506, 64): '"""duration-hour"""'}, {}), "('duration-hour')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((507, 25, 507, 73), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(507, 49, 507, 64): '"""duration-hour"""', (507, 66, 507, 72): '"""long"""'}, {}), "('duration-hour', 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((508, 25, 508, 65), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(508, 49, 508, 64): '"""duration-year"""'}, {}), "('duration-year')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((509, 25, 509, 73), 'app.jinja_filters.format_unit_input_label', 'format_unit_input_label', ({(509, 49, 509, 64): '"""duration-year"""', (509, 66, 509, 72): '"""long"""'}, {}), "('duration-year', 'long')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((577, 23, 577, 34), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((581, 12, 581, 28), 'app.jinja_filters.max_value', 'max_value', ({(581, 22, 581, 27): '*args'}, {}), '(*args)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((594, 12, 594, 28), 'app.jinja_filters.max_value', 'max_value', ({(594, 22, 594, 27): '*args'}, {}), '(*args)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((624, 21, 624, 42), 'datetime.timedelta', 'timedelta', (), '', False, 'from datetime import datetime, timedelta\n'), ((655, 23, 655, 34), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((659, 12, 659, 28), 'app.jinja_filters.min_value', 'min_value', ({(659, 22, 659, 27): '*args'}, {}), '(*args)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((672, 12, 672, 28), 'app.jinja_filters.min_value', 'min_value', ({(672, 22, 672, 27): '*args'}, {}), '(*args)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((702, 21, 702, 42), 'datetime.timedelta', 'timedelta', (), '', False, 'from datetime import datetime, timedelta\n'), ((841, 12, 841, 84), 'app.jinja_filters.calculate_offset_from_weekday_in_last_whole_week', 'calculate_offset_from_weekday_in_last_whole_week', ({(841, 61, 841, 73): '"""2018-08-10"""', (841, 75, 841, 77): '{}', (841, 79, 841, 83): '"""BA"""'}, {}), "('2018-08-10', {}, 'BA')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((844, 13, 844, 48), 'unittest.mock.patch', 'patch', ({(844, 19, 844, 47): '"""app.jinja_filters.datetime"""'}, {}), "('app.jinja_filters.datetime')", False, 'from unittest.mock import patch\n'), ((846, 48, 846, 69), 'datetime.datetime', 'datetime', ({(846, 57, 846, 61): '2018', (846, 63, 846, 64): '8', (846, 66, 846, 68): '10'}, {}), '(2018, 8, 10)', False, 'from datetime import datetime, timedelta\n'), ((849, 21, 849, 85), 'app.jinja_filters.calculate_offset_from_weekday_in_last_whole_week', 'calculate_offset_from_weekday_in_last_whole_week', ({(849, 70, 849, 74): 'None', (849, 76, 849, 78): '{}', (849, 80, 849, 84): '"""SU"""'}, {}), "(None, {}, 'SU')", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((903, 12, 903, 51), 'app.jinja_filters.format_repeating_summary', 'format_repeating_summary', ({(903, 37, 903, 41): 'None', (903, 43, 903, 50): 'case[0]'}, {}), '(None, case[0])', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((909, 29, 909, 63), 'app.jinja_filters.format_repeating_summary', 'format_repeating_summary', ({(909, 54, 909, 58): 'None', (909, 60, 909, 62): '[]'}, {}), '(None, [])', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((917, 32, 917, 43), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((917, 45, 917, 56), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((917, 58, 917, 69), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((917, 71, 917, 82), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((917, 84, 917, 95), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((920, 25, 920, 84), 'app.jinja_filters.format_address_list', 'format_address_list', ({(920, 45, 920, 65): 'user_entered_address', (920, 67, 920, 83): 'metadata_address'}, {}), '(user_entered_address, metadata_address)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((926, 25, 926, 84), 'app.jinja_filters.format_address_list', 'format_address_list', ({(926, 45, 926, 65): 'user_entered_address', (926, 67, 926, 83): 'metadata_address'}, {}), '(user_entered_address, metadata_address)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((932, 12, 932, 71), 'app.jinja_filters.format_address_list', 'format_address_list', ({(932, 32, 932, 52): 'user_entered_address', (932, 54, 932, 70): 'metadata_address'}, {}), '(user_entered_address, metadata_address)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((938, 25, 938, 84), 'app.jinja_filters.format_address_list', 'format_address_list', ({(938, 45, 938, 65): 'user_entered_address', (938, 67, 938, 83): 'metadata_address'}, {}), '(user_entered_address, metadata_address)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((944, 25, 944, 84), 'app.jinja_filters.format_address_list', 'format_address_list', ({(944, 45, 944, 65): 'user_entered_address', (944, 67, 944, 83): 'metadata_address'}, {}), '(user_entered_address, metadata_address)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((950, 25, 950, 84), 'app.jinja_filters.format_address_list', 'format_address_list', ({(950, 45, 950, 65): 'user_entered_address', (950, 67, 950, 83): 'metadata_address'}, {}), '(user_entered_address, metadata_address)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((957, 12, 957, 65), 'app.jinja_filters.format_address_list', 'format_address_list', ({(957, 32, 957, 46): 'answer_address', (957, 48, 957, 64): 'metadata_address'}, {}), '(answer_address, metadata_address)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((43, 51, 43, 62), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((62, 66, 62, 77), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((76, 39, 76, 50), 'jinja2.Undefined', 'Undefined', ({}, {}), '()', False, 'from jinja2 import Undefined, Markup\n'), ((222, 16, 222, 78), 'app.jinja_filters.format_conditional_date', 'format_conditional_date', ({(222, 40, 222, 63): 'self.autoescape_context', (222, 65, 222, 70): 'date1', (222, 72, 222, 77): 'date2'}, {}), '(self.autoescape_context, date1, date2)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((249, 31, 249, 93), 'app.jinja_filters.format_conditional_date', 'format_conditional_date', ({(249, 55, 249, 78): 'self.autoescape_context', (249, 80, 249, 85): 'date1', (249, 87, 249, 92): 'date2'}, {}), '(self.autoescape_context, date1, date2)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((270, 35, 270, 83), 'app.jinja_filters.calculate_years_difference', 'calculate_years_difference', ({(270, 62, 270, 72): 'start_date', (270, 74, 270, 82): 'end_date'}, {}), '(start_date, end_date)', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((514, 29, 514, 71), 'app.jinja_filters.format_duration', 'format_duration', ({(514, 45, 514, 70): "{'years': 5, 'months': 4}"}, {}), "({'years': 5, 'months': 4})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((515, 29, 515, 71), 'app.jinja_filters.format_duration', 'format_duration', ({(515, 45, 515, 70): "{'years': 5, 'months': 0}"}, {}), "({'years': 5, 'months': 0})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((516, 29, 516, 71), 'app.jinja_filters.format_duration', 'format_duration', ({(516, 45, 516, 70): "{'years': 0, 'months': 4}"}, {}), "({'years': 0, 'months': 4})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((517, 29, 517, 71), 'app.jinja_filters.format_duration', 'format_duration', ({(517, 45, 517, 70): "{'years': 1, 'months': 1}"}, {}), "({'years': 1, 'months': 1})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((518, 29, 518, 71), 'app.jinja_filters.format_duration', 'format_duration', ({(518, 45, 518, 70): "{'years': 0, 'months': 0}"}, {}), "({'years': 0, 'months': 0})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((522, 29, 522, 58), 'app.jinja_filters.format_duration', 'format_duration', ({(522, 45, 522, 57): "{'years': 5}"}, {}), "({'years': 5})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((523, 29, 523, 58), 'app.jinja_filters.format_duration', 'format_duration', ({(523, 45, 523, 57): "{'years': 1}"}, {}), "({'years': 1})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((524, 29, 524, 58), 'app.jinja_filters.format_duration', 'format_duration', ({(524, 45, 524, 57): "{'years': 0}"}, {}), "({'years': 0})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((528, 29, 528, 59), 'app.jinja_filters.format_duration', 'format_duration', ({(528, 45, 528, 58): "{'months': 5}"}, {}), "({'months': 5})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((529, 29, 529, 59), 'app.jinja_filters.format_duration', 'format_duration', ({(529, 45, 529, 58): "{'months': 1}"}, {}), "({'months': 1})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((530, 29, 530, 59), 'app.jinja_filters.format_duration', 'format_duration', ({(530, 45, 530, 58): "{'months': 0}"}, {}), "({'months': 0})", False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((837, 29, 837, 89), 'app.jinja_filters.calculate_offset_from_weekday_in_last_whole_week', 'calculate_offset_from_weekday_in_last_whole_week', ({(837, 78, 837, 88): '*case[0:3]'}, {}), '(*case[0:3])', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((847, 69, 847, 99), 'datetime.datetime.strftime', 'datetime.strftime', ({(847, 87, 847, 92): '*args'}, {}), '(*args, **kw)', False, 'from datetime import datetime, timedelta\n'), ((131, 36, 131, 53), 'datetime.datetime.utcnow', 'datetime.utcnow', ({}, {}), '()', False, 'from datetime import datetime, timedelta\n'), ((864, 20, 864, 75), 'app.jinja_filters.format_date_custom', 'format_date_custom', ({(864, 39, 864, 62): 'self.autoescape_context', (864, 64, 864, 74): '*case[0:2]'}, {}), '(self.autoescape_context, *case[0:2])', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((884, 20, 884, 97), 'app.jinja_filters.format_date_range_no_repeated_month_year', 'format_date_range_no_repeated_month_year', ({(884, 61, 884, 84): 'self.autoescape_context', (884, 86, 884, 96): '*case[0:3]'}, {}), '(self.autoescape_context, *case[0:3])', False, 'from app.jinja_filters import format_date, format_conditional_date, format_currency, get_currency_symbol, format_multilined_string, format_percentage, format_date_range, format_household_member_name, format_datetime, format_number_to_alphabetic_letter, format_unit, format_currency_for_input, format_number, format_unordered_list, format_unit_input_label, format_household_member_name_possessive, concatenated_list, calculate_years_difference, get_current_date, as_london_tz, max_value, min_value, get_question_title, get_answer_label, format_duration, calculate_offset_from_weekday_in_last_whole_week, format_date_custom, format_date_range_no_repeated_month_year, format_repeating_summary, format_address_list\n'), ((257, 29, 257, 45), 'datetime.datetime.today', 'datetime.today', ({}, {}), '()', False, 'from datetime import datetime, timedelta\n'), ((257, 46, 257, 70), 'dateutil.relativedelta.relativedelta', 'relativedelta', (), '', False, 'from dateutil.relativedelta import relativedelta\n'), ((905, 54, 905, 63), 'jinja2.Markup', 'Markup', ({(905, 61, 905, 62): 'x'}, {}), '(x)', False, 'from jinja2 import Undefined, Markup\n')]