How to use dump_frames method in Playwright Python

Best Python code snippet using playwright-python

test_baseband_readout.py

Source:test_baseband_readout.py Github

copy

Full Screen

1# === Start Python 2/3 compatibility2from __future__ import absolute_import, division, print_function, unicode_literals3from future.builtins import * # noqa pylint: disable=W0401, W06144from future.builtins.disabled import * # noqa pylint: disable=W0401, W06145# === End Python 2/3 compatibility6from collections import defaultdict7from dataclasses import dataclass8import os9import glob10import random11import pytest12from kotekan import runner13def is_docker():14 path = "/proc/self/cgroup"15 return (16 os.path.exists("/.dockerenv")17 or os.path.isfile(path)18 and any("docker" in line for line in open(path))19 )20if is_docker():21 pytest.skip("Does not work in Github Actions docker run.", allow_module_level=True)22default_params = {23 "telescope": "ICETelescope",24 "max_dump_samples": 3500,25 "num_elements": 256,26 "total_frames": 60,27 "stream_id": 0,28 "buffer_depth": 20,29 "num_frames_buffer": 18,30 "type": "tpluse",31 "value": 153,32 "samples_per_data_set": 1024,33 "rest_mode": "step",34 "baseband_metadata_pool": {35 "kotekan_metadata_pool": "BasebandMetadata",36 "num_metadata_objects": 4096,37 },38}39@dataclass(frozen=False)40class EventDump:41 """Convenience class for reconstructing a complete baseband event from dumped BasebandBuffer"""42 event_id: int43 freq_id: int44 event_start_seq: int45 event_end_seq: int46 num_elements: int47 fpga_start_seq: int48 fpga_length: int49 @classmethod50 def from_metadata(cls, metadata):51 """Create an EventDump instance from the event's first dumped frame"""52 event_id = metadata.event_id53 freq_id = metadata.freq_id54 event_start_seq = metadata.event_start_seq55 event_end_seq = metadata.event_end_seq56 fpga_seq = metadata.frame_fpga_seq57 num_elements = metadata.num_elements58 valid_to = metadata.valid_to59 return cls(60 event_id,61 freq_id,62 event_start_seq,63 event_end_seq,64 num_elements,65 fpga_seq,66 valid_to,67 )68 def extend(self, metadata):69 """Increase the duration of the event's data with another dumped frame70 Enforces that the dumped frames record continguous samples, with no holes caused by the output buffer's filling up.71 """72 # check structure matches73 assert self.event_id == metadata.event_id74 assert self.freq_id == metadata.freq_id75 assert self.event_start_seq == metadata.event_start_seq76 assert self.event_end_seq == metadata.event_end_seq77 assert self.num_elements == metadata.num_elements78 # check samples are continguous79 fpga_seq = metadata.frame_fpga_seq80 assert fpga_seq == self.fpga_start_seq + self.fpga_length81 self.fpga_length += metadata.valid_to82DATAGEN_PNAME = "fakenetwork"83def command_rest_frames(num_frames):84 return ("post", DATAGEN_PNAME + "/generate_test_data", {"num_frames": num_frames})85def command_trigger(start, length, event_id=123456, file_path="", dm=0, dm_error=0):86 if start < 0:87 start_unix_seconds = start88 start_unix_nano = 089 else:90 start_unix_seconds = 091 start_unix_nano = start * 256092 data = {93 "event_id": event_id,94 "start_unix_seconds": start_unix_seconds,95 "start_unix_nano": start_unix_nano,96 "duration_nano": length * 2560,97 "dm": dm,98 "dm_error": dm_error,99 "file_path": file_path,100 }101 return ("post", "baseband", data)102def wait(wait_time):103 return ("wait", wait_time, None)104def run_baseband(tdir_factory, params=None, rest_commands=None, expect_a_failure=False):105 p = dict(default_params)106 tmpdir = tdir_factory.mktemp("baseband")107 if params:108 p.update(params)109 fake_buffer = runner.FakeNetworkBuffer(110 stage_name=DATAGEN_PNAME, num_frames=p["total_frames"], type=p["type"]111 )112 write_buffer = runner.DumpBasebandBuffer(113 str(tmpdir),114 num_frames="buffer_depth * 4",115 frame_size="num_elements * samples_per_data_set / 4",116 )117 test = runner.KotekanStageTester(118 "basebandReadout",119 {},120 fake_buffer,121 write_buffer,122 p,123 rest_commands=rest_commands,124 expect_failure=expect_a_failure,125 )126 test.run()127 return write_buffer.load()128def stream_to_freq_id(stream, in_stream_freq_idx, num_freq_per_stream=1):129 """Python re-implementation of ICETelescope::stream_to_freq_id"""130 assert num_freq_per_stream in [1, 8]131 link_id = stream & 0xF132 slot_id = (stream & 0xF0) >> 4133 crate_id = (stream & 0xF00) >> 8134 unused = (stream & 0xF000) >> 12135 if num_freq_per_stream == 1:136 # CHIME: 128 ICEBoards, 2048 elements137 return crate_id * 16 + slot_id + link_id * 32 + unused * 256138 elif num_freq_per_stream == 8:139 # Pathfinder/HIRAX-256: 16 ICEBoards, 256 elements140 return slot_id + link_id * 16 + in_stream_freq_idx * 128141def collect_dumped_events(142 dump_frames, frame_size=default_params["samples_per_data_set"],143):144 """Reconstructs a list of dumped BasebandBuffer frames into a list of `EventDump`s"""145 dumped_events = []146 for frame_no, frame in enumerate(dump_frames):147 event_id = frame.metadata.event_id148 num_elements = frame.metadata.num_elements149 for j, val in enumerate(frame._buffer[frame.meta_size :]):150 if j >= frame.metadata.valid_to * num_elements:151 break152 # calculation used in `testDataGen` for method `tpluse`:153 time_idx = j // num_elements154 elem_idx = j % num_elements155 expected = (frame.metadata.frame_fpga_seq + time_idx + elem_idx) % 256156 assert (157 val == expected158 ), f"Baseband data mismatch at index {j}/{frame_no}, fpga_seq={frame.metadata.frame_fpga_seq}"159 if not dumped_events or dumped_events[-1].event_id != event_id:160 # start a new event161 dumped_events.append(EventDump.from_metadata(frame.metadata))162 else:163 # extend an existing one164 event = dumped_events[-1]165 event.extend(frame.metadata)166 return dumped_events167def collect_dumped_multi_freq_events(168 dump_frames,169 num_freq_per_stream,170 frame_size=default_params["samples_per_data_set"],171 stream_id=0,172):173 """Reconstructs a list of dumped BasebandBuffer frames into a list of `EventDump`s"""174 dumped_events = defaultdict(list)175 for frame_no, frame in enumerate(dump_frames):176 event_id = frame.metadata.event_id177 freq_id = frame.metadata.freq_id178 stream_freq_idx = [179 stream_to_freq_id(stream_id, i, num_freq_per_stream)180 for i in range(num_freq_per_stream)181 ].index(freq_id)182 num_elements = frame.metadata.num_elements183 for j, val in enumerate(frame._buffer[frame.meta_size :]):184 if j >= frame.metadata.valid_to * num_elements:185 break186 # in the case of multi-frequency dumps, we need to reconstruct187 # the "j" to be what it was in the testDataGen stage that was188 # the _input_ to baseband189 orig_fpga_seq = (frame.metadata.frame_fpga_seq // frame_size) * frame_size190 orig_j = (191 (frame.metadata.frame_fpga_seq % frame_size)192 * (num_elements * num_freq_per_stream)193 + stream_freq_idx * num_elements194 + (j // num_elements * (num_freq_per_stream * num_elements))195 + j % num_elements196 )197 # calculation used in `testDataGen` for method `tpluseplusfprime`:198 time_idx = orig_j // (num_freq_per_stream * num_elements)199 elem_idx = orig_j % num_elements200 expected = (201 2 * (orig_fpga_seq + time_idx) + 3 * freq_id + 5 * elem_idx202 ) % 256203 assert (204 val == expected205 ), f"Baseband data mismatch at freq_id={freq_id}, fpga_seq={frame.metadata.frame_fpga_seq} -> {orig_fpga_seq}, index {j}/{frame_no} -> {orig_j}"206 if (207 not dumped_events[freq_id]208 or dumped_events[freq_id][-1].event_id != event_id209 ):210 # if dumped_events[freq_id]:211 # print(dumped_events[freq_id][-1])212 # start a new event213 dumped_events[freq_id].append(EventDump.from_metadata(frame.metadata))214 else:215 # extend an existing one216 event = dumped_events[freq_id][-1]217 event.extend(frame.metadata)218 return dumped_events219def test_max_samples(tmpdir_factory):220 """Test that the baseband dump length is truncated to max_dump_samples parameter"""221 rest_commands = [222 command_rest_frames(1),223 wait(0.5),224 command_rest_frames(5),225 command_trigger(1000, 3237),226 wait(0.1),227 command_rest_frames(20),228 # Give it some time to write the capture before shutdown.229 wait(0.5),230 command_rest_frames(5),231 ]232 params = {"total_frames": 30, "max_dump_samples": 2123}233 dump_frames = run_baseband(tmpdir_factory, params, rest_commands)234 dumped_events = collect_dumped_events(dump_frames)235 assert len(dumped_events) == 1236 dumped_event = dumped_events[0]237 assert dumped_event.fpga_start_seq == 1000238 assert dumped_event.fpga_length == params["max_dump_samples"]239def test_negative_start_time(tmpdir_factory):240 """Test using the 'save whatever you have' mode of the baseband dump241 Using -1 as the trigger start point initiates the dump using the oldest242 frame available in the buffers.243 """244 rest_commands = [245 command_rest_frames(1),246 wait(0.5),247 command_trigger(-1, 3237, 31),248 wait(0.1),249 command_rest_frames(25),250 # Give it some time to write the capture before shutdown.251 wait(1.0),252 command_rest_frames(5),253 ]254 params = {"total_frames": 30}255 dump_frames = run_baseband(tmpdir_factory, params, rest_commands)256 dumped_events = collect_dumped_events(dump_frames)257 assert len(dumped_events) == 1258 dumped_event = dumped_events[0]259 assert dumped_event.event_id == 31260 assert dumped_event.freq_id == 0261 assert dumped_event.fpga_start_seq == 0262 assert dumped_event.fpga_length == 3237263def test_basic(tmpdir_factory):264 rest_commands = [265 command_rest_frames(1),266 wait(0.5),267 command_rest_frames(5),268 command_trigger(1437, 1839, 10),269 wait(0.3),270 command_rest_frames(5),271 command_trigger(3457, 1237, 17),272 wait(0.3),273 command_rest_frames(5),274 command_trigger(5039, 1091, 31),275 wait(0.1),276 command_rest_frames(60),277 ]278 dump_frames = run_baseband(tmpdir_factory, {}, rest_commands)279 dumped_events = collect_dumped_events(dump_frames)280 baseband_requests = [281 cmd for cmd in rest_commands if cmd[0] == "post" and cmd[1] == "baseband"282 ]283 for i, event in enumerate(dumped_events):284 assert event.event_id == baseband_requests[i][2]["event_id"]285 assert event.freq_id == 0286 assert event.fpga_start_seq * 2560 == baseband_requests[i][2]["start_unix_nano"]287 assert event.fpga_length * 2560 == baseband_requests[i][2]["duration_nano"]288def test_8_multifreq(tmpdir_factory):289 # Eight frequencies, one stage.290 rest_commands = [291 command_rest_frames(1), # generate 1 frame = 1024 time samples x 256 feeds292 wait(0.5), # in seconds?293 command_trigger(294 1437, 1839, 10295 ), # capture ~1839 time samples starting at t = 3.67 ms(=1437 x 2.56us) with event id=10296 command_trigger(20457, 3237, 17), # similar to above297 command_trigger(41039, 2091, 31),298 wait(0.1),299 command_rest_frames(60),300 ]301 params = {302 "num_local_freq": 8,303 "type": "tpluseplusfprime",304 "stream_id": 2,305 }306 dump_frames = run_baseband(tmpdir_factory, params, rest_commands)307 dumped_multi_freq_events = collect_dumped_multi_freq_events(308 dump_frames,309 num_freq_per_stream=params["num_local_freq"],310 stream_id=params["stream_id"],311 )312 assert len(dumped_multi_freq_events) == params["num_local_freq"]313 baseband_requests = [314 cmd for cmd in rest_commands if cmd[0] == "post" and cmd[1] == "baseband"315 ]316 for freq_id in dumped_multi_freq_events:317 dumped_events = dumped_multi_freq_events[freq_id]318 for i, event in enumerate(dumped_events):319 assert event.event_id == baseband_requests[i][2]["event_id"]320 assert event.freq_id == freq_id321 assert (322 event.fpga_start_seq * 2560323 == baseband_requests[i][2]["start_unix_nano"]324 )325 assert event.fpga_length * 2560 == baseband_requests[i][2]["duration_nano"]326def test_missed(tmpdir_factory):327 good_trigger = (2437, 3123)328 rest_commands = [329 command_rest_frames(21),330 wait(0.5),331 command_trigger(*good_trigger), # Catch part of this one.332 command_rest_frames(30),333 command_trigger(100, 100), # Miss this one.334 command_trigger(1002, 112), # Miss this one.335 command_trigger(1001, 300), # Miss this one.336 command_trigger(81039, 7091), # This one never arrives.337 command_rest_frames(10),338 ]339 dump_frames = run_baseband(tmpdir_factory, {}, rest_commands)340 dumped_events = collect_dumped_events(dump_frames)341 assert len(dumped_events) == 1342 dumped_event = dumped_events[0]343 assert (344 good_trigger[0]345 <= dumped_event.fpga_start_seq346 <= good_trigger[0] + good_trigger[1]347 )348 assert 0 < dumped_event.fpga_length <= good_trigger[1]349def test_overload_no_crash(tmpdir_factory):350 params = dict(default_params)351 params.update(352 {"samples_per_data_set": 16384, "num_elements": 128, "total_frames": 60,}353 )354 rest_commands = [command_rest_frames(1), wait(0.5)]355 random.seed()356 tf = params["total_frames"]357 spd = params["samples_per_data_set"]358 n = 30359 for ii in range(n):360 start = random.randrange(1, (ii * tf // n + 20) * spd)361 length = random.randrange(1, spd * 5)362 rest_commands += [command_trigger(start, length, (ii + 1))]363 rest_commands += [command_rest_frames(params["total_frames"])]...

