This file is indexed.

/usr/lib/python3/dist-packages/ufl/exprcontainers.py is in python3-ufl 2016.2.0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# -*- coding: utf-8 -*-
"""This module defines special types for representing mapping of expressions to expressions."""

# Copyright (C) 2014 Martin Sandve Alnæs
#
# This file is part of UFL.
#
# UFL is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# UFL is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with UFL. If not, see <http://www.gnu.org/licenses/>.

from ufl.utils.py23 import as_native_str
from ufl.log import error
from ufl.core.expr import Expr
from ufl.core.operator import Operator
from ufl.core.ufl_type import ufl_type


# --- Non-tensor types ---

@ufl_type(num_ops="varying")
class ExprList(Operator):
    "List of Expr objects. For internal use, never to be created by end users."
    __slots__ = ()

    def __init__(self, *operands):
        Operator.__init__(self, operands)
        if not all(isinstance(i, Expr) for i in operands):
            error("Expecting Expr in ExprList.")

    def __getitem__(self, i):
        return self.ufl_operands[i]

    def __len__(self):
        return len(self.ufl_operands)

    def __iter__(self):
        return iter(self.ufl_operands)

    def __str__(self):
        return "ExprList(*(%s,))" % ", ".join(str(i) for i in self.ufl_operands)

    def __repr__(self):
        r = "ExprList(*%s)" % repr(self.ufl_operands)
        return as_native_str(r)

    @property
    def ufl_shape(self):
        error("A non-tensor type has no ufl_shape.")

    @property
    def ufl_free_indices(self):
        error("A non-tensor type has no ufl_free_indices.")

    def free_indices(self):
        error("A non-tensor type has no free_indices.")

    @property
    def ufl_index_dimensions(self):
        error("A non-tensor type has no ufl_index_dimensions.")

    def index_dimensions(self):
        error("A non-tensor type has no index_dimensions.")


@ufl_type(num_ops="varying")
class ExprMapping(Operator):
    "Mapping of Expr objects. For internal use, never to be created by end users."
    __slots__ = ()

    def __init__(self, *operands):
        Operator.__init__(self, operands)
        if not all(isinstance(e, Expr) for e in operands):
            error("Expecting Expr in ExprMapping.")

    def ufl_domains(self):
        # Because this type can act like a terminal if it has no
        # operands, we need to override some recursive operations
        if self.ufl_operands:
            return Operator.ufl_domains()
        else:
            return []

    # def __getitem__(self, key):
    #     return self.ufl_operands[key]

    # def __len__(self):
    #     return len(self.ufl_operands) // 2

    # def __iter__(self):
    #     return iter(self.ufl_operands[::2])

    def __str__(self):
        return "ExprMapping(*%s)" % repr(self.ufl_operands)

    def __repr__(self):
        r = "ExprMapping(*%s)" % repr(self.ufl_operands)
        return as_native_str(r)

    @property
    def ufl_shape(self):
        error("A non-tensor type has no ufl_shape.")

    @property
    def ufl_free_indices(self):
        error("A non-tensor type has no ufl_free_indices.")

    def free_indices(self):
        error("A non-tensor type has no free_indices.")

    @property
    def ufl_index_dimensions(self):
        error("A non-tensor type has no ufl_index_dimensions.")

    def index_dimensions(self):
        error("A non-tensor type has no index_dimensions.")