# Path: zipline/finance/slippage.py
# class Transaction(object):
# 
#     def __init__(self, sid, amount, dt, price, order_id, commission=None):
#         self.sid = sid
#         self.amount = amount
#         self.dt = dt
#         self.price = price
#         self.order_id = order_id
#         self.commission = commission
#         self.type = DATASOURCE_TYPE.TRANSACTION
# 
#     def __getitem__(self, name):
#         return self.__dict__[name]
# 
#     def to_dict(self):
#         py = copy(self.__dict__)
#         del py['type']
#         return py
# 
# def create_transaction(event, order, price, amount):
# 
#     # floor the amount to protect against non-whole number orders
#     # TODO: Investigate whether we can add a robust check in blotter
#     # and/or tradesimulation, as well.
#     amount_magnitude = int(abs(amount))
# 
#     if amount_magnitude < 1:
#         raise Exception("Transaction magnitude must be at least 1.")
# 
#     transaction = Transaction(
#         sid=event.sid,
#         amount=int(amount),
#         dt=event.dt,
#         price=price,
#         order_id=order.id
#     )
# 
#     return transaction


import collections
import heapq
import logging
import operator
import unittest
import datetime
import pytz
import itertools
import zipline.utils.factory as factory
import zipline.finance.performance as perf
import zipline.utils.math_utils as zp_math
import zipline.protocol
from nose_parameterized import parameterized
from zipline.finance.slippage import Transaction, create_transaction
from zipline.gens.composites import date_sorted_sources
from zipline.finance.trading import SimulationParameters
from zipline.finance.blotter import Order
from zipline.finance import trading
from zipline.protocol import DATASOURCE_TYPE
from zipline.utils.factory import create_random_simulation_parameters
from zipline.protocol import Event
#
# Copyright 2013 Quantopian, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.





logger = logging.getLogger('Test Perf Tracking')

onesec = datetime.timedelta(seconds=1)
oneday = datetime.timedelta(days=1)
tradingday = datetime.timedelta(hours=6, minutes=30)


def create_txn(event, price, amount):
    mock_order = Order(None, None, event.sid, id=None)

# Path: zipline/finance/slippage.py
# class Transaction(object):
# 
#     def __init__(self, sid, amount, dt, price, order_id, commission=None):
#         self.sid = sid
#         self.amount = amount
#         self.dt = dt
#         self.price = price
#         self.order_id = order_id
#         self.commission = commission
#         self.type = DATASOURCE_TYPE.TRANSACTION
# 
#     def __getitem__(self, name):
#         return self.__dict__[name]
# 
#     def to_dict(self):
#         py = copy(self.__dict__)
#         del py['type']
#         return py
# 
# def create_transaction(event, order, price, amount):
# 
#     # floor the amount to protect against non-whole number orders
#     # TODO: Investigate whether we can add a robust check in blotter
#     # and/or tradesimulation, as well.
#     amount_magnitude = int(abs(amount))
# 
#     if amount_magnitude < 1:
#         raise Exception("Transaction magnitude must be at least 1.")
# 
#     transaction = Transaction(
#         sid=event.sid,
#         amount=int(amount),
#         dt=event.dt,
#         price=price,
#         order_id=order.id
#     )
# 
#     return transaction


# Path: tests/test_perf_tracking.py
import collections
import heapq
import logging
import operator
import unittest
import datetime
import pytz
import itertools
import zipline.utils.factory as factory
import zipline.finance.performance as perf
import zipline.utils.math_utils as zp_math
import zipline.protocol
from nose_parameterized import parameterized
from zipline.finance.slippage import Transaction, create_transaction
from zipline.gens.composites import date_sorted_sources
from zipline.finance.trading import SimulationParameters
from zipline.finance.blotter import Order
from zipline.finance import trading
from zipline.protocol import DATASOURCE_TYPE
from zipline.utils.factory import create_random_simulation_parameters
from zipline.protocol import Event

#
# Copyright 2013 Quantopian, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.





logger = logging.getLogger('Test Perf Tracking')

onesec = datetime.timedelta(seconds=1)
oneday = datetime.timedelta(days=1)
tradingday = datetime.timedelta(hours=6, minutes=30)


def create_txn(event, price, amount):
    mock_order = Order(None, None, event.sid, id=None)

    return create_transaction(event, mock_order, price, amount)