Full Screen

Full Screen

http2.py

Source:http2.py Github

copy

Full Screen

1import itertools2import time3import hyperframe.frame4from hpack.hpack import Encoder, Decoder5from mitmproxy.net.http import http26import mitmproxy.net.http.headers7import mitmproxy.net.http.response8import mitmproxy.net.http.request9from mitmproxy.coretypes import bidi10from .. import language11class TCPHandler:12 def __init__(self, rfile, wfile=None):13 self.rfile = rfile14 self.wfile = wfile15class HTTP2StateProtocol:16 ERROR_CODES = bidi.BiDi(17 NO_ERROR=0x0,18 PROTOCOL_ERROR=0x1,19 INTERNAL_ERROR=0x2,20 FLOW_CONTROL_ERROR=0x3,21 SETTINGS_TIMEOUT=0x4,22 STREAM_CLOSED=0x5,23 FRAME_SIZE_ERROR=0x6,24 REFUSED_STREAM=0x7,25 CANCEL=0x8,26 COMPRESSION_ERROR=0x9,27 CONNECT_ERROR=0xa,28 ENHANCE_YOUR_CALM=0xb,29 INADEQUATE_SECURITY=0xc,30 HTTP_1_1_REQUIRED=0xd31 )32 CLIENT_CONNECTION_PREFACE = b'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n'33 HTTP2_DEFAULT_SETTINGS = {34 hyperframe.frame.SettingsFrame.HEADER_TABLE_SIZE: 4096,35 hyperframe.frame.SettingsFrame.ENABLE_PUSH: 1,36 hyperframe.frame.SettingsFrame.MAX_CONCURRENT_STREAMS: None,37 hyperframe.frame.SettingsFrame.INITIAL_WINDOW_SIZE: 2 ** 16 - 1,38 hyperframe.frame.SettingsFrame.MAX_FRAME_SIZE: 2 ** 14,39 hyperframe.frame.SettingsFrame.MAX_HEADER_LIST_SIZE: None,40 }41 def __init__(42 self,43 tcp_handler=None,44 rfile=None,45 wfile=None,46 is_server=False,47 dump_frames=False,48 encoder=None,49 decoder=None,50 unhandled_frame_cb=None,51 ):52 self.tcp_handler = tcp_handler or TCPHandler(rfile, wfile)53 self.is_server = is_server54 self.dump_frames = dump_frames55 self.encoder = encoder or Encoder()56 self.decoder = decoder or Decoder()57 self.unhandled_frame_cb = unhandled_frame_cb58 self.http2_settings = self.HTTP2_DEFAULT_SETTINGS.copy()59 self.current_stream_id = None60 self.connection_preface_performed = False61 def read_request(62 self,63 __rfile,64 include_body=True,65 body_size_limit=None,66 allow_empty=False,67 ):68 if body_size_limit is not None:69 raise NotImplementedError()70 self.perform_connection_preface()71 timestamp_start = time.time()72 if hasattr(self.tcp_handler.rfile, "reset_timestamps"):73 self.tcp_handler.rfile.reset_timestamps()74 stream_id, headers, body = self._receive_transmission(75 include_body=include_body,76 )77 if hasattr(self.tcp_handler.rfile, "first_byte_timestamp"):78 # more accurate timestamp_start79 timestamp_start = self.tcp_handler.rfile.first_byte_timestamp80 timestamp_end = time.time()81 first_line_format, method, scheme, host, port, path = http2.parse_headers(headers)82 request = mitmproxy.net.http.request.Request(83 first_line_format,84 method,85 scheme,86 host,87 port,88 path,89 b"HTTP/2.0",90 headers,91 body,92 None,93 timestamp_start=timestamp_start,94 timestamp_end=timestamp_end,95 )96 request.stream_id = stream_id97 return request98 def read_response(99 self,100 __rfile,101 request_method=b'',102 body_size_limit=None,103 include_body=True,104 stream_id=None,105 ):106 if body_size_limit is not None:107 raise NotImplementedError()108 self.perform_connection_preface()109 timestamp_start = time.time()110 if hasattr(self.tcp_handler.rfile, "reset_timestamps"):111 self.tcp_handler.rfile.reset_timestamps()112 stream_id, headers, body = self._receive_transmission(113 stream_id=stream_id,114 include_body=include_body,115 )116 if hasattr(self.tcp_handler.rfile, "first_byte_timestamp"):117 # more accurate timestamp_start118 timestamp_start = self.tcp_handler.rfile.first_byte_timestamp119 if include_body:120 timestamp_end = time.time()121 else:122 timestamp_end = None123 response = mitmproxy.net.http.response.Response(124 b"HTTP/2.0",125 int(headers.get(':status', 502)),126 b'',127 headers,128 body,129 timestamp_start=timestamp_start,130 timestamp_end=timestamp_end,131 )132 response.stream_id = stream_id133 return response134 def assemble(self, message):135 if isinstance(message, mitmproxy.net.http.request.Request):136 return self.assemble_request(message)137 elif isinstance(message, mitmproxy.net.http.response.Response):138 return self.assemble_response(message)139 else:140 raise ValueError("HTTP message not supported.")141 def assemble_request(self, request):142 assert isinstance(request, mitmproxy.net.http.request.Request)143 authority = self.tcp_handler.sni if self.tcp_handler.sni else self.tcp_handler.address[0]144 if self.tcp_handler.address[1] != 443:145 authority += ":%d" % self.tcp_handler.address[1]146 headers = request.headers.copy()147 if ':authority' not in headers:148 headers.insert(0, ':authority', authority)149 headers.insert(0, ':scheme', request.scheme)150 headers.insert(0, ':path', request.path)151 headers.insert(0, ':method', request.method)152 if hasattr(request, 'stream_id'):153 stream_id = request.stream_id154 else:155 stream_id = self._next_stream_id()156 return list(itertools.chain(157 self._create_headers(headers, stream_id, end_stream=(request.content is None or len(request.content) == 0)),158 self._create_body(request.content, stream_id)))159 def assemble_response(self, response):160 assert isinstance(response, mitmproxy.net.http.response.Response)161 headers = response.headers.copy()162 if ':status' not in headers:163 headers.insert(0, b':status', str(response.status_code).encode())164 if hasattr(response, 'stream_id'):165 stream_id = response.stream_id166 else:167 stream_id = self._next_stream_id()168 return list(itertools.chain(169 self._create_headers(headers, stream_id, end_stream=(response.content is None or len(response.content) == 0)),170 self._create_body(response.content, stream_id),171 ))172 def perform_connection_preface(self, force=False):173 if force or not self.connection_preface_performed:174 if self.is_server:175 self.perform_server_connection_preface(force)176 else:177 self.perform_client_connection_preface(force)178 def perform_server_connection_preface(self, force=False):179 if force or not self.connection_preface_performed:180 self.connection_preface_performed = True181 magic_length = len(self.CLIENT_CONNECTION_PREFACE)182 magic = self.tcp_handler.rfile.safe_read(magic_length)183 assert magic == self.CLIENT_CONNECTION_PREFACE184 frm = hyperframe.frame.SettingsFrame(settings={185 hyperframe.frame.SettingsFrame.ENABLE_PUSH: 0,186 hyperframe.frame.SettingsFrame.MAX_CONCURRENT_STREAMS: 1,187 })188 self.send_frame(frm, hide=True)189 self._receive_settings(hide=True)190 def perform_client_connection_preface(self, force=False):191 if force or not self.connection_preface_performed:192 self.connection_preface_performed = True193 self.tcp_handler.wfile.write(self.CLIENT_CONNECTION_PREFACE)194 self.send_frame(hyperframe.frame.SettingsFrame(), hide=True)195 self._receive_settings(hide=True) # server announces own settings196 self._receive_settings(hide=True) # server acks my settings197 def send_frame(self, frm, hide=False):198 raw_bytes = frm.serialize()199 self.tcp_handler.wfile.write(raw_bytes)200 self.tcp_handler.wfile.flush()201 if not hide and self.dump_frames: # pragma: no cover202 print(">> " + repr(frm))203 def read_frame(self, hide=False):204 while True:205 frm = http2.parse_frame(*http2.read_raw_frame(self.tcp_handler.rfile))206 if not hide and self.dump_frames: # pragma: no cover207 print("<< " + repr(frm))208 if isinstance(frm, hyperframe.frame.PingFrame):209 raw_bytes = hyperframe.frame.PingFrame(flags=['ACK'], payload=frm.payload).serialize()210 self.tcp_handler.wfile.write(raw_bytes)211 self.tcp_handler.wfile.flush()212 continue213 if isinstance(frm, hyperframe.frame.SettingsFrame) and 'ACK' not in frm.flags:214 self._apply_settings(frm.settings, hide)215 if isinstance(frm, hyperframe.frame.DataFrame) and frm.flow_controlled_length > 0:216 self._update_flow_control_window(frm.stream_id, frm.flow_controlled_length)217 return frm218 def check_alpn(self):219 alp = self.tcp_handler.get_alpn_proto_negotiated()220 if alp != b'h2':221 raise NotImplementedError(222 "HTTP2Protocol can not handle unknown ALPN value: %s" % alp)223 return True224 def _handle_unexpected_frame(self, frm):225 if isinstance(frm, hyperframe.frame.SettingsFrame):226 return227 if self.unhandled_frame_cb:228 self.unhandled_frame_cb(frm)229 def _receive_settings(self, hide=False):230 while True:231 frm = self.read_frame(hide)232 if isinstance(frm, hyperframe.frame.SettingsFrame):233 break234 else:235 self._handle_unexpected_frame(frm)236 def _next_stream_id(self):237 if self.current_stream_id is None:238 if self.is_server:239 # servers must use even stream ids240 self.current_stream_id = 2241 else:242 # clients must use odd stream ids243 self.current_stream_id = 1244 else:245 self.current_stream_id += 2246 return self.current_stream_id247 def _apply_settings(self, settings, hide=False):248 for setting, value in settings.items():249 old_value = self.http2_settings[setting]250 if not old_value:251 old_value = '-'252 self.http2_settings[setting] = value253 frm = hyperframe.frame.SettingsFrame(flags=['ACK'])254 self.send_frame(frm, hide)255 def _update_flow_control_window(self, stream_id, increment):256 frm = hyperframe.frame.WindowUpdateFrame(stream_id=0, window_increment=increment)257 self.send_frame(frm)258 frm = hyperframe.frame.WindowUpdateFrame(stream_id=stream_id, window_increment=increment)259 self.send_frame(frm)260 def _create_headers(self, headers, stream_id, end_stream=True):261 def frame_cls(chunks):262 for i in chunks:263 if i == 0:264 yield hyperframe.frame.HeadersFrame, i265 else:266 yield hyperframe.frame.ContinuationFrame, i267 header_block_fragment = self.encoder.encode(headers.fields)268 chunk_size = self.http2_settings[hyperframe.frame.SettingsFrame.MAX_FRAME_SIZE]269 chunks = range(0, len(header_block_fragment), chunk_size)270 frms = [frm_cls(271 flags=[],272 stream_id=stream_id,273 data=header_block_fragment[i:i + chunk_size]) for frm_cls, i in frame_cls(chunks)]274 frms[-1].flags.add('END_HEADERS')275 if end_stream:276 frms[0].flags.add('END_STREAM')277 if self.dump_frames: # pragma: no cover278 for frm in frms:279 print(">> ", repr(frm))280 return [frm.serialize() for frm in frms]281 def _create_body(self, body, stream_id):282 if body is None or len(body) == 0:283 return b''284 chunk_size = self.http2_settings[hyperframe.frame.SettingsFrame.MAX_FRAME_SIZE]285 chunks = range(0, len(body), chunk_size)286 frms = [hyperframe.frame.DataFrame(287 flags=[],288 stream_id=stream_id,289 data=body[i:i + chunk_size]) for i in chunks]290 frms[-1].flags.add('END_STREAM')291 if self.dump_frames: # pragma: no cover292 for frm in frms:293 print(">> ", repr(frm))294 return [frm.serialize() for frm in frms]295 def _receive_transmission(self, stream_id=None, include_body=True):296 if not include_body:297 raise NotImplementedError()298 body_expected = True299 header_blocks = b''300 body = b''301 while True:302 frm = self.read_frame()303 if (304 (isinstance(frm, hyperframe.frame.HeadersFrame) or isinstance(frm, hyperframe.frame.ContinuationFrame)) and305 (stream_id is None or frm.stream_id == stream_id)306 ):307 stream_id = frm.stream_id308 header_blocks += frm.data309 if 'END_STREAM' in frm.flags:310 body_expected = False311 if 'END_HEADERS' in frm.flags:312 break313 else:314 self._handle_unexpected_frame(frm)315 while body_expected:316 frm = self.read_frame()317 if isinstance(frm, hyperframe.frame.DataFrame) and frm.stream_id == stream_id:318 body += frm.data319 if 'END_STREAM' in frm.flags:320 break321 else:322 self._handle_unexpected_frame(frm)323 headers = mitmproxy.net.http.headers.Headers(324 [[k, v] for k, v in self.decoder.decode(header_blocks, raw=True)]325 )326 return stream_id, headers, body327class HTTP2Protocol:328 def __init__(self, pathod_handler):329 self.pathod_handler = pathod_handler330 self.wire_protocol = HTTP2StateProtocol(331 self.pathod_handler, is_server=True, dump_frames=self.pathod_handler.http2_framedump332 )333 def make_error_response(self, reason, body):334 return language.http2.make_error_response(reason, body)335 def read_request(self, lg=None):336 self.wire_protocol.perform_server_connection_preface()337 return self.wire_protocol.read_request(self.pathod_handler.rfile)338 def assemble(self, message):...

