def __init__(self, operators, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None, is_square=None, name=None):
    'Initialize a `LinearOperatorKronecker`.\n\n    `LinearOperatorKronecker` is initialized with a list of operators\n    `[op_1,...,op_J]`.\n\n    Args:\n      operators:  Iterable of `LinearOperator` objects, each with\n        the same `dtype` and composable shape, representing the Kronecker\n        factors.\n      is_non_singular:  Expect that this operator is non-singular.\n      is_self_adjoint:  Expect that this operator is equal to its hermitian\n        transpose.\n      is_positive_definite:  Expect that this operator is positive definite,\n        meaning the quadratic form `x^H A x` has positive real part for all\n        nonzero `x`.  Note that we do not require the operator to be\n        self-adjoint to be positive-definite.  See:\n        https://en.wikipedia.org/wiki/Positive-definite_matrix\\\n            #Extension_for_non_symmetric_matrices\n      is_square:  Expect that this operator acts like square [batch] matrices.\n      name: A name for this `LinearOperator`.  Default is the individual\n        operators names joined with `_x_`.\n\n    Raises:\n      TypeError:  If all operators do not have the same `dtype`.\n      ValueError:  If `operators` is empty.\n    '
    check_ops.assert_proper_iterable(operators)
    operators = list(operators)
    if (not operators):
        raise ValueError(('Expected a list of >=1 operators. Found: %s' % operators))
    self._operators = operators
    dtype = operators[0].dtype
    for operator in operators:
        if (operator.dtype != dtype):
            name_type = (str((o.name, o.dtype)) for o in operators)
            raise TypeError(('Expected all operators to have the same dtype.  Found %s' % '   '.join(name_type)))
    if all((operator.is_non_singular for operator in operators)):
        if (is_non_singular is False):
            raise ValueError('The Kronecker product of non-singular operators is always non-singular.')
        is_non_singular = True
    if all((operator.is_self_adjoint for operator in operators)):
        if (is_self_adjoint is False):
            raise ValueError('The Kronecker product of self-adjoint operators is always self-adjoint.')
        is_self_adjoint = True
    if all((operator.is_positive_definite for operator in operators)):
        if (is_positive_definite is False):
            raise ValueError('The Kronecker product of positive-definite operators is always positive-definite.')
        is_positive_definite = True
    graph_parents = []
    for operator in operators:
        graph_parents.extend(operator.graph_parents)
    if (name is None):
        name = operators[0].name
        for operator in operators[1:]:
            name += ('_x_' + operator.name)
    with ops.name_scope(name, values=graph_parents):
        super(LinearOperatorKronecker, self).__init__(dtype=dtype, graph_parents=graph_parents, is_non_singular=is_non_singular, is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, name=name)
Initialize a `LinearOperatorKronecker`.

`LinearOperatorKronecker` is initialized with a list of operators
`[op_1,...,op_J]`.

Args:
  operators:  Iterable of `LinearOperator` objects, each with
    the same `dtype` and composable shape, representing the Kronecker
    factors.
  is_non_singular:  Expect that this operator is non-singular.
  is_self_adjoint:  Expect that this operator is equal to its hermitian
    transpose.
  is_positive_definite:  Expect that this operator is positive definite,
    meaning the quadratic form `x^H A x` has positive real part for all
    nonzero `x`.  Note that we do not require the operator to be
    self-adjoint to be positive-definite.  See:
    https://en.wikipedia.org/wiki/Positive-definite_matrix\
        #Extension_for_non_symmetric_matrices
  is_square:  Expect that this operator acts like square [batch] matrices.
  name: A name for this `LinearOperator`.  Default is the individual
    operators names joined with `_x_`.

Raises:
  TypeError:  If all operators do not have the same `dtype`.
  ValueError:  If `operators` is empty.
def __init__(self, operators, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None, is_square=None, name=None):
    'Initialize a `LinearOperatorKronecker`.\n\n    `LinearOperatorKronecker` is initialized with a list of operators\n    `[op_1,...,op_J]`.\n\n    Args:\n      operators:  Iterable of `LinearOperator` objects, each with\n        the same `dtype` and composable shape, representing the Kronecker\n        factors.\n      is_non_singular:  Expect that this operator is non-singular.\n      is_self_adjoint:  Expect that this operator is equal to its hermitian\n        transpose.\n      is_positive_definite:  Expect that this operator is positive definite,\n        meaning the quadratic form `x^H A x` has positive real part for all\n        nonzero `x`.  Note that we do not require the operator to be\n        self-adjoint to be positive-definite.  See:\n        https://en.wikipedia.org/wiki/Positive-definite_matrix\\\n            #Extension_for_non_symmetric_matrices\n      is_square:  Expect that this operator acts like square [batch] matrices.\n      name: A name for this `LinearOperator`.  Default is the individual\n        operators names joined with `_x_`.\n\n    Raises:\n      TypeError:  If all operators do not have the same `dtype`.\n      ValueError:  If `operators` is empty.\n    '
    check_ops.assert_proper_iterable(operators)
    operators = list(operators)
    if (not operators):
        raise ValueError(('Expected a list of >=1 operators. Found: %s' % operators))
    self._operators = operators
    dtype = operators[0].dtype
    for operator in operators:
        if (operator.dtype != dtype):
            name_type = (str((o.name, o.dtype)) for o in operators)
            raise TypeError(('Expected all operators to have the same dtype.  Found %s' % '   '.join(name_type)))
    if all((operator.is_non_singular for operator in operators)):
        if (is_non_singular is False):
            raise ValueError('The Kronecker product of non-singular operators is always non-singular.')
        is_non_singular = True
    if all((operator.is_self_adjoint for operator in operators)):
        if (is_self_adjoint is False):
            raise ValueError('The Kronecker product of self-adjoint operators is always self-adjoint.')
        is_self_adjoint = True
    if all((operator.is_positive_definite for operator in operators)):
        if (is_positive_definite is False):
            raise ValueError('The Kronecker product of positive-definite operators is always positive-definite.')
        is_positive_definite = True
    graph_parents = []
    for operator in operators:
        graph_parents.extend(operator.graph_parents)
    if (name is None):
        name = operators[0].name
        for operator in operators[1:]:
            name += ('_x_' + operator.name)
    with ops.name_scope(name, values=graph_parents):
        super(LinearOperatorKronecker, self).__init__(dtype=dtype, graph_parents=graph_parents, is_non_singular=is_non_singular, is_self_adjoint=is_self_adjoint, is_positive_definite=is_positive_definite, is_square=is_square, name=name)