You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.2 KiB
46 lines
1.2 KiB
# MIPLearn: Extensible Framework for Learning-Enhanced Mixed-Integer Optimization
|
|
# Copyright (C) 2020-2021, UChicago Argonne, LLC. All rights reserved.
|
|
# Released under the modified BSD license. See COPYING.md for more details.
|
|
|
|
import logging
|
|
import sys
|
|
from typing import Any, List, TextIO, cast
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class _RedirectOutput:
|
|
def __init__(self, streams: List[Any]) -> None:
|
|
self.streams = streams
|
|
|
|
def write(self, data: Any) -> None:
|
|
for stream in self.streams:
|
|
stream.write(data)
|
|
|
|
def flush(self) -> None:
|
|
for stream in self.streams:
|
|
stream.flush()
|
|
|
|
def __enter__(self) -> Any:
|
|
self._original_stdout = sys.stdout
|
|
self._original_stderr = sys.stderr
|
|
sys.stdout = cast(TextIO, self)
|
|
sys.stderr = cast(TextIO, self)
|
|
return self
|
|
|
|
def __exit__(
|
|
self,
|
|
_type: Any,
|
|
_value: Any,
|
|
_traceback: Any,
|
|
) -> None:
|
|
sys.stdout = self._original_stdout
|
|
sys.stderr = self._original_stderr
|
|
|
|
|
|
def _none_if_empty(obj: Any) -> Any:
|
|
if len(obj) == 0:
|
|
return None
|
|
else:
|
|
return obj
|