Full Screen

Full Screen

make_virtual_traj.py

Source:make_virtual_traj.py Github

copy

Full Screen

...44 for i in range(0,chops):45 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f ' + trajfile + ' -tu ps -b ' + str(i*(stime/chops)) + ' -e '+str((i+1)*(stime/chops))+' -o chop_traj/traj-' + str((i+1)*(stime/chops)) +'.xtc')46########################################47# Extracting frames from each dihedral48def dump_frames(file):49 if not os.path.exists('dump_frames/'):50 os.system('mkdir dump_frames/')51 else:52 pass53 frame_list = read(file)54 for j in frame_list:55 if not os.path.exists('dump_frames/fr_' + str(j) +'.xtc'):56 if 0 <= j <= (1*stime/10):57 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-100000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')58 elif (1*stime/10) < j <= (2*stime/10):59 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-200000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')60 elif (2*stime/10) < j <= (3*stime/10):61 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-300000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')62 elif (3*stime/10) < j <= (4*stime/10):63 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-400000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')64 elif (4*stime/10) < j <= (5*stime/10):65 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-500000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')66 elif (5*stime/10) < j <= (6*stime/10):67 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-600000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')68 elif (6*stime/10) < j <= (7*stime/10):69 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-700000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')70 elif (7*stime/10) < j <= (8*stime/10):71 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-800000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')72 elif (8*stime/10) < j <= (9*stime/10):73 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-900000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')74 elif (9*stime/10) < j <= (stime):75 os.system('echo System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f chop_traj/traj-1000000.xtc -tu ps -dump ' + str(j) + ' -o dump_frames/fr_' + str(j) +'.xtc')76 else:77 pass78########################################79# Concatenating frames from each dihedral80def concat_frames(file):81 frame_list = read(file)82 if not os.path.exists('temp_trajs/'):83 os.system('mkdir temp_trajs/')84 else:85 pass86 ################################################################87 # Creating partial trajectories88 os.chdir('dump_frames/')89 nfr = len(frame_list)90 fn = nfr/100091 for k in range(fn):92 f = open("frames_list-" + str(k) + ".txt", 'w')93 c = open("cat_list-" + str(k) + ".txt", 'w')94 f.close()95 c.close()96 n=097 k=098 for j in frame_list:99 if n >= 1000:100 f.close()101 c.close()102 k += 1103 n = 1104 else:105 f = open("frames_list-" + str(k) + ".txt", 'a')106 c = open("cat_list-" + str(k) + ".txt", 'a')107 string0 = "fr_" + str(j) + ".xtc "108 string1 = "c\n"109 f.write(string0)110 c.write(string1)111 n += 1112 f.close()113 c.close()114 for k in range(fn+1):115 f = open("frames_list-" + str(k) + ".txt", 'r')116 l = f.readline()117 if len(frame_list) > 1:118 os.system('gmx_' + ver + ' trjcat -f ' + str(l) + ' -settime -o ../temp_trajs/traj-' + str(k) + '.xtc < cat_list-' + str(k) + '.txt')119 pass120 else:121 pass122 os.chdir('../')123 ################################################################124 # Concatenating partial trajectories125 if not os.path.exists('final_trajs/'):126 os.system('mkdir final_trajs/')127 else:128 pass129 os.chdir('temp_trajs/')130 f = open("temp-fr.txt", 'w')131 c = open("temp-cat.txt", 'w')132 for a in range(fn+1):133 stringA = 'traj-' + str(a) + '.xtc '134 stringB = 'c\n'135 f.write(stringA)136 c.write(stringB)137 f.close()138 c.close()139 f = open("temp-fr.txt", 'r')140 l = f.readline()141 if len(frame_list) > 1:142 os.system('gmx_' + ver + ' trjcat -f ' + str(l) + ' -settime -o ../final_trajs/traj-final_temp.xtc < temp-cat.txt')143 pass144 else:145 print '\n##############################\n>>> We could not read the frame list to concatenate the frames. Check your input!\n'146 os.chdir('../')147 return148########################################149# Reset folders150def change_timestep(file):151 frame_list = read(file)152 t0 = frame_list[0]153 t1 = frame_list[1]154 dt = int(t1 - t0)155 os.system('echo Other Other System | gmx_' + ver + ' trjconv -s ' + tprfile + ' -f final_trajs/traj-final_temp.xtc -tu ps -center -fit rot+trans -timestep ' + str(dt) + ' -o final_trajs/traj-final.xtc')156########################################157# Reset folders158def reset():159 if os.path.exists('final_trajs/'):160 os.system('rm -r final_trajs/')161 else:162 pass163 if os.path.exists('temp_trajs/'):164 os.system('rm -r temp_trajs/')165 else:166 pass167 if os.path.exists('dump_frames/'):168 os.system('rm -r dump_frames/')169 else:170 pass171 if os.path.exists('chop_traj/'):172 os.system('rm -r chop_traj/')173 else:174 pass175def main(ver,frame_input):176 reset()177 frame_list = read(frame_input)178 chop_traj(ver)179 dump_frames(frame_input)180 concat_frames(frame_input)181 change_timestep(frame_input)182 print "\n>>> Done! Have a nice day!\n"183 print...

