| | |
- builtins.object
-
- Gate
-
- FunctionalGate
- MatrixGate
class FunctionalGate(Gate) |
| |
Concrete implementation of a gate.
The implementation is based on storing function to map basis states to
full states these are transformed into by applying the gate to it.
FunctionalGates are most easily constructed using the static methods
in the Gates class (can be called on FunctionalGate to explicitly specify
the gate class). |
| |
- Method resolution order:
- FunctionalGate
- Gate
- builtins.object
Methods defined here:
- __call__(self, state)
- Calls a gate on state.
:param state: State which the gate is acting on
:return: The result of the Gate acting on the State
- __init__(self, qubit_count, _eval_bs, _eval_state, dtype=)
- Create a Functional gate from eval_bs function (see Gate.eval_bs).
:type qubit_count: int
:type _eval_bs: function
:type _eval_state: function
:type dtype: type
:param qubit_count: Number of qubits.
:param _eval_bs: Function mapping basis state to output State
:param _eval_state: Function mapping full State to full output State
:param dtype: Data type for constructing states (amplitudes)
- __mul__(self, gate2)
- eval_bs(self, basis_state)
Class methods defined here:
- from_eval_bs(qubit_count, _eval_bs, dtype=None) from abc.ABCMeta
- See Gate.from_eval_bs.
:type qubit_count: int
:type _eval_bs: function
:type dtype: type
:param qubit_count: Number of qubits.
:param _eval_bs: Method specifying the gate's output state, given
a basis state (int) as input.
:param dtype: Data type used in states and matrices (complex number).
:return: Gate
- from_eval_state(qubit_count, _eval_state, dtype=None) from abc.ABCMeta
- Create a FunctionalGate given a function mapping between States.
:type qubit_count: int
:type _eval_state: function
:type dtype: type
:param qubit_count: Number of qubits.
:param _eval_state: Function computing the output State of the gate,
given an input State.
:param dtype: Complex number type used to create States.
:return: State
Data descriptors defined here:
- basis_size
- qubit_count
Data and other attributes defined here:
- __abstractmethods__ = frozenset([])
Class methods inherited from Gate:
- controlled_gate(qubit_count, gate, apply_qubits, control_qubits, dtype=) from abc.ABCMeta
- Create a controlled gate, given the gate and the used qubits.
Example:
qubit_count = 3
u = H = [[1,1],[1,-1]] / sqrt(2)
apply_qubits = [1] # note for n apply_qubits H is 2^n x 2^n
control_qubits = [0] # counting starts with 0
what it does to the basis states (omitting normalization factors):
|0> = |000> -> |000> = |0> (=[1,0,0,0,0,0,0,0])
|1> = |001> -> |0>(|0> + |1>)|1> = |1> + |3> (=[0,.7,0,.7,0,0,0,0])
|2> = |010> -> |010> = |2>
|3> = |011> -> |0>(|0> - |1>)|1> = |1> - |3>
|4> = |100> -> |100> = |4>
|5> = |101> -> |1>(|0> + |1>)|1> = |5> + |7>
|6> = |110> -> |110> = |6>
|7> = |111> -> |1>(|0> - |1>)|1> = |5> - |7>
so we can see the matrix representation of the whole gate would be
|1 0 0 0 0 0 0 0 |
|0 s2 0 s2 0 0 0 0 |
|0 0 1 0 0 0 0 0 |
|0 s2 0 -s2 0 0 0 0 |
|0 0 0 0 1 0 0 0 |
|0 0 0 0 0 s2 0 s2 |
|0 0 0 0 0 0 1 0 |
|0 0 0 0 0 s2 0 -s2|
where s2 = 1/sqrt(2).
Specification of the U matrix in relation with apply_qubits:
u = [[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 1},
[0, 0, 1, 0]]
apply_qubits = [3, 1]
This represents applying a nor gate to the third qubit of the total
gate and an identity gate (no gate; "wire") to the first
(again counting from 0: 0th gate, 1st gate, 2nd gate, ...).
In order to reproduce u from this statement, note that it is
written in the computational basis. Qubit 3 of the gate is treated
as 2^0 - valued, qubit 1 is 2^1 - valued.
:type qubit_count: int
:type gate: Gate
:type apply_qubits: [int]
:type control_qubits: [int]
:type dtype: type
:param qubit_count: Dimensionality of the gate ("number of wires").
:param gate: Unitary matrix. Assumed to be given in computational basis,
using the order as in apply_qubits.
:param apply_qubits: List of integers, length must fit dimensionality
of u. If all control gates are true, u is applied to these qubits.
:param control_qubits: List of integers, specifying control qubits.
:param dtype: Data type to use in states and matrices.
:return: MatrixGate representing the full operation.
- multi_gate(qubit_count, gate, apply_qubits) from abc.ABCMeta
- Apply gate to multiple qubits at once.
Example:
Apply hadamard gate to the first two qubits
>>> import quantum_circuit.gates_library as g_lib
>>> g = Gate.multi_gate(3, g_lib.hadamard(), [0, 1])
>>> out1 = g(State.from_basis_state(3, 4))
>>> out2 = g(State.from_basis_state(3, 0))
>>> print(out1)
0.500 |4> + 0.500 |5> + 0.500 |6> + 0.500 |7>
>>> print(out2)
0.500 |0> + 0.500 |1> + 0.500 |2> + 0.500 |3>
:type qubit_count: int
:type gate: Gate
:type apply_qubits: [int]
:param qubit_count: Number of qubits of the gate to be created.
:param gate: 1 - qubit gate, to be applied to multiple qubits at once.
:param apply_qubits: Labels of qubits to apply the gate to.
:return: Gate
Data descriptors inherited from Gate:
- __dict__
- dictionary for instance variables (if defined)
- __weakref__
- list of weak references to the object (if defined)
- dtype
- Specifies the data type used in constructing states and matrices.
The property (attribute) *Gate._dtype must be set by child classes.
|
class Gate(builtins.object) |
| | |
Methods defined here:
- __call__(self, state)
- Call a gate to act on a state.
Example using gates library:
>>> from quantum_circuit.gates_library import identity
>>> gate_id = identity()
>>> print(gate_id(State([0, 1])))
1.000 |1>
:type state: State
:param state: The State for the gate to act on.
:return: The State obtained by applying the gate's operation
on the input state.
- __init__(self)
- Initialize a gate matrix.
Extending classes may freely use a different signature for this method.
self._dtype must be set to a complex number type, that is used in
creating and computing output states (for the amplitudes).
- __mul__(self, gate2)
- g1 * g2 returns a gate that first applies g2, then g1.
:type gate2: Gate
:param gate2: A gate of same size as self.
:return: A gate equivalent to the operation g1(g2(state)).
The gate is a matrix gate if gate2 is a matrix gate,
otherwise a functional gate is returned
- eval_bs(self, basis_state)
- Apply gate to basis state as input.
:type basis_state: int
:param basis_state: Integer in [0, 2**qubit_count) representing
the basis state in the computational basis.
:return: State
Class methods defined here:
- controlled_gate(qubit_count, gate, apply_qubits, control_qubits, dtype=) from abc.ABCMeta
- Create a controlled gate, given the gate and the used qubits.
Example:
qubit_count = 3
u = H = [[1,1],[1,-1]] / sqrt(2)
apply_qubits = [1] # note for n apply_qubits H is 2^n x 2^n
control_qubits = [0] # counting starts with 0
what it does to the basis states (omitting normalization factors):
|0> = |000> -> |000> = |0> (=[1,0,0,0,0,0,0,0])
|1> = |001> -> |0>(|0> + |1>)|1> = |1> + |3> (=[0,.7,0,.7,0,0,0,0])
|2> = |010> -> |010> = |2>
|3> = |011> -> |0>(|0> - |1>)|1> = |1> - |3>
|4> = |100> -> |100> = |4>
|5> = |101> -> |1>(|0> + |1>)|1> = |5> + |7>
|6> = |110> -> |110> = |6>
|7> = |111> -> |1>(|0> - |1>)|1> = |5> - |7>
so we can see the matrix representation of the whole gate would be
|1 0 0 0 0 0 0 0 |
|0 s2 0 s2 0 0 0 0 |
|0 0 1 0 0 0 0 0 |
|0 s2 0 -s2 0 0 0 0 |
|0 0 0 0 1 0 0 0 |
|0 0 0 0 0 s2 0 s2 |
|0 0 0 0 0 0 1 0 |
|0 0 0 0 0 s2 0 -s2|
where s2 = 1/sqrt(2).
Specification of the U matrix in relation with apply_qubits:
u = [[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 1},
[0, 0, 1, 0]]
apply_qubits = [3, 1]
This represents applying a nor gate to the third qubit of the total
gate and an identity gate (no gate; "wire") to the first
(again counting from 0: 0th gate, 1st gate, 2nd gate, ...).
In order to reproduce u from this statement, note that it is
written in the computational basis. Qubit 3 of the gate is treated
as 2^0 - valued, qubit 1 is 2^1 - valued.
:type qubit_count: int
:type gate: Gate
:type apply_qubits: [int]
:type control_qubits: [int]
:type dtype: type
:param qubit_count: Dimensionality of the gate ("number of wires").
:param gate: Unitary matrix. Assumed to be given in computational basis,
using the order as in apply_qubits.
:param apply_qubits: List of integers, length must fit dimensionality
of u. If all control gates are true, u is applied to these qubits.
:param control_qubits: List of integers, specifying control qubits.
:param dtype: Data type to use in states and matrices.
:return: MatrixGate representing the full operation.
- from_eval_bs(qubit_count, _eval_bs, dtype=) from abc.ABCMeta
- Construct a gate given eval_bs (tells how gate acts on basis states)
Must be overridden in classes that inherit from Gate
:type qubit_count: int
:type _eval_bs: function
:type dtype: type
:param qubit_count: Number of qubits.
:param _eval_bs: Method specifying the gate's output state, given
a basis state (int) as input.
:param dtype: Data type used in states and matrices (complex number).
:return: Gate
- multi_gate(qubit_count, gate, apply_qubits) from abc.ABCMeta
- Apply gate to multiple qubits at once.
Example:
Apply hadamard gate to the first two qubits
>>> import quantum_circuit.gates_library as g_lib
>>> g = Gate.multi_gate(3, g_lib.hadamard(), [0, 1])
>>> out1 = g(State.from_basis_state(3, 4))
>>> out2 = g(State.from_basis_state(3, 0))
>>> print(out1)
0.500 |4> + 0.500 |5> + 0.500 |6> + 0.500 |7>
>>> print(out2)
0.500 |0> + 0.500 |1> + 0.500 |2> + 0.500 |3>
:type qubit_count: int
:type gate: Gate
:type apply_qubits: [int]
:param qubit_count: Number of qubits of the gate to be created.
:param gate: 1 - qubit gate, to be applied to multiple qubits at once.
:param apply_qubits: Labels of qubits to apply the gate to.
:return: Gate
Data descriptors defined here:
- __dict__
- dictionary for instance variables (if defined)
- __weakref__
- list of weak references to the object (if defined)
- basis_size
- Number of basis states, same as 2 ^ qubit_count.
- dtype
- Specifies the data type used in constructing states and matrices.
The property (attribute) *Gate._dtype must be set by child classes.
- qubit_count
- Number of qubits (in classical analogy: wires).
Data and other attributes defined here:
- __abstractmethods__ = frozenset(['__call__', '__mul__', 'basis_size', 'eval_bs', 'qubit_count'])
|
class MatrixGate(Gate) |
| | |
- Method resolution order:
- MatrixGate
- Gate
- builtins.object
Methods defined here:
- __call__(self, state)
- Allows a Gate to be called on a State object
:param state: the State object the gate is being called on
:return: the State object resulting from the operation of the gate
- __init__(self, qubit_count, matrix, dtype=)
- __mul__(self, gate2)
- __repr__(self)
- __sub__(self, gate2)
- eval_bs(self, basis_state)
Class methods defined here:
- from_eval_bs(qubit_count, _eval_bs, dtype=) from abc.ABCMeta
- join_gates(qubit_count, gate_list) from abc.ABCMeta
- Method to merge matrix gates (using tensor product) into larger one
:param qubit_count: number of qubits
:param gate_list: list of applied gates
:return: joint gate
Data descriptors defined here:
- basis_size
- qubit_count
Data and other attributes defined here:
- __abstractmethods__ = frozenset([])
Class methods inherited from Gate:
- controlled_gate(qubit_count, gate, apply_qubits, control_qubits, dtype=) from abc.ABCMeta
- Create a controlled gate, given the gate and the used qubits.
Example:
qubit_count = 3
u = H = [[1,1],[1,-1]] / sqrt(2)
apply_qubits = [1] # note for n apply_qubits H is 2^n x 2^n
control_qubits = [0] # counting starts with 0
what it does to the basis states (omitting normalization factors):
|0> = |000> -> |000> = |0> (=[1,0,0,0,0,0,0,0])
|1> = |001> -> |0>(|0> + |1>)|1> = |1> + |3> (=[0,.7,0,.7,0,0,0,0])
|2> = |010> -> |010> = |2>
|3> = |011> -> |0>(|0> - |1>)|1> = |1> - |3>
|4> = |100> -> |100> = |4>
|5> = |101> -> |1>(|0> + |1>)|1> = |5> + |7>
|6> = |110> -> |110> = |6>
|7> = |111> -> |1>(|0> - |1>)|1> = |5> - |7>
so we can see the matrix representation of the whole gate would be
|1 0 0 0 0 0 0 0 |
|0 s2 0 s2 0 0 0 0 |
|0 0 1 0 0 0 0 0 |
|0 s2 0 -s2 0 0 0 0 |
|0 0 0 0 1 0 0 0 |
|0 0 0 0 0 s2 0 s2 |
|0 0 0 0 0 0 1 0 |
|0 0 0 0 0 s2 0 -s2|
where s2 = 1/sqrt(2).
Specification of the U matrix in relation with apply_qubits:
u = [[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 1},
[0, 0, 1, 0]]
apply_qubits = [3, 1]
This represents applying a nor gate to the third qubit of the total
gate and an identity gate (no gate; "wire") to the first
(again counting from 0: 0th gate, 1st gate, 2nd gate, ...).
In order to reproduce u from this statement, note that it is
written in the computational basis. Qubit 3 of the gate is treated
as 2^0 - valued, qubit 1 is 2^1 - valued.
:type qubit_count: int
:type gate: Gate
:type apply_qubits: [int]
:type control_qubits: [int]
:type dtype: type
:param qubit_count: Dimensionality of the gate ("number of wires").
:param gate: Unitary matrix. Assumed to be given in computational basis,
using the order as in apply_qubits.
:param apply_qubits: List of integers, length must fit dimensionality
of u. If all control gates are true, u is applied to these qubits.
:param control_qubits: List of integers, specifying control qubits.
:param dtype: Data type to use in states and matrices.
:return: MatrixGate representing the full operation.
- multi_gate(qubit_count, gate, apply_qubits) from abc.ABCMeta
- Apply gate to multiple qubits at once.
Example:
Apply hadamard gate to the first two qubits
>>> import quantum_circuit.gates_library as g_lib
>>> g = Gate.multi_gate(3, g_lib.hadamard(), [0, 1])
>>> out1 = g(State.from_basis_state(3, 4))
>>> out2 = g(State.from_basis_state(3, 0))
>>> print(out1)
0.500 |4> + 0.500 |5> + 0.500 |6> + 0.500 |7>
>>> print(out2)
0.500 |0> + 0.500 |1> + 0.500 |2> + 0.500 |3>
:type qubit_count: int
:type gate: Gate
:type apply_qubits: [int]
:param qubit_count: Number of qubits of the gate to be created.
:param gate: 1 - qubit gate, to be applied to multiple qubits at once.
:param apply_qubits: Labels of qubits to apply the gate to.
:return: Gate
Data descriptors inherited from Gate:
- __dict__
- dictionary for instance variables (if defined)
- __weakref__
- list of weak references to the object (if defined)
- dtype
- Specifies the data type used in constructing states and matrices.
The property (attribute) *Gate._dtype must be set by child classes.
| |


Goto User Home
Goto Doctor Home
Goto Admin Home
Support
Profile
Thank You
You will be connected shortly
Your browser does not support the audio element.
Your browser does not support the audio element.


13 Feb 2019 Stephan Ewen (@stephanewen), Fabian Hueske (@fhueske), & Xiaowei Jiang (@XiaoweiJ)
Last week, we broke the news that Alibaba decided to contribute its Flink-fork, called Blink, back to the Apache Flink project. Why is that a big thing for Flink, what will it mean for users and the community, and how does it fit into Flink’s overall vision? Let’s take a step back to understand this better…
A Unified Approach to Batch and Streaming
Since its early days, Apache Flink has followed the philosophy of taking a unified approach to batch and streaming data processing. The core building block is “continuous processing of unbounded data streams”: if you can do that, you can also do offline processing of bounded data sets (batch processing use cases), because these are just streams that happen to end at some point.
The “streaming first, with batch as a special case of streaming” philosophy is supported by various projects (for example Flink, Beam, etc.) and often been cited as a powerful way to build data applications that generalize across real-time and offline processing and to help greatly reduce the complexity of data infrastructures.
Why are there still batch processors?
However, “batch is just a special case of streaming” does not mean that any stream processor is now the right tool for your batch processing use cases - the introduction of stream processors did not render batch processors obsolete:
-
Pure stream processing systems are very slow at batch processing workloads. No one would consider it a good idea to use a stream processor that shuffles through message queues to analyze large amounts of available data.
-
Unified APIs like Apache Beam often delegate to different runtimes depending on whether the data is continuous/unbounded of fix/bounded. For example, the implementations of the batch and streaming runtime of Google Cloud Dataflow are different, to get the desired performance and resilience in each case.
-
Apache Flink has a streaming API that can do bounded/unbounded use cases, but still offers a separate DataSet API and runtime stack that is faster for batch use cases.
What is the reason for the above? Where did “batch is just a special case of streaming” go wrong?
The answer is simple, nothing is wrong with that paradigm. Unifying batch and streaming in the API is one aspect. One needs to also exploit certain characteristics of the special case “bounded data” in the runtime to competitively handle batch processing use cases. After all, batch processors have been built specifically for that special case.
Batch on top of a Streaming Runtime
We always believed that it is possible to have a runtime that is state-of-the-art for both stream processing and batch processing use cases at the same time. A runtime that is streaming-first, but can exploit just the right amount of special properties of bounded streams to be as fast for batch use cases as dedicated batch processors. This is the unique approach that Flink takes.
Apache Flink has a network stack that supports both low-latency/high-throughput streaming data exchanges, as well as high-throughput batch shuffles. Flink has streaming runtime operators for many operations, but also specialized operators for bounded inputs, which get used when you choose the DataSet API or select the batch environment in the Table API.
The figure illustrates a streaming join and a batch join. The batch join can read one input fully into a hash table and then probe with the other input. The stream join needs to build tables for both sides, because it needs to continuously process both inputs. For data larger than memory, the batch join can partition both data sets into subsets that fit in memory (data hits disk once) whereas the continuous nature of the stream join requires it to always keep all data in the table and repeatedly hit disk on cache misses.
Because of that, Apache Flink has been actually demonstrating some pretty impressive batch processing performance since its early days. The below benchmark is a bit older, but validated our architectural approach early on.
Time to sort 3.2 TB (80 GB/node), in seconds
(Presentation by Dongwon Kim, Flink Forward Berlin 2015.)
What is still missing?
To conclude the approach and make Flink’s experience on bounded data (batch) state-of-the-art, we need to add a few more enhancements. We believe that these features are key to realizing our vision:
(1) A truly unified runtime operator stack: Currently the bounded and unbounded operators have a different network and threading model and don’t mix and match. The original reason was that batch operators followed a “pull model” (easier for batch algorithms), while streaming operators followed a “push model” (better latency/throughput characteristics). In a unified stack, continuous streaming operators are the foundation. When operating on bounded data without latency constraints, the API or the query optimizer can select from a larger set of operators. The optimizer can pick, for example, a specialized join operator that first consumes one input stream entirely before reading the second input stream.
(2) Exploiting bounded streams to reduce the scope of fault tolerance: When input data is bounded, it is possible to completely buffer data during shuffles (memory or disk) and replay that data after a failure. This makes recovery more fine grained and thus much more efficient.
(3) Exploiting bounded stream operator properties for scheduling: A continuous unbounded streaming application needs (by definition) all operators running at the same time. An application on bounded data can schedule operations after another, depending on how the operators consume data (e.g., first build hash table, then probe hash table). This increases resource efficiency.
(4) Enabling these special case optimizations for the DataStream API: Currently, only the Table API (which is unified across bounded/unbounded streams) activates these optimizations when working on bounded data.
(5) Performance and coverage for SQL: SQL is the de-facto standard data language, and while it is also being rapidly adopted for continuous streaming use cases, there is absolutely no way past it for bounded/batch use cases. To be competitive with the best batch engines, Flink needs more coverage and performance for the SQL query execution. While the core data-plane in Flink is high performance, the speed of SQL execution ultimately depends a lot also on optimizer rules, a rich set of operators, and features like code generation.
Enter Blink
Blink is a fork of Apache Flink, originally created inside Alibaba to improve Flink’s behavior for internal use cases. Blink adds a series of improvements and integrations (see the Readme for details), many of which fall into the category of improved bounded-data/batch processing and SQL. In fact, of the above list of features for a unified batch/streaming system, Blink implements significant steps forward in all except (4):
Unified Stream Operators: Blink extends the Flink streaming runtime operator model to support selectively reading from different inputs, while keeping the push model for very low latency. This control over the inputs helps to now support algorithms like hybrid hash-joins on the same operator and threading model as continuous symmetric joins through RocksDB. These operators also form the basis for future features like “Side Inputs”.
Table API & SQL Query Processor: The SQL query processor is the component that evolved the changed most compared to the latest Flink master branch:
-
While Flink currently translates queries either into DataSet or DataStream programs (depending on the characteristics of their inputs), Blink translates queries to a data flow of the aforementioned stream operators.
-
Blink adds many more runtime operators for common SQL operations like semi-joins, anti-joins, etc.
-
The query planner (optimizer) is still based on Apache Calcite, but has many more optimization rules (incl. join reordering) and uses a proper cost model for planning.
-
Stream operators are more aggressively chained.
-
The common data structures (sorters, hash tables) and serializers are extended to go even further in operating on binary data and saving serialization overhead. Code generation is used for the row serializers.
Improved Scheduling and Failure Recovery: Finally, Blink implements several improvements for task scheduling and fault tolerance. The scheduling strategies use resources better by exploiting how the operators process their input data. The failover strategies recover more fine-grained along the boundaries of persistent shuffles. A failed JobManager can be replaced without restarting a running application.
The changes in Blink result in a big improvement in performance. The below numbers were reported by the developers of Blink to give a rough impression of the performance gains.
Relative performance of Blink versus Flink 1.6.0 in the TPC-H benchmark, query by query.
The performance improvement is in average 10x.
Presentation by Xiaowei Jiang at Flink Forward Berlin, 2018.)
Performance of Blink versus Spark in the TPC-DS benchmark, aggregate time for all queries together.
Presentation by Xiaowei Jiang at Flink Forward Beijing, 2018.
How do we plan to merge Blink and Flink?
Blink’s code is currently available as a branch in the Apache Flink repository. It is a challenge to merge a such big amount of changes, while making the merge process as non-disruptive as possible and keeping public APIs as stable as possible.
The community’s merge plan focuses initially on the bounded/batch processing features mentioned above and follows the following approach to ensure a smooth integration:
-
To merge Blink’s SQL/Table API query processor enhancements, we exploit the fact that both Flink and Blink have the same APIs: SQL and the Table API. Following some restructuring of the Table/SQL module (FLIP-32) we plan to merge the Blink query planner (optimizer) and runtime (operators) as an additional query processor next to the current SQL runtime. Think of it as two different runners for the same APIs.
Initially, users will be able to select which query processor to use. After a transition period in which the new query processor will be developed to subsume the current query processor, the current processor will most likely be deprecated and eventually dropped. Given that SQL is such a well defined interface, we anticipate that this transition has little friction for users. Mostly a pleasant surprise to have broader SQL feature coverage and a boost in performance. -
To support the merge of Blink’s enhancements to scheduling and recovery for jobs on bounded data, the Flink community is already working on refactoring its current schedule and adding support for pluggable scheduling and fail-over strategies.
Once this effort is finished, we can add Blink’s scheduling and recovery strategies as a new scheduling strategy that is used by the new query processor. Eventually, we plan to use the new scheduling strategy also for bounded DataStream programs. -
The extended catalog support, DDL support, as well as support for Hive’s catalog and integrations is currently going through separate design discussions. We plan to leverage existing code here whenever it makes sense.
Summary
We believe that the data processing stack of the future is based on stream processing: The elegance of stream processing with its ability to model offline processing (batch), real-time data processing, and event-driven applications in the same way, while offering high performance and consistency is simply too compelling.
Exploiting certain properties of bounded data is important for a stream processor to achieve the same performance as dedicated batch processors. While Flink always supported batch processing, the project is taking the next step in building a unified runtime and towards becoming a stream processor that is competitive with batch processing systems even on their home turf: OLAP SQL. The contribution of Alibaba’s Blink code helps the Flink community to pick up the speed on this development.


Turing Machine
- A machine operates on a infinite tape. On this tape are symbols, which the machine can read and write, one at a time, using a tape head. Operation is fully determined by a finite set of elementary instructions.
- Despite the model’s simplicity, given any computer algorithm, a Turing machine capable of simulating that algorithm’s logic can be constructed.(Incredibly powerful)
| same program | different program | |
|---|---|---|
| same data | remains the same | click |
| different data | click | - |
Universal Turing Machine
A Universal Turing Machine can simulate any arbitrary Turing machine on arbitrary input. - A Turing machine computes a certain fixed partial computable function. - A Turing Machine has finite states. Hence, we’re capable of encoding those states. - Programable: by reading both the description of the machine to be simulated as well as the input from its own tape.
Given the appropriate program, a Universal Turing Machine is capable of computing anything that is computable.
Turing Equivalance
2 computers P and Q are called equivalent if P can simulate Q and Q can simulate P.
Turing Complete
A system that can simulate a universal Turing machine is called Turing complete. - Examples: Most programming languages if memory limit is ignored. E.g. C, C++, Python… - Non Turing complete languages: regular languages generated by regular expression, context free grammar
Misc
Von Neumann Model
Developed based on UTM.
- 4 main components: CU, ALU, memory, I/O
- Programs must be stored in the memory.
- Finite instructions(why?)
- Sequential execution: instructions will be fetched, decoded, and executed one after another, even if there is a jump to previous/following instructions.
- e.g.
- jump to 4
- add x and y
- jump to 2
- jump to 2
- e.g.
Questions
- What’s a Turing Machine?
- Is a calculator Turing complete? Give an explaination.
- Explain the Von Neumann Model.


Package
MiXR
Gift
(current)
About
Packages
Contact Us
Package Example 1
Package Example 2
Package Example 3
Package Example 4
Submit


Nearby: less-than-2, complete-fails, all results,
NOTE: this analysis is written yet! (2016-06-20).
The Web Platform Tests and Test The Web Forward projects have improved the quality of test suites massively. Since we don't live in a perfect world, if one looks for trouble hard enough one will find it.
The HTML test suite, which is nearing ??? tests (and keeps growing).
In total, ??? tests fail to pass in two implementations, which amounts to ??% of the total. The sections below provide context in which to appraise these failures.


Thank you for purchase Insurance HTML5 Template!
I hope this template will be helpful for you - if you'll have any problems with using it, please contact me via this support email. Feel free to send me your website URL, which has been created using this theme - I'll be happy!
This template has been written in HTML5, CSS3 and JavaScript (with jQuery). After downloading this template from your user panel on ThemeForest, you have to unzipped all files to some local folder on your computer.
All of the template files are placed in "insurance" directory. Select all template files and open your FTP Client (for example FileZilla). Then, make connection with your server (you may need your server name, FTP username and password).
Locate the domain folder, where you want to install this template and then open "public_html" (or similar) directory. After that, make an upload of all files to selected folder - that's all!
In "insurance" directory you can find eleven template files:
Header contains your website logo and menu, located on navy blue bar on the top of website. The header code is as follow:
Footer for all .html files is the same:
Using "Quote Popup" you can get your client needs to give him the best insurance offer. The "Quote Popup" html structure is as follow:
- Travel insurance
- Car insurance
- Life insurance
- House insurance
Travel Insurance Quote
Level of protection:
Contact details:
Travel:
Have you used tobacco or nicotine products in the last 12 months?
Yes, I have No, I haven'tYour insurance quote has been sent successfully. Close this notice.
One of the contact form option is "Contact popup" - code for this element is as follow:
Contact us
(+123) 456 789 000
Send us an email!
In Insurance template you can use 14 different sections, to show your website content in the best way. You can use this sections in any order.
This is main website slider. You can use as many slides as you need. If you want to change time of slides change, open "_assets/_js/functions.js" file and go to line 611 and change "10000" value to your own (in milliseconds).
This section contains special animation with perfect place for your phone number - your client can call you with one click using this section.
 Mauris hendrerit fringilla ligula, nec congue leo pharetra in. Quisque commodo vehicula justo, tincidunt vehicula elit consequat vel.
Thank you, we'll call you soon. Close this notice.
This section is perfect for show short insurance description and image. You can also put here a "Get a Quote" button.
This is section dedicated for show short story about you or your company, with timeline.
About us
Meet our insurance agency.
Curabitur iaculis ante a nibh vulputate sollicitudin. Integer ut tincidunt ligula. Praesent pretium, tellus at elementum ultrices.
March, 2009. . .The establishment of our agency, with two professional insurance agents, in small office in Boston.
This is section dedicated for your company key values and motto / slogan.
Our vision
Best insurances for everyone.
Phasellus quis tortor in arcu maximus vehicula. Donec eget elit vitae tortor convallis mattis. Aliquam erat volutpat. Integer vitae quam ut leo accumsan consequat eu ac sapien.
John Doe1294 satisfied customers5 professional agents8 insurances in our offer12 years of experience
This is great divider between other sections - you can set image here and insert your slogan to left top or right bottom box.
Section dedicated for your company contact data - phone number, email, address etc. Good idea is to add here a button to show "contact popup".
Company informations
Insurance Agency
John Doe5002 Example Street
Los Angeles, CA 90034Contact details
E-mail address:
contact@insuranceagency.com(+123) 456 789 000
Available 8:00am - 4:00pm
If for some reason you don't want to use contact popup, you can use this section to create static contact page.
Send us an email!
Donec eget elit vitae tortor convallis mattis. Aliquam erat volutpat. Integer vitae quam ut leo accumsan consequat eu ac sapien. Quisque tincidunt leo enim, in pulvinar felis consectetur ac.
This section is perfect for product description with image on right side.
Peaceful holidays
Sed molestie, eros et tempor eleifend, tortor justo ultricies odio, ut viverra est sem eget augue. Ut volutpat lectus vel arcu euismod scelerisque. Aliquam sollicitudin aliquet nisl ut faucibus.
Etiam id ante est. Aenean pellentesque quam vel purus tincidunt tristique. Integer arcu nibh, tempus id ultricies ut, vulputate nec nunc. Etiam elit elit, commodo at interdum sed. Cras accumsan dignissim neque et pulvinar.
- General Insurance Conditions Document size: 34kb
This section is perfect for product description with image on left side.
Get an insurance quote!
Travel insurance
Etiam id ante est. Aenean pellentesque quam vel purus tincidunt tristique. Integer arcu nibh, tempus id ultricies ut, vulputate nec nunc. Etiam elit elit, commodo at interdum sed.
Sed molestie, eros et tempor eleifend, tortor justo ultricies odio, ut viverra est sem eget augue. Ut volutpat lectus vel arcu euismod scelerisque. Aliquam sollicitudin aliquet nisl ut faucibus.
Section for your clients references. References are rotatet automatically - if you want to change time between one and another reference, open "_assets/_js/functions.js" file, go to line 926 and change delay from 5000 to your own value (in milliseconds).
References
What our Clients say?
Donec eget elit vitae tortor convallis mattis. Aliquam erat volutpat. Integer vitae quam ut leo accumsan consequat eu ac sapien. Quisque tincidunt leo enim, in pulvinar felis consectetur ac.
Proin et posuere dolor, a finibus tellus. Phasellus suscipit gravida magna. Nam posuere nisi eu ex sodales, sit amet dictum turpis maximus. Maecenas sodales vehicula tellus, at imperdiet risus.
Quisque pharetra lorem quis libero ornare fringilla. Maecenas nisl justo, suscipit vel tortor at, varius auctor erat. Maecenas efficitur felis nec arcu volutpat lacinia.
Section dedicated for single insurance agents presentation - i.e. with "progress-bars" shortcode.
. . .Susane Smith
Susane is one of our best Insurance Agents. She has 15 years of experience, house insurance specialization and tons of satisfied customers.
This section is dedicated for blog content.
- . . .
How to choose best life insurance
Mauris hendrerit fringilla ligula, nec congue leo pharetra in. Quisque commodo vehicula justo, tincidunt vehicula elit consequat vel. Nunc gravida erat sed bibendum accumsan.
Duis id hendrerit ante, id sagittis quam. Sed aliquet enim ut mi fermentum dignissim. Fusce in dui ut felis facilisis fermentum. Maecenas vitae turpis dignissim diam volutpat venenatis vel in massa. Aliquam mi quam, vulputate vitae orci quis, feugiat volutpat urna.
Section for single blog post looks a little bit different - you should add "comments" box with "comments reply" form:
How to choose best life insurance
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean semper faucibus lacus, vel pretium metus. Praesent suscipit malesuada pretium.
Header H2
Duis condimentum at velit a tincidunt. Duis diam mauris, luctus a dolor quis, adipiscing placerat mi. Maecenas imperdiet massa et lorem accumsan dictum. Nunc sit amet vehicula justo, vehicula lacinia purus.
Header H3
Sed magna neque, interdum ut vulputate sed, cursus eu risus. Phasellus sagittis interdum magna, vel ultricies tellus porttitor ut. Vivamus malesuada varius quam quis mollis. Mauris sodales, mi ac bibendum varius, nibh ligula tempus velit, sed convallis lectus metus ac justo.
Header H4
Nunc nisi felis, malesuada ac sagittis sed, tempus nec odio. Vivamus ullamcorper pretium ipsum, id molestie elit dapibus vitae. Vestibulum ut odio id sem ultrices convallis vel id diam. Aliquam erat volutpat. Aliquam mattis lacus id neque posuere, ac egestas mi volutpat. Maecenas augue ante, laoreet vitae elementum rhoncus, pharetra eget erat.
Morbi vestibulum consectetur molestie. Aliquam vel laoreet lectus, nec gravida diam. Nunc cursus facilisis mauris nec vulputate. Morbi varius sapien eget pulvinar consectetur.
John DoeHeader H5
Nulla sapien massa, tempus in eros vel, viverra lacinia diam. Nam quis felis ac nunc iaculis suscipit. Nunc varius mi purus, volutpat sagittis lorem viverra vel. Curabitur blandit orci sit amet turpis tempor, ut consectetur dui porttitor. In hac habitasse platea dictumst. Praesent lorem justo, tincidunt a velit eu, dictum interdum arcu.
- Nunc sit amet vehicula justo
- Duis diam mauris, luctus
- Vivamus ullamcorper pretium ipsum
- Aenean semper faucibus lacus
- Duis condimentum at velit
- Maecenas augue ante
Donec vitae tellus eu purus lacinia elementum. Morbi fermentum mattis magna. Vestibulum vel gravida sem. Morbi iaculis egestas turpis, a bibendum leo tristique ut. Nullam sed eros a est bibendum imperdiet et et elit. Morbi non est at velit blandit placerat fermentum sed leo.
This section is dedicated to describe insurance details, show all or most important parameters etc. You can also use this section for any other purpose which needs "tabs" presentation.
- Ship travel
. . .- Car travel
. . .Ship travel
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ut egestas erat, eu mattis odio. In pharetra purus sapien, non scelerisque neque scelerisque et. Aliquam metus dolor, vehicula at dictum sed, ultrices vitae ipsum.
Sed molestie, eros et tempor eleifend, tortor justo ultricies odio, ut viverra est sem eget augue. Ut volutpat lectus vel arcu euismod scelerisque. Aliquam sollicitudin aliquet nisl ut faucibus. Cras accumsan dignissim neque et pulvinar. Proin aliquam varius convallis. Suspendisse eget arcu id eros cursus ultrices. Phasellus consectetur tellus sit amet libero aliquet rhoncus.
from $29.00
. . . Level of Protection: from $50.000 to $1.000.000 Trip Interruption Protection: up to 180% of amount purchased
You can use this section to show your content in two boxes with half page width of each one.
Important documents
Etiam elit elit, commodo at interdum sed. Cras accumsan dignissim neque et pulvinar. In finibus vitae tellus at scelerisque. Etiam facilisis purus nec sem ultricies commodo.
Etiam id ante est. Aenean pellentesque quam vel purus tincidunt tristique. Integer arcu nibh, tempus id ultricies ut, vulputate nec nunc.
If you don't want to use "Quote forms" as popup, you can use this section:
Travel Insurance Quote
Level of protection:
Contact details:
Travel:
Your insurance quote has been sent successfully. Close this notice.
Stylesheets are located in "_assets/_css" directory. For all .html files you need to include only one .css file - "style.css". This template has been written using CSS3 - if you haven't used it before, go to this w3schools.com website - it's very helpful introduction.
Open "style.css" file (this is main stylesheet for Insurance) to see the CSS structure.
Insurance HTML5 template has only one javascript file, located into "_assets/_js/" directory - functions.js; This is main javascript file with general functions and settings.
You shouldn't make any configuration changes in "functions.js" file - any customizations, like Google Map marker position or additional fields in Quote Popup should be done in HTML file.
Many thanks for purchase this theme! If you have an idea that makes this template will be better, feel free to contact with me!
If you like this template, please rate it !
If you have questions about this template, contact me<EMAIL_ADDRESS>Follow me on Twitter and ThemeForest for recent news about themes!
Comments
Nunc nisi felis, malesuada ac sagittis sed, tempus nec odio. Vivamus ullamcorper pretium ipsum, id molestie elit dapibus vitae. Vestibulum ut odio id sem ultrices convallis vel id diam. Aliquam erat volutpat. Aliquam mattis lacus id neque posuere, ac egestas mi volutpat. Maecenas augue ante, laoreet vitae elementum rhoncus, pharetra eget erat.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean semper faucibus lacus, vel pretium metus. Praesent suscipit malesuada pretium. Quisque ultrices feugiat nulla vel molestie. Mauris suscipit quis dui et pharetra.
Donec vitae tellus eu purus lacinia elementum. Morbi fermentum mattis magna. Vestibulum vel gravida sem. Morbi iaculis egestas turpis, a bibendum leo tristique ut. Nullam sed eros a est bibendum imperdiet et et elit. Morbi non est at velit blandit placerat fermentum sed leo.


MIMETypes
public enum MIMETypes : String
Undocumented
-
Undocumented
Declaration
Swift
case `default`
-
Undocumented
Declaration
Swift
case css
-
Undocumented
Declaration
Swift
case wbmp
-
Undocumented
Declaration
Swift
case xls
-
Undocumented
Declaration
Swift
case wml
-
Undocumented
Declaration
Swift
case tk
-
Undocumented
Declaration
Swift
case jad
-
Undocumented
Declaration
Swift
case pl
-
Undocumented
Declaration
Swift
case mpeg
-
Undocumented
Declaration
Swift
case xspf
-
Undocumented
Declaration
Swift
case m4a
-
Undocumented
Declaration
Swift
case woff
-
Undocumented
Declaration
Swift
case img
-
Undocumented
Declaration
Swift
case mp4
-
Undocumented
Declaration
Swift
case crt
-
Undocumented
Declaration
Swift
case m3u8
-
Undocumented
Declaration
Swift
case rar
-
Undocumented
Declaration
Swift
case tcl
-
Undocumented
Declaration
Swift
case ts
-
Undocumented
Declaration
Swift
case eot
-
Undocumented
Declaration
Swift
case rtf
-
Undocumented
Declaration
Swift
case gpp = "3gpp"
-
Undocumented
Declaration
Swift
case shtml
-
Undocumented
Declaration
Swift
case mng
-
Undocumented
Declaration
Swift
case kmz
-
Undocumented
Declaration
Swift
case iso
-
Undocumented
Declaration
Swift
case jpg
-
Undocumented
Declaration
Swift
case bmp
-
Undocumented
Declaration
Swift
case wmv
-
Undocumented
Declaration
Swift
case txt
-
Undocumented
Declaration
Swift
case sit
-
Undocumented
Declaration
Swift
case mp3
-
Undocumented
Declaration
Swift
case msi
-
Undocumented
Declaration
Swift
case ps
-
Undocumented
Declaration
Swift
case xlsx
-
Undocumented
Declaration
Swift
case sea
-
Undocumented
Declaration
Swift
case png
-
Undocumented
Declaration
Swift
case wmlc
-
Undocumented
Declaration
Swift
case json
-
Undocumented
Declaration
Swift
case zip
-
Undocumented
Declaration
Swift
case bin
-
Undocumented
Declaration
Swift
case jng
-
Undocumented
Declaration
Swift
case pdb
-
Undocumented
Declaration
Swift
case war
-
Undocumented
Declaration
Swift
case rpm
-
Undocumented
Declaration
Swift
case eps
-
Undocumented
Declaration
Swift
case dll
-
Undocumented
Declaration
Swift
case ai
-
Undocumented
Declaration
Swift
case atom
-
Undocumented
Declaration
Swift
case xml
-
Undocumented
Declaration
Swift
case kar
-
Undocumented
Declaration
Swift
case mml
-
Undocumented
Declaration
Swift
case asx
-
Undocumented
Declaration
Swift
case webp
-
Undocumented
Declaration
Swift
case m4v
-
Undocumented
Declaration
Swift
case md
-
Undocumented
Declaration
Swift
case ppt
-
Undocumented
Declaration
Swift
case ico
-
Undocumented
Declaration
Swift
case pem
-
Undocumented
Declaration
Swift
case mpg
-
Undocumented
Declaration
Swift
case webm
-
Undocumented
Declaration
Swift
case prc
-
Undocumented
Declaration
Swift
case hqx
-
Undocumented
Declaration
Swift
case kml
-
Undocumented
Declaration
Swift
case gp = "3gp"
-
Undocumented
Declaration
Swift
case deb
-
Undocumented
Declaration
Swift
case jardiff
-
Undocumented
Declaration
Swift
case htc
-
Undocumented
Declaration
Swift
case dmg
-
Undocumented
Declaration
Swift
case jpeg
-
Undocumented
Declaration
Swift
case pptx
-
Undocumented
Declaration
Swift
case htm
-
Undocumented
Declaration
Swift
case swf
-
Undocumented
Declaration
Swift
case msp
-
Undocumented
Declaration
Swift
case der
-
Undocumented
Declaration
Swift
case doc
-
Undocumented
Declaration
Swift
case tiff
-
Undocumented
Declaration
Swift
case gif
-
Undocumented
Declaration
Swift
case ogg
-
Undocumented
Declaration
Swift
case svg
-
Undocumented
Declaration
Swift
case pm
-
Undocumented
Declaration
Swift
case sevenZ = "7z"
-
Undocumented
Declaration
Swift
case tif
-
Undocumented
Declaration
Swift
case mov
-
Undocumented
Declaration
Swift
case xpi
-
Undocumented
Declaration
Swift
case midi
-
Undocumented
Declaration
Swift
case exe
-
Undocumented
Declaration
Swift
case pdf
-
Undocumented
Declaration
Swift
case js
-
Undocumented
Declaration
Swift
case svgz
-
Undocumented
Declaration
Swift
case run
-
Undocumented
Declaration
Swift
case docx
-
Undocumented
Declaration
Swift
case rss
-
Undocumented
Declaration
Swift
case flv
-
Undocumented
Declaration
Swift
case ra
-
Undocumented
Declaration
Swift
case msm
-
Undocumented
Declaration
Swift
case mid
-
Undocumented
Declaration
Swift
case jnlp
-
Undocumented
Declaration
Swift
case html
-
Undocumented
Declaration
Swift
case avi
-
Undocumented
Declaration
Swift
case xhtml
-
Undocumented
Declaration
Swift
case asf
-
Undocumented
Declaration
Swift
case jar
-
Undocumented
Declaration
Swift
case cco
-
Undocumented
Declaration
Swift
case ear
-
Undocumented
Declaration
Swift
public var mimeType: String { get }
-
Undocumented
Declaration
Swift
public static func mimeType(for ext: String) -> String


--- layout: post status: publish published: true title: BizTalk 2004 Tracer Pipeline Component author: display_name: Tomas Restrepo login: tomasr email<EMAIL_ADDRESS>url: http://winterdom.com/ author_login: tomasr author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ wordpress_id: 93 wordpress_url: http://winterdom.com/2005/06/biztalk2004tracerpipelinecomponent date: '2005-06-06 16:32:35 +0000' date_gmt: '2005-06-06 16:32:35 +0000' categories: - BizTalk tags: [] comments: - id: 59 author: Juan author_email<EMAIL_ADDRESS>author_url: '' date: '2006-04-06 11:07:45 +0000' date_gmt: '2006-04-06 11:07:45 +0000' content: | InterchangeID does not exist. ---
I've just uploaded to my website a sample custom pipeline component for BizTalk Server 2004 that can be used to trace message contents as they flow through pipelines. To install it, just copy the assembly into your BizTalk installation's Pipeline Components directory, and add it to the VS.NET toolbox by right clicking on it and selecting the "Choose Items" option.
To use the component, just add it to a pipeline stage (it's a general component, so you should be able to add it to any stage), and configure the TracePath property. The value should be a path (including file name) where to save messages, and you can should use macros to ensure file names are unique (it does not support appending to files yet). Supported macros are:
This is the first pipeline component I create, so obviously I'm still groping all of this. A few caveats apply:
One thing I realized from writing this is that writing pipeline components is, in general, just as easy as I expected. The downside (same as with writing adapters) is that starting writing the new component takes a while because there is just so much boilerplate to write... there's definitely room for improvement here by writing a few helper base/utility classes.
So, if you're still interested by this point, you can get the code here.


Bearathlon is a triathlon hosted by the students of Cal Triathlon at the University of California Berkeley.
Race distances include collegiate draft legal sprint, collegiate classic sprint, and open sprint
SATURDAY: 5-6pm Mandatory Main Pre-Race Briefing for all Draft Legal Athletes on Friday Sept. 29th at Sports Basement (2727 Milvia St.)
5:30AM: Mandatory Make-up Draft Legal Briefing (if you did not go Friday)
6:00AM: Packet Pickup
6:00AM: Transition Opens
7:15AM: Draft Legal Pre-Race Briefing. THIS IS MANDATORY.
7:15AM Transition Closes (all Draft Legal bikes must be in)
7:30AM: Women's Collegiate Draft Legal Start
8:30AM: Transition Opens
9:00AM Transition Closes
9:00AM: Men's Collegiate Draft Legal Start
9:30AM: Women's Draft Legal Awards (During Men's Draft Legal)
10:00AM: Transition Opens (all draft legal bikes out, open bikes in)
10:30AM: Men's Draft Legal Awards
10:45AM: Classic Sprint Pre-Race Briefing. THIS IS MANDATORY.
11:00AM: Transition Closes
11:00AM: Men's Collegiate Classic Sprint
11:15AM: Women's Collegiate Classic Sprint
11:30AM: Men's Open Classic Sprint
11:45AM: Women's Open Classic Sprint
1:15PM: Awards
SATURDAY: 5-6pm Mandatory Main Pre-Race Briefing for all Draft Legal Athletes on Friday Sept. 29th at Sports Basement (2727 Milvia St.)
Day Before Race Day
Friday, Sep. 29th 12PM-8PM
2727 Milvia St.
Sports Basement Berkeley CA
160 University Ave, Berkeley, CA 94710


Selections: 6. Talisman of Burning Blood
Selections: 5. Killing Frenzy, Bloodbathed Axe
Selections: 1. Bronzed Flesh, Hackblade & Wrath-hammer
Selections: 5 Flesh Hounds
Selections: 5 Flesh Hounds
Selections: 5 Flesh Hounds
Selections: 5 Wrathmongers
Selections: Brass Despoilers
Selections: 2x 3 Bullgors, Bullgor Great Axes, Warherd Banner Bearer, Warherd Drummer
Selections: 2x 3 Bullgors, Bullgor Great Axes, Warherd Banner Bearer, Warherd Drummer
Selections: 2x 3 Bullgors, Bullgor Great Axes, Warherd Banner Bearer, Warherd Drummer
Selections: 0. Crowncleaver, 0. Master Decapitator, General
Selections: The Skullfiend Tribe
Selections: 2000 Points - Battlehost
Created with BattleScribe


The goal of Sexual Assault Response is to provide immediate response and appropriate support for victims of sexual assault in the USNA community. Each case is treated with the utmost consideration and compassion, always with the best interest of the survivor in mind. All members of the response team, the SARCs and Victim Advocates are trained to protect confidentiality to the highest degree each individual situation allows. We are here to respond 24/7, refer to services, and facilitate recovery. We are committed to delivering care and devoted to healing.
The Sexual Assault Response Coordinator (SARC) is responsible for coordinating comprehensive victim response services (tracking, reporting, advocacy and service coordination) from initial report to case disposition for midshipman, faculty and staff. The Victim Advocate (VA) provides direct victim support and case management, as well as continuously advising SAPRO’s Sexual Assault Response Coordinator (SARC) regarding best practices on response through the incumbent’s subject matter expertise.
For a full list of your resources, take a look through this guide to learn about reporting options, legal options, cournseling, and more.


viewer/reuseloader.js
import {GeometryLoader} from './geometryloader.js'
import {RenderLayer} from './renderlayer.js'
/**
* When loading Tiles, there is sometimes geometry (GeometryData) that is reused in other Tiles as well, in that case it is omitted in the stream, to be loaded later.
* This class is called whenever there is a batch of GeometryData that needs to be loaded.
*/
export class ReuseLoader {
constructor(viewer, reuseLowerThreshold, bimServerApi, fieldsToInclude, roids, quantizationMap, geometryCache, geometryDataToReuse) {
this.settings = viewer.settings;
this.viewer = viewer;
this.reuseLowerThreshold = reuseLowerThreshold;
this.bimServerApi = bimServerApi;
this.fieldsToInclude = fieldsToInclude;
this.roids = roids;
this.quantizationMap = quantizationMap;
this.geometryCache = geometryCache;
this.geometryDataToReuse = geometryDataToReuse;
this.nrReused = 0;
this.bytesReused = 0;
this.loaderCounter = 0;
}
/*
* Load an array of geometry data ids
*/
load(geometryDataIds) {
if (geometryDataIds.length == 0) {
return;
}
var start = performance.now();
var query = {
oids: geometryDataIds,
include: {
type: "GeometryData",
fieldsDirect: this.fieldsToInclude
},
loaderSettings: JSON.parse(JSON.stringify(this.settings.loaderSettings))
};
// The returned data (GeometryData) objects should be processed as normal, not as a preparedBuffer
query.loaderSettings.prepareBuffers = false;
var geometryLoader = new GeometryLoader(this.loaderCounter++, this.bimServerApi, this, this.roids, this.settings.loaderSettings, this.quantizationMap, this.viewer.stats, this.settings, query, null);
var p = geometryLoader.start();
p.then(() => {
var end = performance.now();
});
return p;
}
/*
* This class acts as if it's a RenderLayer, the createGeometry is called} from the GeometryLoader
* We just store the incoming geometry in the (global) GeometryCache
*/
createGeometry(loaderId, roid, croid, geometryId, positions, normals, colors, color, indices, hasTransparency, reused) {
this.nrReused++;
var bytes = RenderLayer.calculateBytesUsed(this.settings, positions.length, colors.length, indices.length, normals.length);
this.bytesReused += bytes;
var geometry = {
id: geometryId,
roid: roid,
croid: croid,
positions: positions,
normals: normals,
colors: colors,
color: color,
indices: indices,
hasTransparency: hasTransparency,
reused: reused, // How many times this geometry is reused, this does not necessarily mean the viewer is going to utilize this reuse
reuseMaterialized: 0, // How many times this geometry has been reused in the viewer, when this number reaches "reused" we can flush the buffer fo' sho'
bytes: bytes,
matrices: [],
objects: []
};
geometry.isReused = this.settings.gpuReuse;
this.geometryCache.set(geometryId, geometry);
geometry.isReused = geometry.reused > 1 && this.geometryDataToReuse != null && this.geometryDataToReuse.has(geometry.id);
if (geometry.isReused) {
this.viewer.stats.inc("Models", "Geometries reused");
} else {
this.viewer.stats.inc("Models", "Geometries");
}
}
}