Full Screen

Full Screen

ParticleToy.py

Source:ParticleToy.py Github

copy

Full Screen

1from OpenGL.GLUT import *2from OpenGL.GLU import *3from OpenGL.GL import *4import numpy as np5import sys6from typing import List7from Particle import Particle8import Solver9from CircularWireConstraint import CircularWireConstraint10from SpringForce import SpringForce11from Capture import Capture12# Global variables13N = 014dt, d = 0.0, 0.015d_sim = False # int in skeleton, used as bool16dump_frames = 0.017frame_number = 0.018p_vector: List[Particle] = [] # vector containing particles19win_id = 020win_x, win_y = 0, 021mouse_down = [0, 0, 0]22mouse_release = [0, 0, 0]23mouse_shiftclick = [0, 0, 0]24omx, omy, mx, my = 0, 0, 0, 025hmx, hmy = 0, 026capture: Capture = None # class to catch screenshots and create movie27#static RodConstraint # delete_this_dummy_rod = NULL28delete_this_dummy_spring: SpringForce = None # delete_this_dummy_spring = NULL29delete_this_dummy_wire: CircularWireConstraint = None # delete_this_dummy_wire = NULL30def free_data():31 global delete_this_dummy_spring, delete_this_dummy_wire32 delete_this_dummy_spring = None33 delete_this_dummy_wire = None34def init_system():35 dist = 0.236 center = np.array([0.0, 0.0])37 offset = np.array([dist, 0.0])38 39 # Create three particles, attach them to each other, then add a40 # circular wire constraint to the first.41 global p_vector, delete_this_dummy_spring, delete_this_dummy_wire42 p_vector.append(Particle(center + offset))43 p_vector.append(Particle(center + offset + offset))44 p_vector.append(Particle(center + offset + offset + offset))45 46 # You should replace these with a vector generalized forces and one of constraints47 delete_this_dummy_spring = SpringForce(p_vector[0], p_vector[1], dist, 1.0, 1.0)48 # delete_this_dummy_rod = new RodConstraint(pVector[1], pVector[2], dist)49 delete_this_dummy_wire = CircularWireConstraint(p_vector[0], center, dist)50def pre_display():51 glViewport(0, 0, win_x, win_y)52 glMatrixMode(GL_PROJECTION)53 glLoadIdentity()54 gluOrtho2D(-1.0, 1.0, -1.0, 1.0)55 glClearColor(0.0, 0.0, 0.0, 1.0)56 glClear(GL_COLOR_BUFFER_BIT)57def post_display():58 global frame_number59 # Write frames if necessary60 if dump_frames:61 frame_interval = 462 if (frame_number % frame_interval) == 0:63 w = glutGet(GLUT_WINDOW_WIDTH)64 h = glutGet(GLUT_WINDOW_HEIGHT)65 global capture66 if capture is None:67 capture = Capture(w, h)68 glPixelStorei(GL_PACK_ALIGNMENT, 1)69 capture.record(glReadPixels(0, 0, w, h, GL_RGBA, GL_BYTE))70 else:71 if capture is not None:72 capture.create_movie()73 capture = None74 glutSwapBuffers()75def draw_particles():76 for par in p_vector:77 par.draw()78def draw_forces():79 # change this to iteration over full set80 delete_this_dummy_spring.draw()81def draw_constraints():82 # change this to iteration over full set83 delete_this_dummy_wire.draw()84def clear_data():85 for par in p_vector:86 par.reset()87def mouse_func(button, state, x, y):88 global omx, mx, my, hmx, hmy89 omx = mx = x90 omx = my = y91 if not mouse_down[0]:92 hmx = x93 hmy = y94 if mouse_down[button]:95 mouse_release[button] = state == GLUT_UP96 mouse_shiftclick[button] = glutGetModifiers() == GLUT_ACTIVE_SHIFT97 mouse_down[button] = state == GLUT_DOWN98 99def motion_func(x: int, y: int):100 global mx, my101 mx = x102 my = y103def display_func():104 pre_display()105 draw_forces()106 draw_constraints()107 draw_particles()108 post_display()109def idle_func():110 global d_sim, win_id, p_vector, dt111 if d_sim:112 Solver.simulation_step(p_vector, dt)113 else:114 # get_from_UI() needs to be implemented115 remap_gui()116 glutSetWindow(win_id)117 glutPostRedisplay()118def remap_gui():119 for par in p_vector:120 par.m_position[0] = par.m_construct_pos[0]121 par.m_position[1] = par.m_construct_pos[1]122def key_func(key, x, y):123 key = key.decode("utf-8")124 if key == 'c' or key == 'C':125 clear_data()126 elif key == 'd' or key == 'D':127 global dump_frames128 dump_frames = not dump_frames129 elif key == 'q' or key == 'Q':130 free_data()131 sys.exit(0)132 elif key == ' ':133 global d_sim134 d_sim = not d_sim135 136def open_glut_window():137 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE)138 glutInitWindowPosition(0, 0)139 glutInitWindowSize(win_x, win_y)140 global win_id141 win_id = glutCreateWindow(b"Particletoys!")142 glClearColor(0.0, 0.0, 0.0, 1.0)143 glClear(GL_COLOR_BUFFER_BIT)144 glutSwapBuffers()145 glClear(GL_COLOR_BUFFER_BIT)146 glutSwapBuffers()147 glEnable(GL_LINE_SMOOTH)148 glEnable(GL_POLYGON_SMOOTH)149 pre_display()150 glutKeyboardFunc(key_func)151 glutMouseFunc(mouse_func)152 glutMotionFunc(motion_func)153 #glutReshapeFunc(reshape_func)154 glutIdleFunc(idle_func)155 glutDisplayFunc(display_func)156def main():157 glutInit(sys.argv)158# if(argc == 1):159 global N, dt, d160 N = 64161 dt = 0.5 # displacement of particles in each step162 d = 5.0163 print("Error: Using defaults : N=%d dt=%g d=%g\n", N, dt, d)164# else:165# N = int(argv[1])166# dt = float(argv[2])167# d = float(argv[3])168 print("\n\nHow to use this application:\n\n")169 print("\t Toggle ruction/simulation display with the spacebar key\n")170 print("\t Dump frames by pressing the 'd' key\n")171 print("\t Quit by pressing the 'q' key\n")172 global d_sim, dump_frames, frame_number, win_x, win_y173 d_sim = False174 dump_frames = 0175 frame_number = 0176 init_system()177 win_x = 512178 win_y = 512179 open_glut_window()180 glutMainLoop()181if __name__ == '__main__': ...

Full Screen

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Python automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful